精通Kubernetes
上QQ阅读APP看书,第一时间看更新

Kubernetes的主要功能是容器编排,是指确保所有容器都按照计划运行在物理机或虚拟机上。这些容器在部署环境和集群配置的约束下被打包执行大量工作负载。此外,Kubernetes必须密切关注所有运行中的容器,替换运行中止、无响应或其他非正常状态的容器。后续章节将会介绍Kubernetes的更多功能,本节将重点介绍容器及其编排。

硬件贯穿于容器编排的始终。运行工作负载需要一些真正的硬件配置,包括具有计算能力(CPU或核心)、内存和一些本地持久存储(机械硬盘或SSD)的实体物理机。此外,需要一些共享的持久存储,并使用网络连接所有物理机,以便于其互相查找和信息互通。此时,可在物理机上运行多个虚拟机或单纯保持裸金属状态。Kubernetes可部署在实体硬件或虚拟机集群上,同时也可以直接在实体硬件或虚拟机上管理容器。理论上,一个Kubernetes集群可以由物理机和虚拟机组合而成,但这并不常见。

容器是封装微服务的理想选择,因为它们不仅为微服务提供隔离,并且非常轻量,且在部署多个微服务时不会像使用虚拟机时那样产生大量开销。这使得容器非常适合于云部署,因为为每个微服务分配整个虚拟机的成本非常高。

现在主要的云提供商(如AWS、GCE和Azure)都提供容器托管服务,其中一些便是基于Kubernetes(如Google的GKE);另外诸如Microsoft Azure的容器服务,则是基于Apache Mesos等其他解决方案。此外,AWS将ECS(EC2上的容器服务)作为其自有的编排解决方案。Kubernetes的强大之处在于,它可以部署在上述这些云服务器上。Kubernetes有一个云提供商接口,允许任何云提供商执行并无缝集成Kubernetes。

过去系统规模很小,每个服务器都有一个名字。开发人员和用户确切地知道每台机器上运行的是什么软件。我工作过的许多公司都进行过数日讨论,来决定服务器的命名主题。例如,作曲家和希腊神话人物是受欢迎的选择。开发人员像对待自己挚爱的宠物一样对待服务器。如果一台服务器发生故障,这将是重大的危机,所有人都需投入全部精力完成这3件事情:更换一台新的服务器;确认发生故障的服务器上还运行着哪些数据;如何让这些数据在新服务器上运行。如果发生故障的服务器存储了一些重要的数据,那只能寄希望于备份数据和数据恢复。

显然,这种方法并不合适,当有几十个甚至上百个服务器时,必须像对待牲畜一样对待它们,此时需考虑的是集体而非个体。或许此时构建机器时仍需要像对待宠物一样处理,但对于网络服务器来讲,只能像对待牲畜一样去处理。

Kubernetes把这一方法推向极致,它承担了将容器分配给特定机器的全部任务。无须花费大量时间与各个机器(节点)交互。这对于无状态工作负载来说是最好的。对于有状态应用程序,情况稍有不同,但Kubernetes提供了一个名为StatefulSet的解决方案,我们接下来将对其进行讨论。

在本节中,讲述了容器编排的概念,讨论了主机(物理机或虚拟机)和容器之间的关系,以及在云端运行容器的优势,最后以牲畜和宠物作为类比探讨服务器的运行模式。1.2节将进入Kubernetes的世界,了解与之相关的概念和术语。