連結符合 CNCF 標準的叢集

您可以使用 GKE 連結叢集,在 Google Cloud 控制台中集中管理現有的 CNCF 規範 Kubernetes 叢集,包括在 AWS、Azure 或其他位置代管的叢集。這種集中式管理方式可整合作業,協助您在多個環境中更有效率地部署及執行叢集。本文將說明平台管理員如何將符合資格的 Kubernetes 叢集連結至 Google Cloud。

如要附加 Amazon EKS 或 Azure AKS 叢集,請參閱「附加 EKS 叢集」或「附加 AKS 叢集」。如需使用前一代 GKE 附加叢集的操作說明,請參閱「附加第三方叢集」。

支援的 Kubernetes 叢集

您可以將任何含有 x86 節點的符合標準的 Kubernetes 叢集新增至機群,然後在 Google Cloud 控制台 Google Cloud 中查看,GKE 叢集也會顯示於此。

雖然 Google 不會驗證所有 Kubernetes 發行版本是否完全相容,但會在此記錄任何發現的不相容情形。如需更多詳細資料和疑難排解協助,請參閱「GKE 叢集版本和升級支援」。

必要條件

請確保叢集符合叢集需求條件

附加叢集時,您必須指定下列項目:

  • 支援的 Google Cloud 行政區
  • 平台版本

管理區域是 Google Cloud 區域 ,用於管理附加叢集。您可以選擇任何支援的區域,但最佳做法是選擇地理位置最靠近叢集的區域。管理區域不會儲存任何使用者資料。

平台版本是指要安裝在叢集上的 GKE 附加叢集版本。您可以執行下列指令,列出所有支援的版本:

gcloud container attached get-server-config  \
  --location=GOOGLE_CLOUD_REGION

GOOGLE_CLOUD_REGION 替換為要從中管理叢集的Google Cloud 位置名稱。

平台版本編號

這些文件將 GKE 附加叢集版本稱為平台版本,以區別於 Kubernetes 版本。GKE 附加叢集採用的版本編號慣例與 GKE 相同,例如 1.21.5-gke.1。附加或更新叢集時,您必須選擇平台版本,其子版本與叢集的 Kubernetes 版本相同,或低一個層級。舉例來說,您可以附加執行 Kubernetes v1.22.* 的叢集,並使用 GKE 附加叢集平台版本 1.21.* 或 1.22.*。

這樣一來,您就能在升級 GKE 連結的叢集前,先將叢集升級至下一個子版本。

連結叢集

如要將符合 CNCF 標準的叢集附加至 Google Cloud Fleet 管理,請執行下列指令:

  1. 確認 kubeconfig 檔案中包含要附加的叢集項目。具體操作說明會因發行版本而異。

  2. 執行下列指令,擷取叢集的 kubeconfig 環境,並儲存在 KUBECONFIG_CONTEXT 環境變數中:

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  3. 視叢集是否具有公開或私人的 OIDC 簽發者,註冊叢集的指令會略有不同。請選擇適用於叢集的分頁:

    私有 OIDC 核發者

    使用 gcloud container attached clusters register 指令註冊叢集:

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=generic \
      --context=KUBECONFIG_CONTEXT \
      --has-private-issuer \
      --kubeconfig=KUBECONFIG_PATH
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。CLUSTER_NAME 必須符合 RFC 1123 標籤名稱標準
    • GOOGLE_CLOUD_REGION:用來管理叢集的 Google Cloud 區域
    • PROJECT_NUMBER:要註冊叢集的機群主機專案
    • PLATFORM_VERSION:叢集使用的平台版本
    • KUBECONFIG_CONTEXT:kubeconfig 中的內容,用於存取叢集
    • KUBECONFIG_PATH:kubeconfig 的路徑

    公開 OIDC 核發者

    1. 擷取叢集的 OIDC 簽發者網址,並儲存以供日後使用。具體操作說明因發行版本而異。

    2. 執行下列指令,擷取叢集的 kubeconfig 環境,並儲存在 KUBECONFIG_CONTEXT 環境變數中:

      KUBECONFIG_CONTEXT=$(kubectl config current-context)
      
    3. 使用 gcloud container attached clusters register 指令註冊叢集:

      gcloud container attached clusters register CLUSTER_NAME \
        --location=GOOGLE_CLOUD_REGION \
        --fleet-project=PROJECT_NUMBER \
        --platform-version=PLATFORM_VERSION \
        --distribution=generic \
        --issuer-url=ISSUER_URL \
        --context=KUBECONFIG_CONTEXT \
        --kubeconfig=KUBECONFIG_PATH
      

      更改下列內容:

      • CLUSTER_NAME:叢集名稱。CLUSTER_NAME 必須符合 RFC 1123 標籤名稱標準
      • GOOGLE_CLOUD_REGION:管理叢集的 Google Cloud 區域
      • PROJECT_NUMBER:叢集要註冊的機群主機專案
      • PLATFORM_VERSION:叢集要使用的 GKE 附加叢集版本
      • ISSUER_URL:先前擷取的核發者網址
      • KUBECONFIG_CONTEXT:kubeconfig 中的內容,用於存取叢集,如先前所擷取
      • KUBECONFIG_PATH:kubeconfig 的路徑

授權 Cloud Logging / Cloud Monitoring

如要讓 GKE 附加叢集建立系統記錄檔和指標,並上傳至Google Cloud,必須先獲得授權。

如要授權 Kubernetes 工作負載身分 gke-system/gke-telemetry-agent 將記錄檔寫入 Google Cloud Logging,以及將指標寫入 Google Cloud Monitoring,請執行下列指令:

gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
  --member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
  --role=roles/gkemulticloud.telemetryWriter

GOOGLE_PROJECT_ID 替換為叢集的 Google Cloud 專案 ID。

這項 IAM 繫結會授予 Google Cloud 專案中所有叢集上傳記錄和指標的權限。您只需要在為專案建立第一個叢集後執行這項繫結。

除非至少有一個叢集已在 Google Cloud 專案中建立,否則新增這項 IAM 繫結會失敗。這是因為在建立叢集之前,系統不會佈建其參照的 workload identity pool (GOOGLE_PROJECT_ID.svc.id.goog)。