1、Docker起源
2010年,在美国旧金山成立了一家名叫“dotCloud”的公司,主要提供基于PaaS的云计算技术服务,是和LXC(Linux container:Linux容器虚拟技术)有关的容器技术,后来dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker,Docker火了之后,dotCloud公司把公司名字也改成了Docker Inc.。
在容器技术之前,业界的网红是虚拟机,虚拟机技术的代表,是VMWare和OpenStack。但是为什么Docker能成功呢,就是因为它“轻”。虚拟机属于虚拟化技术,而Docker这样的容器技术,也是虚拟化技术,但是属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare),而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”),它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。
2、Kubernetes起源
-
Kubernetes最初源于谷歌内部的Borg,后面谷歌基于Borg系统,采用go语言重写成了Kubernetes,去掉头尾正好8个字符,简称K8S,类似于我们在项目中使用的国际化(internationalization)叫做 i18n 是一样效果。
-
2014年6月 谷歌云计算专家Eric Brewer在旧金山的发布会为这款新的开源工具揭牌。
-
2015年7月22日K8S迭代到 v 1.0并在OSCON大会上正式对外公布。
-
为了建立容器编排领域的标准和规范,Google、RedHat 等开源基础设施领域玩家们,在 2015 年共同牵头发起了名为 CNCF(Cloud Native Computing Foundation)的基金会。Kubernetes 成为 CNCF 最核心的项目。发起成员:AT&T, Box, Cisco, Cloud Foundry Foundation, CoreOS, Cycle Computing, Docker, eBay, Goldman Sachs, Google, Huawei, IBM, Intel, Joyent, Kismatic, Mesosphere, Red Hat, Switch SUPERNAP, Twitter, Univa, VMware and Weaveworks。
-
2018年,超过 1700 开发者成为 Kubernetes 项目社区贡献者,全球有 500 多场沙龙。国内出现大量基于 Kubernetes 的创业公司。
-
2020 年,Kubernetes 项目已经成为贡献者仅次于 Linux 项目的第二大开源项目。成为了业界容器编排的事实标准,各大厂商纷纷宣布支持 Kubernetes 作为容器编排的方案。
3、为什么Kubernetes能成功
容器技术虽然解决了应用和基础设施异构的问题,让应用可以做到一次构建,多次部署,但在复杂的微服务场景,单靠 Docker 技术还不够,它仍然有以下问题没有解决:
-
集成和编排微服务模块
-
提供按需自动扩容,缩容能力
-
故障自愈
-
集群内的通信
除了Kubernetes,还有Apache的Mesos,以及Docker公司的Docker Swarm,能实现容器编排管理,那么为啥Kubernetes能成功呢?
Mesos大而全,虽然很稳定,但是它的使用户快速学习应用变得更加困难;Docker Swarm 的优点和缺点都是使用标准的 Docker 接口,因为使用简单,容易集成到现有系统,所以在支持复杂的调度系统时候就会比较困难,而Kubernetes具备以下核心能力:
-
轻量级:Go语言实现,资源消耗小。
-
存储编排:Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
-
弹性伸缩:按需的垂直扩容,新的服务器(node)能够轻易的增加或删除;按需的水平扩容,容器实例能够轻松扩容,缩容。
-
负载均衡IPVS:可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
-
自动部署和回滚:可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
-
自我修复:Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
-
密钥与配置管理:Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
-
自动二进制打包:Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
4、Kubernetes学习路线
待添加。。。