第2章 计算节点管理
作为容器云平台,Kunernetes 最核心的功能就是集群管理——管理算力。一个集群由成百上千个计算节点聚合而成,因此,了解单个计算节点是以点带面地窥探云计算平台的基础台阶。
构建Kubernetes 集群的第一步,通常由节点规划开始:选择什么类型的硬件、操作系统、容器运行时、网络模型等,这些规划决定了一个集群的稳定性和性能。
计算节点是Kubernetes 集群的基本组成单元。用户的应用程序在经过调度后到达某计算节点,而最终的用户进程会在某特定计算节点运行,因此节点的稳定性和性能会直接影响用户的应用。节点规划包含了从硬件到软件层面的多维度选择:
1.节点规格
云计算平台是对计算、存储、网络等资源的抽象,用户无须关心其作业在哪台节点上运行,这就要求云平台的所有计算节点的性能是一致的。Kubernetes 集群也应遵守该指导原则:服务于同一业务的所有节点的规格应保持一致,以便保证应用的所有实例的计算能力一致,同时避免某些节点因受限于硬件的性能而拖慢整个应用的响应能力等情况。因此,该指导原则有助于我们更好地分担负载、转移故障。
当然,不同类型的作业对硬件的需求可能不一致,比如某些应用需要大硬盘,某些应用需要GPU。为满足多种作业需求,可以将不同类型的计算节点标记为不同的taints 和labels。
2.节点虚拟化
在Kubernetes 的早期版本中,OpenStack 等虚拟化云平台还是业界的主流。为避免对主流架构造成冲击,同时为自身寻找生存空间,Kubernetes 追求与虚拟化云平台共存。虚拟化云平台的优势在于成熟的管理平台和大规模的生产部署,其灵活性为Kubernetes 提供了灵活的节点管理功能。因此,用户只需将Kubernetes 部署在现有的平台之上,即可享受到容器化带来的收益。
随着容器云的技术迭代,Kubernetes 逐步成为容器云的事实标准。物理机自动化管理的不断成熟,使得剥离虚拟化层成为当下的大趋势。但不排除一些企业,尤其是公有云提供商为了支持多租户隔离、提供粒度更小的计算节点而继续沿用虚拟化。然而大道至简,做减法是计算机行业任何时代都应追求的目标,虚拟化带来的额外管理成本和性能损失不可忽视。如果能够在满足业务需求的前提下从架构层面将其剥除,降低开发运维成本,那么何乐而不为呢?
3.操作系统
主流的容器技术和Kubernetes 都支持多种操作系统,包括Linux、MacOS、Windows等。那么该如何选择操作系统呢?以Linux 为例,对操作系统的选择包括确定内核和发行版。
操作系统的内核版本至关重要,过旧的内核版本缺少功能支持,对容器的版本兼容也可能存在问题,而最新的版本其稳定性还有待验证,因此选择稳定并且维护周期长的内核版本是明智之举。容器在运行时需要复用主机内核,因此主机内核的选择决定了所有运行在其之上的应用可用的内核版本。
操作系统的发行版本也是需要考虑的重要问题。容器的封装特性决定了其运行需要的所有依赖包都在自己的镜像中,因此,容器通常对主机操作系统不产生直接依赖。主机操作系统在选择或者构建自定义发行版本时,只需遵循裁剪原则,在满足业务需求的前提下,选择软件安装包最小集。更少的预装软件意味着更少的管理成本、更快的启动速度、更少的资源占用和更高的安全性。
操作系统的升级和重启的开销是在规划操作系统时不可忽视的考量因素。大多数人的直观感受是,单台节点的升级开销可控。但对大型集群来说,当这个开销放大到数万倍甚至数十万倍,同时还要考虑其承载应用的特性、本地化数据的迁移等情况时,操作系统的升级就会变成一个生产化实践中的巨大挑战。
对于操作系统的启动方式,按惯例可以从节点的操作系统分区启动,也可以通过网络加载到内存启动。前者可以快速高效地完成系统启动,但是可能会由于节点硬盘的损坏而造成节点下线;后者方便升级,但需要依赖可靠的网络和后端存储,且内存的使用成本也比硬盘高。
4.文件系统
以Linux 系统为例,目前主流的文件系统格式是ext4 和XFS。Kubernetes 允许Pod 同时挂载多种类型卷,这些外挂卷可以提供不同类型的文件系统,以满足用户的多样需求。文件系统的复杂性使得启用多种文件系统的维护成本较高。如非迫不得已,建议选择统一的文件系统,以降低维护成本。同时,专注于一个技术栈持续投资,有利于团队进行长期技术积累。此外,直接采用不同厂商的Linux 默认的文件系统格式是成本最低的选择。
5.运行时
Kubernetes 作为容器化云平台,其产生的主要驱动力就是为容器化应用提供管理平台。Docker 作为最成熟、生产化部署最广的容器技术,成为Kubernetes 的运行时首选。要了解运行时,就需要明白其依托的Linux 技术、Namespace 和CGroup。
容器化的确有诸多便利,但容器共享操作系统内核,并不在操作系统层面做隔离,因此某些对安全性较高的企业或应用类型不允许使用容器技术。Kubernetes 提供了运行时的接口抽象,允许用户按需选择适应业务特性的运行时技术,可以选择Docker 为主流的容器技术,也可以选择Kata 等典型的虚拟化技术。
总体而言,本章从多个层面探讨计算节点的规划和配置问题,以提供对容器的运行环境的全面认识。