将节点迁移到 Linux cgroupv2


从 1.32 版开始,Google Kubernetes Engine (GKE) 会将集群从 cgroupv1 迁移到 cgroupv2。本页说明了如何执行以下操作:

  • 检查集群的节点正在运行哪种 cgroups 模式,以及在 cgroups 模式之间切换是否会影响工作负载。
  • 将 GKE Standard 集群节点池迁移到 cgroupv2
  • 暂时停用 GKE 会自动将节点池从 cgroupv1 迁移到 cgroupv2。如果您的集群运行的工作负载可能会受到在 cgroups 模式之间转换的影响,请按照以下说明操作。

您可以手动迁移或暂时停用 Standard 节点池。您无法迁移和暂时停用 Autopilot 集群。

如果您知道自己的工作负载在 cgroupv2 上按预期运行,或者不受 cgroup 模式配置的影响,则可以跳过阅读本页面。GKE 会在 1.32 版及更高版本自动将集群从 cgroupv1 迁移到 cgroupv2

Linux 对照组简介

kubelet 和容器运行时使用 Linux 内核对照组 (cgroups) 进行资源管理,例如限制 Pod 中每个容器可以访问的 CPU 或内存量。内核中的 cgroup 子系统有两种模式:cgroupv1cgroupv2。Kubernetes 对 cgroupv2 的支持在 Kubernetes 1.18 版中为 Alpha 版,在 1.22 版中为 Beta 版,并在 1.25 版中成为正式版。如需了解详情,请参阅 Kubernetes cgroups v2 文档

如需了解如何为 Standard 集群配置 cgroup 模式,请参阅 Linux cgroup 模式配置选项

GKE 如何过渡到 cgroupv2

查看以下时间表,了解 GKE 如何将现有集群过渡到使用 cgroupv2

  • 对于低于 1.26 的版本,cgroupv1 是节点的默认值。对于版本 1.26 或更高版本,cgroupv2 是新节点的默认值。现有节点没有变化。如需详细了解您的 GKE 集群默认运行的 cgroup 模式,请参阅检查集群节点的 cgroup 模式
  • 在次要版本 1.31 中,GKE 弃用了 cgroupv1
  • 从 1.32 版开始,GKE 会将集群从 cgroupv1 迁移到 cgroupv2。您可以通过明确指定节点池使用 cgroupv1 来暂时阻止此自动迁移。
  • 在次要版本 1.34 中,GKE 移除了对 cgroupv1 的支持。

如需了解自动升级到更高次要版本(例如 1.31 和 1.32)的大致时间,请参阅发布渠道的预计时间表

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

检查集群节点的 cgroup 模式

默认的 cgroups 模式取决于集群或节点池的类型和版本。在 1.26 版或更高版本中,默认值为 cgroupv2。在 1.25 版或更早版本中,默认值为 cgroupv1

  • 对于 Autopilot 集群和使用节点自动预配功能创建的新 Standard 集群节点池,cgroup 模式基于初始集群版本。
  • 对于在不使用节点自动预配的情况下手动创建的 Standard 集群节点池,cgroup 模式基于初始节点池版本。

如需检查 cGroup 模式,请根据您的集群模式按照说明操作。

Autopilot

运行以下命令,将 CLUSTER_NAME 替换为您的集群的名称:

gcloud container clusters describe CLUSTER_NAME \
    --format='value(initialClusterVersion)'

最初使用 GKE 1.25 版或更低版本创建的 GKE Autopilot 集群运行 cgroupv1。最初使用 1.26 版或更高版本创建的集群运行 cgroupv2

Standard

在 GKE Standard 集群中,cgroup 模式是在节点池级层设置的。如需检查各个节点池的模式,请按照说明验证 cgroup 配置。如果您的集群的节点已在使用 cgroupv2,则无需执行任何其他操作。

将节点迁移到 cgroupv2

我们建议您在 GKE 在 1.32 版或更高版本中自动迁移现有节点之前先迁移这些节点。您可以手动迁移 Standard 节点池。您无法迁移 Autopilot 集群。

请执行以下步骤,以迁移运行 cgroupv1 的节点:

  1. 检查节点的 cgroup 模式。如果您的集群的节点已在使用 cgroupv2,则无需执行任何其他操作。
  2. 查看有关迁移到 cgroup v2的迁移注意事项,以确保您的工作负载已准备好使用新版 API。
  3. 通过将以下内容添加到每个节点池的节点系统配置中,迁移 Standard 集群的节点:

      linuxConfig:
      cgroupMode: 'CGROUP_MODE_V2'
    

暂时退出自动迁移到 cgroupv2

您可以暂时停用 Standard 节点池。您无法暂时停用 Autopilot 集群。

为了在次要版本 1.32 和更高版本中暂时避免将 Standard 集群节点池从 cgroupv1 迁移到 cgroupv2,您必须明确设置 cgroupv1

对于现有的 Standard 节点池,请将以下内容添加到每个节点池的节点系统配置中:

linuxConfig:
  cgroupMode: 'CGROUP_MODE_V1'

如需了解详情,请参阅自定义节点系统配置