在 GKE 節點中自訂 containerd 設定


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

關於 GKE 中的 containerd 設定

您可以在 GKE 節點上,手動設定 containerd 執行階段的一組選項,這些節點執行的作業系統類似於 Container-Optimized OS。自訂執行階段可讓您設定特殊需求,例如存取私人映像檔登錄檔。如要設定這些選項,請建立名為執行階段設定檔的 YAML 檔案,並在建立或更新叢集時將該檔案傳遞至 GKE。

這種自訂 containerd 的方法可避免部署具備權限的 DaemonSet,這類 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 設定套用至現有叢集」。