在 GKE 节点中自定义 containerd 配置


本文档介绍如何在 Google Kubernetes Engine (GKE) 节点上自定义 containerd 容器运行时的配置。在阅读本文档之前,请确保您熟悉什么是容器运行时以及为什么要对其进行自定义。

GKE 中的 containerd 配置简介

您可以在运行 Container-Optimized OS 等操作系统的 GKE 节点上手动配置 containerd 运行时中的一组选项。通过自定义运行时,您可以配置特殊要求,例如访问私有映像注册表。如需设置这些选项,请创建一个名为运行时配置文件的 YAML 文件,并在创建或更新集群时将该文件传递给 GKE。

这种自定义 containerd 的方法可让您避免部署特权 DaemonSet,这会带来安全风险。当您向 GKE 提供运行时配置文件时,GKE 会重新创建节点,并使用您的配置在每个节点上更新 containerd config.toml 文件。此配置在节点终止、升级和重新创建的过程中保持不变。

运行时配置文件仅允许您在 containerd 中配置选项。GKE 还支持使用称为节点系统配置文件的单独文件来配置特定的 kubelet 选项和低层级 Linux 内核选项。如需了解详情,请参阅自定义节点系统配置

限制

您无法使用运行时配置文件更改 Ubuntu 节点映像中的 containerd 设置。仅支持带有 containerd 的 Container-Optimized OS。这是所有 GKE 集群的默认节点映像。

可用的 containerd 配置选项

下表介绍了您可以使用运行时配置文件配置的选项:

运行时配置文件选项

使用您存储在 Secret Manager 中的私有凭据访问私有映像注册表。

如需了解相关说明,请参阅使用私有 CA 证书访问私有注册表

privateRegistryAccessConfig:
  enabled: true
  certificateAuthorityDomainConfig:
  - gcpSecretManagerCertificateConfig:
      secretURI: "SECRET_LOCATION"
    fqdns:
    - "FQDN1"
    - "FQDN2"

此配置包含以下字段:

  • enabled: true:启用私有注册表配置。如果您设置了 enabled: false,请删除 privateRegistryAccessConfig 项中的任何其他字段。
  • certificateAuthorityDomainConfig:最多包含五个证书和 FQDN 定义。
  • gcpSecretManagerCertificateConfig:包含存储在 Secret Manager 中的证书和一组 FQDN。
  • secretURI:证书在 Secret Manager 中的位置。
  • fqdns:私有注册表的完全限定域名列表。您也可以使用 IPv4 地址,但我们建议使用 FQDN。

将 containerd 配置应用于新集群

本部分介绍如何在创建新的 GKE 集群时应用 containerd 配置文件。

运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --scopes="cloud-platform" \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

替换以下内容:

  • CLUSTER_NAME:新集群的名称。
  • LOCATION:新集群的 Compute Engine 位置。
  • PATH_TO_CONFIG_FILE:您创建的配置文件的路径,例如 ~/containerd-configuration.yaml

您可以运行带有相同选项的 gcloud container clusters create 命令,在新的 Standard 集群上启用私有注册表配置。

将 containerd 配置应用于现有集群

本部分介绍如何将 containerd 配置应用于现有集群和节点。

检查访问权限范围

现有集群必须具有 cloud-platform 访问权限范围才能使用此功能。本部分介绍如何检查访问权限范围,并使用新的或修改后的私有注册表配置文件更新现有集群。

如需详细了解新集群中的默认访问权限范围,请参阅 GKE 中的访问权限范围

检查 Autopilot 访问权限范围

运行以下命令:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=nodeConfig \
    --format='csv[delimiter="\\n",no-heading](oauthScopes)'

如果您的集群没有 https://www.googleapis.com/auth/cloud-platform 访问权限范围,请创建一个具有此访问权限范围的新集群。

检查 Standard 访问权限范围

如需检查 Standard 集群访问权限范围,请检查节点池:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --flatten=nodeConfig \
    --format='csv[delimiter="\\n",no-heading](oauthScopes)'

NODE_POOL_NAME 替换为节点池的名称。

如果您的集群没有 https://www.googleapis.com/auth/cloud-platform 访问权限范围,请创建一个具有 cloud-platform 访问权限范围的新节点池,并删除现有节点池。

更新集群以使用配置文件

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

在 Standard 集群中重新创建节点

如果您的 Standard 集群不使用自动升级,则您必须手动重新创建节点池以应用新配置。如需触发手动重新创建节点的操作,请将集群升级到其已在使用的 GKE 版本。

gcloud container clusters upgrade CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION

VERSION 替换为集群已在使用的同一 GKE 补丁版本。

停用 containerd 配置选项

如需移除自定义配置,请执行以下操作:

  1. 更新配置文件,在要停用的配置项中指定 enabled: false,并删除该项中的任何其他字段,如以下示例所示:

    privateRegistryAccessConfig:
      enabled: false
  2. 将更新后的配置文件应用到集群。如需了解相关说明,请参阅将 containerd 配置应用于现有集群