关联符合 CNCF 要求的集群

借助 GKE 关联集群,您可以在 Google Cloud 控制台中集中管理现有的符合 CNCF 要求的 Kubernetes 集群,包括托管在 AWS、Azure 或其他位置的 集群。这种集中式管理可以整合运营,并帮助您在多个环境中更高效地部署和运行集群。本文档向平台管理员介绍了如何将 符合条件的 Kubernetes 集群关联到 Google Cloud。

如果您要关联 Amazon EKS 或 Azure AKS 集群,请参阅 关联您的 EKS 集群关联您的 AKS 集群。 如需了解如何使用上一代 GKE 关联集群,请参阅 关联第三方集群

支持的 Kubernetes 集群

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

虽然 Google 不会验证每种 Kubernetes 发行版是否完全兼容所有功能,但我们会在本文档中记录发现的任何不兼容情况。如需获取更多详细信息和问题排查帮助,请参阅 GKE 集群版本和升级支持

前提条件

确保集群符合集群要求

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

管理区域是要从其中管理所关联集群的 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:您的集群的名称。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 绑定将失败。这是因为,其引用的工作负载身份池 (GOOGLE_PROJECT_ID.svc.id.goog) 不会在创建集群之前进行预配。