节点映像


本页面介绍可用于 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 作为容器运行时。

如需了解映像项目和映像系列,请参阅按操作系统提供功能支持

Linux 节点映像比较

以下部分就操作方面对 Container-Optimized OS 和 Ubuntu 节点映像进行了比较,具体如下所示:

  • 软件包管理
  • 系统初始化
  • 日志收集
  • 文件系统布局
  • 存储驱动程序支持

软件包管理器

coscos_containerd 节点映像使用的是最小的根文件系统,该系统包含对 Docker (containerd) 容器运行时的内置支持,并且还用作在主机上安装软件的软件包管理器。Ubuntu 映像使用 APT 软件包管理器

在 Container-Optimized OS 上管理软件

Container-Optimized OS 映像不提供 apt-get 之类的软件包管理软件。您无法使用传统机制在节点上安装任意软件,而应创建包含所需软件的容器映像。

在仅用于调试的 Standard 集群上,Container-Optimized OS 包含 CoreOS 工具箱,用于安装和运行 pingpsmiscpstree 等常用调试工具。如需详细了解如何调试 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
  • 可写入
  • 可执行
  • 无状态
  • tmpfs
此路径是 cloud-init 软件包的工作目录。
/etc
  • 可写入
  • 不可执行
  • 无状态
  • tmpfs
通常包含您的配置(例如,通过 cloud-init 定义的 systemd 服务)。最好在 cloud-init 中捕获所需的实例状态,因为系统会在新创建实例以及重启实例时应用 cloud-init
/tmp
  • 可写入
  • 不可执行
  • 无状态
  • tmpfs
通常用作暂存空间,不应用于存储永久性数据。
/mnt/disks
  • 可写入
  • 可执行
  • 无状态
  • tmpfs
您可以将永久性磁盘装载到 /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

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 团队使用)

在设置安全性高的集群时,您可能需要知道来源项目名称。列出的源项目随时可能更改。

后续步骤