连接符合 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 区域。您可以选择任何受支持的区域,但最好是选择地理上离您的集群最近的区域。管理区域中不会存储任何用户数据。

平台版本是要安装在集群上的 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)。