Kubernetes 是什么
都9102年了,你再不了解 Kubernetes 就真的 out 了!!!(贩卖焦虑体
kubernetes 是什么?Kubernetes 这个词来源于希腊语,有主管、舵手、船长的意思,我们从中能听到一丝管理的意味,从图标中也能看出来。
在 kubernetes 的网站上,描述 kubernetes 是:
生产级别的容器编排系统
从这个定义我们可以提炼出三个关键字:
- 生产级别
- 容器
- 编排系统
那下面分别解释下 k8s 的几个关键字(k8s是kubernetes的缩写,中间的8代表k与s间省略的8个字母,类似的缩写方式还有 internationalization 缩写为 i18n)。
1 生产级别
说 k8s 是生产级别有如下几个原因:
- k8s 是 Google 开源的系统,基于 Google 的 Borg 和 Omega 系统设计,这套系统已经在 Google 内部运行了10年以上,并还在支持Google 每周数十亿容器的运行。
- k8s 是 CNCF (Cloud Native Computing Foundation)的首个毕业项目。
- k8s 在2015年6月发布首个生产级成熟版本1.0后,目前(19年8月)已经进展到1.15版本,已经被各大公司广泛使用。
2 容器
没有集装箱,就没有全球化
什么是容器?容器的英文为 container,这个词除了有容器的意思,还有集装箱的意思。对于运输,集装箱有着重大的意义,在《集装箱改变世界》 这本书中,提出了“没有集装箱,就没有全球化”的观点,下面引用其中一段文字:
经济全球化的基础就是现代运输体系,而一个高度自动化、低成本和低复杂性的货物运输系统的核心就是集装箱。在1956年集装箱出现之前,人们很难想象美国的沃尔玛能够遍地开花。而在集装箱出现之后,以至于某件东半球的产品运至纽约销售,远比在纽约近郊生产该产品更划算。毫不起眼的集装箱降低了货物运输的成本,实现了货物运输的标准化,以此为基础逐步建立全球范围内的船舶、港口、航线、公路、中转站、桥梁、隧道、多式联运相配套的物流系统,世界经济形态因此而改变。
集装箱运输能够获得成功,可以概括出如下几个特点:
- 可移植性:集装箱可以被任何类型支持的船舶使用
- 包容性:支持多种类型的货物,这些货物都可以被打包在集装箱内
- 标准大小:标准大小的集装箱可以被完美的组合在一起
- 共存:多个集装箱可以放到同一个船上
- 隔离:不同集装箱的货物间彼此隔离
这些特点同样适用于软件领域的容器:
- 可移植性:容器可以被任何类型支持的操作系统安装使用
- 包容性:支持多种类型的软件,这些软件都可以被打包在容器内
- 标准格式
- 共存:多个容器可以运行在同一个物理机上
- 隔离:不同容器的软件间彼此隔离
因此,可以说容器是集装箱思路在软件领域的实现,容器是软件的一个标准单元,可以将代码和依赖打包在一起、能够运行在多种操作系统和环境之上、多个容器能够在同一台物理机器上运行。
目前一说到容器,大家最容易想到的就是 Docker,但其实在 Docker 出现之前,容器技术也已经存在:
- Cgroups:在2006年,通过 Cgroups 技术可以实现进程级别的隔离,能够对进程实现资源的限制
- Linux Containers(lxc):在 2008年,通过 lxc 实现操作系统级别的虚拟化,能够提供单独的进程和网络空间
- Docker:在2013年,docker 出现,docker 是一套容器执行和管理系统,结合之前的 lxc 等技术,提供了更完整的方案,使容器技术被广泛使用。
此外与虚拟机不同,容器只包括了应用和应用相关的库,不同的容器共用宿主机的内核。容器也更轻量化,带来了更小的overhead。
没有容器,就没有微服务化
容器技术带来的最显著的影响就是使软件更加的模块化,引领软件由单体架构转变向微服务架构:
容器和微服务化后,带来了一些好处,比如:
- 模块间更加独立,可以独立的部署和发布,加快了发布和更新的速度
- 隔离的运行环境,可以为不同模块定制不同的运行环境
但同时微服务化带来的问题就是,以前的一个单独的服务,现在变成了多个服务,服务的个数骤增,增大了部署和运维的工作量。同时,由于不同模块的软件依赖、网络配置、资源需求等各不相同,如果都直接使用 docker cli 来进行管理和配置,无疑是一件困难且容易出错的事,不能管理大规模的容器系统,因此就需要容器编排系统来处理。
3 编排系统
容器的编排系统需要能够管理和组织在一个集群上的运行的宿主机和容器,需要能完成如下任务:
- 管理网络和访问
- 跟踪容器的状态
- 增大或缩小服务的规模
- 实现负载平衡
- 宿主机无响应后实现容器的重新分配
- 服务发现
- 管理容器的存储
- 等等…
k8s 是这样一个容器编排系统,但除了 k8s 还有一些其他的容器编排系统,比如:
- Apache Mesos:是一个集群管理工具,支持容器的编排
- Docker Swarm:docker 容器平台自带的编排系统
这三个不同的容器编排系统,在不同的场景下有各自的优势,具体的对比可以参考文章,简单来说:
- 入门或者测试使用:Docker Swarm
- 企业级使用:k8s
- 需要除了容器编排外的更多集群管理功能:Apache Mesos
不过,不管是Docker 还是 Mesos 都支持与 k8s 的集成,所以 k8s 是目前被使用的最为广泛的容器编排系统。
4 k8s 架构概览
k8s 的架构图如下: