第十章 企业级容器管理平台 Kubernetes

1. 容器编排初识

1.企业架构的演变

​ 企业中的系统架构是实现系统正常运行和服务高可用、高并发的基础。随着时代与科技的发展,系统架构经过了三个阶段的演变,实现了从早期单一务器部署到现在的容器部署方式的改变。

1、传统时代

早期,企业在物理服务器上运行应用程序,无法为服务器中的应用程序定义资源边界,导致系统资源分配不均匀。例如,一台物理服务器上运行着多个应用程序,可能存在一个应用程序占用大部分资源的情况,其他应用程序的可用资源因此减少,造成程序运行表现不佳。当然也可以在多台物理服务器上运行不同的应用程序,但这样资源并未得到充分利用,也增加了企业维护物理服务器的成本。

2.虚拟化时代

虚拟化技术可以在物理服务器上虚拟出硬件资源,以便在服务器的CPU上运行多个虚拟机(Vrual Machine,VM)。每个 VM 不仅可以在虚拟化硬件之上运行包括操作系统在内的所有组件,而且相互之间可以保持系统和资源的隔离,从而在一定程度上提高了系统的安全性虚拟化有利于更好地利用物理服务器中的资源,实现更好的可扩展性,从而降低硬件成本。

3.容器化时代

​ 容器化技术类似于虚拟化技术,不同的是容器化技术是操作系统级的虚拟,而不是硬件级的虚拟。每个容器都具有自己的文件系统、CPU、内存、进程空间等,并且它们使用的计算资源是可以被限制的。应用服务运行在容器中,各容器可以共享操作系统(OperatingSystem,Os)。因此,容器化技术具有轻质、宽松隔离的特点。因为容器与底层基础架构和主机文件系统隔离,所以跨云和操作系统的快速分发得以实现。

2.常见工具

​ 容器的出现和普及为开发者提供了良好的平台和媒介,使开发和运维工作变得更加简单与高效。着企业业务和需求的增长,在大规模使用容器技术后,如何对这些运行的容器进行管理成为首要问题。在这种情况下,容器编排工具应运而生,最具代表性的有以下三种。

​ 容器的出现和普及为开发者提供了良好的平台和媒介,使开发和运维工作变得更加简单与高效。着企业业务和需求的增长,在大规模使用容器技术后,如何对这些运行的容器进行管理成为首要问题。在这种情况下,容器编排工具应运而生,最具代表性的有以下三种。

1.Apache 公司Mesos

Mesos是 Apache 旗下的开源分布式资源管理框架,由美国加州大学伯克利分校的 AMPL(Algorithms Machine and People Lab,算法、计算机和人实验室)开发。Mesos 早期通过了万台节点验证,2014年之后又被广泛使用在 eBay、Twitter 等大型互联网公司的生产环境中。

2.Docker公司三剑客

容器诞生后,Docker 公司就意识到单一容器体系的弊端,为了能够有效地解决用户的需求和集群的瓶颈,Docker 公司相继推出Machine、Compose、Swarm项目。

Machine 项目用 Go 语言编写,可以实现 Docker 运行环境的安装与管理,实现批量在指定节点或平台上安装并启动 Docker 服务。

Compose 项目用 Python 语言编写,可以实现基于 Docker 容器多应用服务的快速编排,其前身是开源项目 Fig。Compose 项目使用户可以通过单独的 YAML 文件批量创建自定义的容器,并通过 API(Application Programming Interface,应用程序接口)对集群中的 Docker 服务进行管理。

Swanm 项目基于 Go 语言编写,支持原生态的 Docker API和 Docker 网络插件,很容易实现跨主机集群部署。

3.Google 公司 Kubernetes

Kubemmetes(来自希腊语,意为“舵手”,因为单词k与s之间有8个字母,所以业内人士喜欢称其为 K8S)基于Go语言开发,是 Google 公司发起并维护的开源容器集群管理系统,底层基于Docker、rkt 等容器技术,其前身是 Google 公司开发的 Borg系统。Borg系统在 Google 内部已经应用了十几年,曾管理超过 20亿个容器。经过多年的经验积累,Go0gle 公司将 Borg 系统完善后贡献给了开源社区,并将其重新命名为 Kubernetes。

Kubernetes 系统支持用户通过模板定义服务配置,用户提交配置信息后,系统会自动完成对应用容器的创建、部署、发布、伸缩、更新等操作。系统发布以来吸引了 Red Hat、CentOS等知名互联网公司与容器爱好者的关注,是目前容器集群管理系统中优秀的开源项目之一。

3.kubernetes的特性

1、自动装箱
构建于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率

2、自我修复(自愈)
支持容器故障后自动重启、节点故障后重新调度容器,以及可用节点、健康状态检查失败后关闭容器
并重新创建等自我修复机制

3、水平扩展
支持通过简单命令或UI手动水平扩展,以及基于CPU等资源负载率的自动水平扩展机制

4、服务发现和负载均衡
Kubernetes通过其附加组件之一的KubeDNS(或CoreDNS)为系统内置了服务发现功能,它会每个Service配置
DNS名称,并允许集群内的客户端直接使用此名称发出请求,而Service则通过iptables或ipvs内建了负载均衡机制

5、自动发布和回滚
Kubernets支持"灰度"更新应用程序或其配置信息,它会监控更新过程中应用程序的监控状态,以确保它不会在同一时刻杀掉所有实例,而此过程中一旦有故障发生,就会立即自动执行回滚操作

6、存储编排
Kubernetes支持Pod对象按需自动挂载不同类型的存储系统,这包括节点本地存储、公有云服务商的云存储
(如AWS和GCP等),以及网络存储系统(例如:NFS、ISCSI、Ceph、GlusterFS等)

7、批量处理执行
除了服务型应用,Kubernetes还支持批处理作业及CI(持续集成),如果需要,一样可以实现容器故障后恢复。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐