在 GKE 節點中自訂 containerd 設定


本頁面說明如何自訂 Google Kubernetes Engine (GKE) 節點上 containerd 容器執行階段的設定。閱讀本文前,請務必先瞭解容器執行階段的用途,以及自訂容器執行階段的原因。

關於 GKE 中的 containerd 設定

您可以在 GKE 節點上,手動設定 containerd 執行階段的一組選項,這些節點執行的作業系統類似於 Container-Optimized OS。自訂執行階段可讓您設定特殊需求,例如存取私人映像檔登錄檔。如要設定這些選項,請建立名為執行階段設定檔的 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

如要在新的 Standard 叢集上啟用私人登錄設定,請使用相同選項執行 gcloud container clusters create 指令。

將 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 叢集存取範圍,請檢查節點集區:

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"

在標準叢集中重新建立節點

如果您的標準叢集未使用自動升級功能,則必須手動重新建立節點集區,才能套用新設定。如要手動重建節點,請將叢集升級至目前使用的 GKE 版本。

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

VERSION 替換為叢集已使用的 GKE 修補程式版本。

停用 containerd 設定選項

如要移除自訂設定,請按照下列步驟操作:

  1. 更新設定檔,在要停用的設定項目中指定 enabled: false,並刪除項目中的所有其他欄位,如下列範例所示:

    privateRegistryAccessConfig:
      enabled: false
  2. 將更新後的設定檔套用至叢集。如需操作說明,請參閱「將 containerd 設定套用至現有叢集」。