关联集群是指向 Google Cloud 舰队管理注册集群,并在该集群上安装 GKE 关联集群软件,从而将该集群连接到 Google Cloud。
您可以使用 gcloud CLI 或 Terraform 关联集群。如需了解如何使用 Terraform 创建和关联 AKS 集群,请查看 GKE 关联集群的示例 GitHub 代码库。
如需使用 gcloud 关联 AKS 集群,请执行以下步骤。
前提条件
确保集群符合集群要求。
关联集群时,您必须指定以下内容:
- 一个受支持的 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 关联集群之前先将集群升级到下一个次要版本。
关联 AKS 集群
如需将 AKS 集群关联到 Google Cloud 舰队管理,请运行以下命令:
确保您的 kubeconfig 文件包含要附加的集群的条目:
az aks get-credentials -n CLUSTER_NAME \ -g RESOURCE_GROUP
运行以下命令以提取集群的 kubeconfig 上下文并将其存储在
KUBECONFIG_CONTEXT
环境变量中:KUBECONFIG_CONTEXT=$(kubectl config current-context)
注册集群的命令可能会略有不同,具体取决于您是使用默认的专用 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=aks \ --context=KUBECONFIG_CONTEXT \ --has-private-issuer \ --kubeconfig=KUBECONFIG_PATH
请替换以下内容:
- CLUSTER_NAME:您的集群的名称
- GOOGLE_CLOUD_REGION:要从其管理集群的 Google Cloud 区域
- PROJECT_NUMBER:要向其注册集群的舰队宿主项目
- PLATFORM_VERSION:要用于集群的平台版本
- KUBECONFIG_CONTEXT:kubeconfig 中用于访问 AKS 集群的上下文
- KUBECONFIG_PATH:kubeconfig 的路径
公共 OIDC 颁发者
使用以下命令检索集群的 OIDC 颁发者网址:
az aks show -n CLUSTER_NAME \ -g RESOURCE_GROUP \ --query "oidcIssuerProfile.issuerUrl" -otsv
将 RESOURCE_GROUP 替换为您的集群所属的 AKS 资源组。
此命令将输出您的 OIDC 颁发者的网址。保存此值以便稍后使用。
运行以下命令以提取集群的 kubeconfig 上下文并将其存储在
KUBECONFIG_CONTEXT
环境变量中:KUBECONFIG_CONTEXT=$(kubectl config current-context)
使用
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=aks \ --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
) 不会在创建集群之前进行预配。