本頁面說明如何自訂 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 核心選項。詳情請參閱「自訂節點系統設定」。
限制
您無法使用執行階段設定檔,變更 Windows 節點映像檔中的 containerd 設定。
可用的 containerd 設定選項
以下各節說明可使用執行階段設定檔設定的選項。
privateRegistryAccessConfig
使用儲存在 Secret Manager 中的私人憑證,存取私人映像檔登錄檔。
如為 Container-Optimized OS 節點映像檔,這個選項適用於 GKE 1.27.3-gke.1700 以上版本;如為 Ubuntu 節點映像檔,則適用於 1.33 以上版本。
如需操作說明,請參閱「使用私人 CA 憑證存取私人登錄檔」。
privateRegistryAccessConfig: enabled: true certificateAuthorityDomainConfig: - gcpSecretManagerCertificateConfig: secretURI: "SECRET_LOCATION" fqdns: - "FQDN1" - "FQDN2"
這項設定包含下列欄位:
enabled:啟用私有登錄設定的布林值。如果設定enabled: false,請刪除privateRegistryAccessConfig項目中的任何其他欄位。certificateAuthorityDomainConfig:最多可包含五個憑證和 FQDN 定義。gcpSecretManagerCertificateConfig:包含儲存在 Secret Manager 中的憑證,以及 FQDN 陣列。secretURI:Secret Manager 中憑證的位置。privateRegistryAccessConfig僅支援secretURI中的全域密鑰。fqdns:私有登錄檔的完整網域名稱清單。您也可以使用 IPv4 位址,但我們建議使用 FQDN。
registryHosts
設定 containerd 登錄檔的進階設定,例如功能、自訂標頭和憑證。這對應於 containerd 的 hosts.toml。
這個選項適用於 GKE 1.34.1-gke.2980000 以上版本。
registryHosts: - server: "REGISTRY_SERVER_FQDN" hosts: - host: "MIRROR_FQDN" capabilities: - "HOST_CAPABILITY_PULL" - "HOST_CAPABILITY_RESOLVE" - "HOST_CAPABILITY_PUSH" overridePath: false dialTimeout: "30s" header: - key: "HEADER_KEY" value: - "HEADER_VALUE_1" - "HEADER_VALUE_2" ca: - gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CA_SECRET/versions/VERSION" client: - cert: gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_CERT_SECRET/versions/VERSION" key: gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_KEY_SECRET/versions/VERSION"
這項設定包含下列欄位:
server:登錄伺服器的主機名稱 (例如example.com)。這項資訊用於命名節點上的設定檔。這應該是完整網域名稱或 IPv4 位址。hosts:server的主機專屬設定清單。host:登錄檔鏡像的主機名稱 (例如mirror.example.com)。這應該是完整網域名稱或 IPv4 位址。capabilities:功能清單,指定主機可執行的作業。支援的值如下:HOST_CAPABILITY_PULL:代表依摘要擷取資訊清單和 Blob 的功能。HOST_CAPABILITY_RESOLVE:代表依名稱擷取資訊清單的功能。HOST_CAPABILITY_PUSH:代表推送 Blob 和資訊清單的功能。
overridePath:布林值。如果為true,表示主機的 API 根端點是在網址路徑中定義,而非透過 API 規格定義。這項功能可用於缺少/v2前置字串的不相容 OCI 登錄檔。預設為false。dialTimeout:持續時間字串 (例如"30s"),指定連線嘗試完成所允許的最長持續時間。允許的最大值為"180s"。如未設定,containerd 會將預設值設為"30s"。值應為秒數的十進位數字,並加上s後置字串。header:要傳送至登錄主機的自訂 HTTP 標頭清單。key:標頭鍵。value:標頭值清單。
ca:登錄主機憑證授權單位 (CA) 的憑證設定清單。如要為憑證建立密鑰及設定必要權限,請參閱「在 Secret Manager 中儲存 CA 公開金鑰」一文中的操作說明。gcpSecretManagerSecretUri:Secret Manager 中包含 CA 憑證的密鑰 URI。這項功能支援全域密鑰和區域密鑰。各機密類型的格式如下:- 全域密鑰格式:
projects/PROJECT_ID_OR_NUMBER/secrets/SECRET_NAME/versions/VERSION。 - 區域性密鑰格式:
projects/PROJECT_ID_OR_NUMBER/locations/REGION/secrets/SECRET_NAME/versions/VERSION。
- 全域密鑰格式:
client:用於向登錄主機驗證的用戶端憑證和金鑰組清單。如要為憑證建立密鑰及設定必要權限,請參閱「在 Secret Manager 中儲存 CA 公開金鑰」一文中的操作說明。cert:用戶端憑證設定。gcpSecretManagerSecretUri:Secret Manager 中含有用戶端憑證的密鑰 URI。支援全域密鑰和區域密鑰。key:用戶端私密金鑰設定。gcpSecretManagerSecretUri:Secret Manager 中含有用戶端金鑰的密鑰 URI。支援全域密鑰和區域密鑰。
writableCgroups
以讀寫模式掛接 /sys/fs/cgroup 檔案系統,讓工作負載管理子項程序的資源。
這個選項適用於 GKE 1.34.1-gke.2541000 以上版本。
詳情請參閱「為容器設定可寫入的 cgroup」。
writableCgroups: enabled: true
將 containerd 設定套用至新叢集
本節說明如何建立新的 GKE 叢集時套用 containerd 設定檔。
執行下列指令來建立 Autopilot 叢集:
gcloud container clusters create-autoCLUSTER_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。
如要在新的標準叢集上啟用 containerd 設定,請使用相同選項執行 gcloud container clusters create 指令。
將 Containerd 設定套用至新的節點集區
您可以使用下列指令,將 containerd 設定套用至新的 GKE 節點集區:
gcloud container node-pools createNODE_POOL_NAME\ --cluster=CLUSTER_NAME\ --location=LOCATION\ --scopes="cloud-platform" \ --containerd-config-from-file="PATH_TO_CONFIG_FILE"
更改下列內容:
NODE_POOL_NAME:新節點集區的名稱。CLUSTER_NAME:現有叢集的名稱。LOCATION:新節點集區的 Compute Engine 位置。PATH_TO_CONFIG_FILE:您建立的設定檔路徑,例如~/containerd-configuration.yaml。
將 containerd 設定套用至現有叢集
本節說明如何將 containerd 設定套用至現有叢集和節點。
檢查存取權範圍
現有叢集必須具備 cloud-platform 存取範圍,才能使用這項功能。本節說明如何檢查存取範圍,以及如何使用新的或修改過的私人登錄設定檔更新現有叢集。
如要瞭解新叢集的預設存取權範圍,請參閱「GKE 中的存取權範圍」。
檢查 Autopilot 存取權範圍
執行下列指令:
gcloud container clusters describeCLUSTER_NAME\ --location=LOCATION\ --flatten=nodeConfig \ --format='csv[delimiter="\\n",no-heading](oauthScopes)'
如果叢集沒有 https://www.googleapis.com/auth/cloud-platform 存取權範圍,請建立具有這個存取權範圍的新叢集。
檢查標準存取權範圍
如要檢查 Standard 叢集的存取範圍,請檢查節點集區:
gcloud container node-pools describeNODE_POOL_NAME\ --cluster=CLUSTER_NAME\ --location=LOCATION\ --format='value[delimiter="\\n"](config.oauthScopes)'
將 NODE_POOL_NAME 替換為節點集區名稱。
如果叢集沒有 https://www.googleapis.com/auth/cloud-platform 存取權範圍,請建立具有 cloud-platform 存取權範圍的新節點集區,並刪除現有節點集區。
更新叢集以使用設定檔
執行下列指令:
gcloud container clusters updateCLUSTER_NAME\ --location=LOCATION\ --containerd-config-from-file="PATH_TO_CONFIG_FILE"
在 Standard 叢集中重新建立節點
如果您的標準叢集未使用自動升級功能,則必須手動重新建立節點集區,才能套用新設定。如要手動重建節點,請將叢集升級至目前使用的 GKE 版本。
gcloud container clusters upgradeCLUSTER_NAME\ --location=LOCATION\ --cluster-version=VERSION
將 VERSION 替換為叢集已使用的 GKE 修補程式版本。
停用 containerd 設定選項
停用 privateRegistryAccessConfig
-
更新設定檔,在
privateRegistryAccessConfig中指定enabled: false,並刪除項目中的任何其他欄位,如下列範例所示:privateRegistryAccessConfig: enabled: false
- 將更新後的設定檔套用至叢集。如需操作說明,請參閱「將 containerd 設定套用至現有叢集」。
停用 registryHosts
-
更新設定檔,在
registryHosts項目中指定空白陣列,如下列範例所示:registryHosts: []
- 將更新後的設定檔套用至叢集。如需操作說明,請參閱「將 containerd 設定套用至現有叢集」。