从 1.33 版开始,Google Kubernetes Engine (GKE) 会将集群从 cgroupv1
迁移到 cgroupv2
。本页说明了如何执行以下操作:
- 检查集群的节点正在运行哪种 cgroups 模式,以及在 cgroups 模式之间切换是否会影响工作负载。
- 将 GKE Autopilot 集群节点或 Standard 集群节点池迁移到
cgroupv2
。 - 暂时停用 GKE 会自动将节点从
cgroupv1
迁移到cgroupv2
。如果您的集群运行的工作负载可能会受到在 cgroups 模式之间转换的影响,请按照以下说明操作。
如果您知道自己的工作负载在 cgroupv2
上按预期运行,或者不受 cgroup 模式配置的影响,则可以跳过阅读本页面。GKE 会在 1.33 版及更高版本自动将集群从 cgroupv1
迁移到 cgroupv2
。
Linux 对照组简介
kubelet 和容器运行时使用 Linux 内核对照组 (cgroups) 进行资源管理,例如限制 Pod 中每个容器可以访问的 CPU 或内存量。内核中的 cgroup 子系统有两种模式:cgroupv1
和 cgroupv2
。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.33 版开始,GKE 会将集群从
cgroupv1
迁移到cgroupv2
。您可以通过明确指定节点池使用cgroupv1
来暂时阻止此自动迁移。 - 在次要版本 1.35 中,GKE 移除了对
cgroupv1
的支持。
如需了解自动升级到更高次要版本(例如 1.31 和 1.33)的大致时间,请参阅发布渠道的预计时间表。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 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 模式基于初始集群版本。您无法在创建 Autopilot 集群期间设置 cgroup 模式。对于自动预配的新节点,您无法根据次要版本将模式设置为与默认 cgroup 模式不同的模式。
- 对于在不使用节点自动预配的情况下手动创建的 Standard 集群节点池,cgroup 模式基于初始节点池版本或自定义的节点系统配置。
如需检查 cGroup 模式,请根据您的集群模式按照说明操作。
Autopilot
运行以下命令:
gcloud container clusters describe CLUSTER_NAME \
--format='value(nodePools[0].config.effectiveCgroupMode)'
将 CLUSTER_NAME
替换为您的集群名称。
如果输出为 EFFECTIVE_CGROUP_MODE_V2
,则表示集群在 cgroupv2
上运行。如果输出为 EFFECTIVE_CGROUP_MODE_V1
,则表示集群在 cgroupv1
上运行。
最初使用 GKE 1.25 版或更低版本创建的 GKE Autopilot 集群会运行 cgroupv1
,直到您进行迁移。
标准
在 GKE Standard 集群中,cgroup 模式是在节点池级层设置的。如需检查各个节点池的模式,请按照说明验证 cgroup 配置。如果您的集群的节点已在使用 cgroupv2
,则无需执行任何其他操作。
将节点迁移到 cgroupv2
我们建议您在 GKE 在 1.33 版或更高版本中自动迁移现有节点之前先迁移这些节点。
请执行以下步骤,以迁移运行 cgroupv1
的节点:
- 检查节点的 cgroup 模式。如果您的集群的节点已在使用
cgroupv2
,则无需执行任何其他操作。 - 查看有关迁移到 cgroup v2的迁移注意事项,以确保您的工作负载已准备好使用新版 API。
迁移集群的节点。
Autopilot
明确设置集群的节点以使用
cgroupv2
:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v2
将
CLUSTER_NAME
替换为您的集群名称。标准
如果您为集群使用节点自动预配功能,请运行以下命令,确保使用节点自动预配功能创建的现有和未来节点池使用
cgroupv2
:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v2
将
CLUSTER_NAME
替换为您的集群名称。对于在不使用节点自动预配的情况下创建的现有节点池,请更新节点池,以将以下内容添加到节点系统配置中:
linuxConfig: cgroupMode: 'CGROUP_MODE_V2'
如需了解详情,请参阅自定义节点系统配置。
如果您在没有节点自动预配功能的情况下手动创建新的节点池,则 GKE 默认使用
cgroupv2
。
暂时退出自动迁移到 cgroupv2
为了在次要版本 1.33 及更高版本中暂时避免将运行 cgroupv1
的节点自动迁移到 cgroupv2
,您必须明确设置 cgroupv1
。如果将节点迁移到 cgroupv2
导致集群的工作负载出现问题,您还可以按照以下说明暂时还原为 cgroupv1
。
Autopilot
对于最初使用 1.25 版或更低版本创建的集群,请运行以下命令。如果您的集群是在运行版本 1.26 或更高版本时创建的,则无法将 cgroups 模式设置为 cgroupv1
。
明确设置集群的节点以使用 cgroupv1
:
gcloud container clusters update CLUSTER_NAME \
--autoprovisioning-cgroup-mode=v1
将 CLUSTER_NAME
替换为您的集群名称。
标准
如需继续使用运行 1.33 或更高版本的 GKE Standard 集群节点池运行 cgroupv1
,请执行以下步骤:
如果您使用节点自动预配功能,并且您的集群是使用 1.25 或更低版本创建的,请使用以下命令确保使用节点自动预配功能创建的现有和未来节点池使用
cgroupv1
。如果您的集群在创建时运行的是 1.26 或更高版本,则无法将 cgroups 模式设置为cgroupv1
:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v1
将
CLUSTER_NAME
替换为您的集群名称。对于现有的 Standard 节点池,请更新节点池,将以下内容添加到节点系统配置中:
linuxConfig: cgroupMode: 'CGROUP_MODE_V1'
对于在不使用节点自动预配的情况下手动创建的新节点池,您还必须为其设置此节点配置。
如需了解详情,请参阅自定义节点系统配置。