关联符合 CNCF 要求的集群

借助 GKE 附加集群,您可以将现有的 Kubernetes 集群(无论是在 AWS、Azure 还是其他地方托管)纳入 Google Kubernetes Engine (GKE) Enterprise 版信息中心,以便进行集中管理。这包括关联任何符合 CNCF 要求的 Kubernetes 集群的功能。

支持的 Kubernetes 集群

您可以将任何符合要求的具有 x86 节点的 Kubernetes 集群添加到您的集群中,然后在 Google Cloud 控制台中与您的 GKE 集群一起查看它。

虽然 Google 不会验证每个 Kubernetes 发行版是否完全兼容,但所有发现的不兼容情况都记录在本文档中。如需获取更多详细信息和问题排查帮助,请参阅 Google Kubernetes Engine (GKE) Enterprise 版本和升级支持

前提条件

确保集群符合集群要求

关联集群时,您必须指定以下内容:

  • 一个受支持的 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 舰队管理,请运行以下命令:

  1. 确保您的 kubeconfig 文件包含要关联的集群的条目。具体说明因分布情况而异。

  2. 运行以下命令以提取集群的 kubeconfig 上下文并将其存储在 KUBECONFIG_CONTEXT 环境变量中:

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  3. 用于注册集群的命令会略有不同,具体取决于您的集群具有公共 OIDC 颁发者还是专用 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:您的集群的名称
    • 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:您的集群的名称
      • 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 绑定将失败。这是因为,其引用的工作负载身份池 (GOOGLE_PROJECT_ID.svc.id.goog) 不会在创建集群之前进行预配。