本页面介绍可用于 Google Kubernetes Engine (GKE) 节点的节点映像。
GKE Autopilot 节点始终使用带有 containerd 的 Container-Optimized OS (cos_containerd
),这是推荐的节点操作系统。如果使用 GKE Standard,则可以选择创建集群或节点池期间在每个节点上运行的操作系统映像。还可以升级现有 Standard 集群以使用其他节点映像。如需了解如何设置节点映像,请参阅指定节点映像。
可用节点映像
GKE 会为您的集群的每个操作系统提供以下节点映像选项:
操作系统 | 节点映像 |
---|---|
Container-Optimized OS | |
Ubuntu |
|
Windows Server |
|
Container-Optimized OS
Google 推出的 Container-Optimized OS 节点映像基于最新版本的 Linux 内核,并已经过优化以增强节点安全性。Container-Optimized OS 映像的一个团队提供支持,该团队可以快速对映像进行修补以确保安全性并且可对功能进行迭代。相较于其他映像,Container-Optimized OS 映像提供的支持、安全性和稳定性更佳。
如需了解映像项目和映像系列,请参阅节点映像源项目。
Container-Optimized OS 变体
两个容器运行时都提供了 Container-Optimized OS。除了选定的容器运行时之外,映像都是相同的。
- 带有 containerd 的 Container-Optimized OS (
cos_containerd
):cos_containerd
映像使用 containerd 作为与 Kubernetes 直接集成的容器运行时。GKE Autopilot 集群始终使用此映像。如需了解详情,请参阅 Containerd 节点映像。 - 带有 Docker 的 Container-Optimized OS (
cos
):cos
映像使用 Docker 容器运行时。
Ubuntu
已根据 GKE 的节点映像要求对 Ubuntu 节点映像进行了验证。如果节点需要支持 XFS、CephFS 或 Debian 软件包,则应使用 Ubuntu 节点映像。
如需了解映像项目和映像系列,请参阅按操作系统提供功能支持。
Ubuntu 变体
两个容器运行时都提供了 Ubuntu。除了选定的容器运行时之外,映像都是相同的。
带有 containerd 的 Ubuntu (
ubuntu_containerd
):ubuntu_containerd
映像使用 containerd 作为容器运行时。如需了解详情,请参阅 Containerd 节点映像。带有 Docker 的 Ubuntu (
ubuntu
):ubuntu
映像使用 Docker 作为容器运行时。
Windows Server
使用 Windows Server 节点池创建集群时,您可以使用 Windows Server 半年渠道 (SAC) 或 Windows Server 长期服务渠道 (LTSC) 节点映像。所有 Windows 节点映像都是 Windows Server Datacenter Core 映像。一个集群可以具有多个使用不同 Windows Server 版本的 Windows Server 节点池,但每个单独的节点池只能使用一个 Windows Server 版本。如需了解详情,请参阅选择 Windows 节点映像。
Windows Server LTSC 和 SAC 节点映像都提供了以下两个容器运行时:Docker 和 containerd。除了选定的容器运行时之外,映像都是相同的。
Containerd 运行时映像(适用于 GKE 1.21 及更高版本):
带有 containerd 的 Windows Server LTSC (
windows_ltsc_containerd
):windows_ltsc_containerd
映像使用 containerd 作为容器运行时。目前,此映像类型映射到两个节点映像:Windows Server 2022 和 Windows Server 2019。您可以通过带有windows-os-version
标志的 CLI 命令创建 Windows LTSC2022 节点池。如需详细了解如何创建 Windows Server 2022 节点池,请参阅创建 Windows 节点池
如需详细了解 containerd 节点映像,请参阅 Containerd 节点映像。
带有 containerd 的 Windows Server SAC (
windows_sac_containerd
):windows_sac_containerd
映像使用 containerd 作为容器运行时。如需了解详情,请参阅 Containerd 节点映像。
Docker 运行时映像(适用于 GKE 1.16 版及更高版本):
- 带有 Docker 的 Windows Server LTSC (
windows_ltsc
):windows_ltsc
映像使用 Docker 作为容器运行时。 - 带有 Docker 的 Windows Server SAC (
windows_sac
):windows_sac
映像使用 Docker 作为容器运行时。
- 带有 Docker 的 Windows Server LTSC (
如需了解映像项目和映像系列,请参阅按操作系统提供功能支持。
Linux 节点映像比较
以下部分就操作方面对 Container-Optimized OS 和 Ubuntu 节点映像进行了比较,具体如下所示:
- 软件包管理
- 系统初始化
- 日志收集
- 文件系统布局
- 存储驱动程序支持
软件包管理系统
cos
和 cos_containerd
节点映像使用的是最小的根文件系统,该系统包含对 Docker (containerd) 容器运行时的内置支持,并且还用作在主机上安装软件的软件包管理系统。Ubuntu 映像使用 APT 软件包管理系统。
在 Container-Optimized OS 上管理软件
Container-Optimized OS 映像不提供 apt-get
之类的软件包管理软件。您无法使用传统机制在节点上安装任意软件,而应创建包含所需软件的容器映像。
在仅用于调试的 Standard 集群上,Container-Optimized OS 包含 CoreOS 工具箱,用于安装和运行 ping
、psmisc
或 pstree
等常用调试工具。如需详细了解如何调试 Container-Optimized OS 节点,请参阅 Container-Optimized OS 方法指南。
在 Ubuntu 上管理软件
Ubuntu 映像使用 APT 软件包管理系统。您可以使用 apt-get
命令在这些映像上安装软件包。例如,如需安装 ceph
软件包,请运行以下命令:
sudo apt-get update
sudo apt-get install ceph
系统初始化
在系统初始化过程中,Container-Optimized OS 和 Ubuntu 节点映像都使用 systemd
管理系统资源和服务。
这两种节点映像都使用 systemd 服务文件定义节点上的 services
,并使用 systemd.targets
通过依赖项对启动目标进行分组。
日志收集
Container-Optimized OS 和 Ubuntu 节点映像使用 systemd-journald
收集系统范围内的日志。
在 Container-Optimized OS 和 Ubuntu 上查看日志
如需查看具有 Container-Optimized OS 或 Ubuntu 节点映像的节点上的日志,必须使用 journalctl
命令。例如,如需查看 containerd 守护程序日志,请使用以下命令:
sudo journalctl -u containerd
要查看 kubelet 日志,请使用以下命令:
sudo journalctl -u kubelet
文件系统布局
Ubuntu 节点映像使用标准 Linux 文件系统布局。
已优化 Container-Optimized OS 节点映像文件系统布局以增强节点安全性。启动磁盘空间分为三种类型的分区:
- 根分区,以只读形式装载
- 有状态分区,可写入且有状态
- 无状态分区,可写入,但重新启动后不会保留内容
在使用 Container-Optimized OS 时,如果您运行自己的服务,这些服务对容器外部的文件系统布局有特定要求,请注意分区。
使用 Container-Optimized OS 文件系统
以下是 Container-Optimized OS 节点映像文件系统中的路径列表,及其属性和建议用途:
路径 | 属性 | 用途 |
---|---|---|
/ |
|
根文件系统以只读形式装载以保持完整性。内核在启动期间验证根文件系统完整性,如果出现错误,则拒绝启动。 |
/home /var |
|
这些路径用于存储保留期为启动磁盘的生命周期的数据。它们装载自 /mnt/stateful_partition 。 |
/var/lib/google /var/lib/docker /var/lib/toolbox |
|
这些路径分别是 Compute Engine 软件包(例如账号管理器服务)、Docker 和工具箱的工作目录。 |
/var/lib/cloud |
|
此路径是 cloud-init 软件包的工作目录。 |
/etc |
|
通常包含您的配置(例如,通过 cloud-init 定义的 systemd 服务)。最好在 cloud-init 中捕获所需的实例状态,因为系统会在新创建实例以及重启实例时应用 cloud-init 。 |
/tmp |
|
通常用作暂存空间,不应用于存储永久性数据。 |
/mnt/disks |
|
您可以将永久性磁盘装载到 /mnt/disks 下的目录中。 |
存储驱动程序支持
每个节点映像所支持的存储插件的类型有所不同。在说明节点映像对特定存储驱动程序的支持时,以下术语适用:
- 是 - 已经过全面测试/完全受支持:此存储插件完全受支持并已使用指定节点映像进行了测试。
- 是 - 有限的测试:此存储插件适用指定的节点映像,但仅以有限的方式进行了测试;您可能会遇到意外行为。对于 Container-Optimized OS,这些插件最终将进行全面测试且完全受支持。
- 不受支持:此存储插件未经过测试或未用于指定的节点映像,GKE 无法提供任何功能保证。没有测试此存储插件的计划。
- 否:由于节点操作系统或 Google Cloud 固有的限制,此存储插件无法用于指定的节点映像。
以下矩阵说明了每个 GKE 节点映像如何支持一些常见的存储插件。
卷类型 | 它是否适用于 Container-Optimized OS (cos )? |
是否适用于 Ubuntu? |
---|---|---|
Compute Engine 永久性磁盘(EXT4 或 XFS) |
是 - 已经过全面测试/完全受支持 (只有 cos-85 及更高版本支持 XFS)。请参阅 GKE 版本说明 | 是 - 已经过全面测试/完全受支持 |
NFSv3 | 是 - 已经过全面测试/完全受支持 | 是 - 已经过全面测试/完全受支持 |
NFSv4 | 是 - 已经过全面测试/完全受支持 | 是 - 已经过全面测试/完全受支持 |
CephFS | 否 | 是 - 有限的测试 (默认情况下不安装驱动程序。您必须安装 ceph 客户端,最好通过 DaemonSet 进行。) |
Cinder | 否 | 否 |
Fibre Channel | 否 | 否 |
Flocker | 不支持 | 不支持 |
iSCSI | 否 | 否 |
RBD | 否 | 否 |
节点虚拟机修改
节点虚拟机的启动磁盘上的修改在重新创建节点后将不再保留。在手动升级、自动升级、自动修复和自动扩缩期间,系统会重新创建节点。此外,如果您启用需要重新创建节点的功能(例如 GKE Sandbox、节点内可见性和安全强化型节点),系统会重新创建节点。
如需在重新创建节点后保留修改,请使用 DaemonSet。
我们建议您不要管理由节点映像提供的关键软件,例如内核或容器运行时(无论是 containerd
还是 docker
)。节点映像已经过广泛测试,修改节点映像中提供的关键软件会导致节点处于未知且不可测试的状态。
GKE Autopilot 节点不允许修改节点软件。
将 Container-Optimized OS 节点映像版本映射到 GKE 补丁程序版本
GKE 发布 GKE 补丁程序版本到 Container-Optimized OS 节点映像版本的 JSON 映射:
您可以使用此映射升级到特定 GKE 版本,以获取特定映像版本。例如,如果您的集群需要某个映像版本中的特定功能或修复程序,您可以找到相应映射,然后将集群升级到特定的 GKE 版本,以获取包含相应更改的 Container-Optimized OS 映像版本。如需详细了解 Container-Optimized OS 映像版本,请参阅 Container-Optimized OS 版本说明。
此列表大约每周更新一次。如需查看信息的新鲜度,请参阅 JSON 文件中的 creation_time
字段。
节点映像版本说明
Container-Optimized OS
Google 为 Container-Optimized OS 提供了全面的文档:
Ubuntu
Google 会定期更新可在集群节点上使用的 Ubuntu 映像。有关这些更新的信息(包括默认情况下安装的软件包的清单链接),请参阅 GKE 版本说明。
已知问题
使用 Container-Optimized OS 和 Docker 运行时在 GKE 节点上重置随机连接
当同一节点上的两个 pod 使用 Kubernetes ClusterIP Service 进行通信时,使用 Container-Optimized OS 与 Docker (cos
) 的 GKE 节点可能会重置随机 TCP 连接。
以下 GKE 版本会受到影响:
- 1.20.5-gke.100 或更高版本
要解决此问题,请使用以下任一选项:
节点映像来源项目
GKE 集群的可用节点映像包含在以下源项目中:
- Container-Optimized OS 映像:
gke-node-images
- Ubuntu 映像:
ubuntu-os-gke-cloud
- Windows Server 映像:
gke-windows-node-images
除了上面列出的来源项目之外,GKE 还使用以下来源项目,仅供 GKE 团队使用:
ubuntu-os-gke-cloud-private
(预留以专供 GKE 团队使用)ubuntu-os-gke-cloud-devel
(预留以专供 GKE 团队使用)
在设置安全性高的集群时,您可能需要知道来源项目名称。所列源项目可能会发生变化。