本主题提供在 Google Kubernetes Engine (GKE) 集群上安装 Config Connector 的两个额外安装选项:
- 手动安装:手动安装方法可以提供比使用插件更快的更新速度。此方法还提供更多配置选项。例如,您可以提高 Config Connector Operator 的 CPU 限制。
- 命名空间模式:此方法是 Config Connector 安装的扩展。命名空间模式支持管理多个项目,每个项目都有自己的 Google Cloud 身份。
如需详细了解这些安装类型,请参阅选择安装类型。
手动安装 Config Connector Operator
以下部分介绍如何手动安装 Config Connector Operator。
准备工作
在手动安装 Config Connector Operator 之前,请完成以下步骤:
- 创建或指定尚未安装 Config Connector 且启用了 Workload Identity 和 Kubernetes Engine Monitoring 的 GKE 集群。
- 配置
kubectl
以关联到您的集群。
安装 Config Connector Operator
Config Connector 使用 Kubernetes Operator 使其安装保持最新。如需安装此 Operator,请完成以下步骤:
下载最新的 Config Connector tar 文件:
gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
解压缩 tar 文件:
tar zxvf release-bundle.tar.gz
在集群上安装 Config Connector Operator:
kubectl apply -f operator-system/configconnector-operator.yaml
创建身份
Config Connector 通过使用 Identity and Access Management (IAM) 服务帐号进行身份验证以及使用 GKE 的 Workload Identity 将 IAM 服务帐号与 Kubernetes 服务帐号绑定来创建和管理 Google Cloud 资源。
如需创建身份,请完成以下步骤:
-
创建 IAM 服务帐号。 如果您希望使用现有服务帐号,则可以使用该帐号并跳过此步骤。
如需创建服务帐号,请使用以下命令:gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
将SERVICE_ACCOUNT_NAME
替换为您的服务帐号的名称。 -
向 IAM 服务帐号授予对项目的提升权限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/editor"
替换以下内容:PROJECT_ID
替换为您的项目 ID。- 将
SERVICE_ACCOUNT_NAME
替换为您的服务帐号的名称。
-
在 IAM 服务帐号与 Config Connector 运行的预定义 Kubernetes 服务帐号之间创建 IAM 政策绑定:
gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager]" \ --role="roles/iam.workloadIdentityUser"
替换以下内容:- 将
SERVICE_ACCOUNT_NAME
替换为您的服务帐号的名称。 PROJECT_ID
替换为您的项目 ID。
- 将
如需详细了解如何创建服务帐号,请参阅创建和管理服务帐号。
配置 Config Connector
要完成安装,请为 ConfigConnector
CustomResource 创建配置文件,然后使用 kubectl apply
命令应用该配置文件。Config Connector Operator 会在您的集群中安装 Google Cloud 资源 CRD 和 Config Connector 组件。
如需配置运算符,请完成以下步骤:
-
将以下 YAML 文件复制到名为
configconnector.yaml
的文件中:# configconnector.yaml apiVersion: core.cnrm.cloud.google.com/v1beta1 kind: ConfigConnector metadata: # the name is restricted to ensure that there is only one # ConfigConnector resource installed in your cluster name: configconnector.core.cnrm.cloud.google.com spec: mode: cluster googleServiceAccount: "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
替换以下内容:- 将
SERVICE_ACCOUNT_NAME
替换为您的服务帐号的名称。 PROJECT_ID
替换为您的项目 ID。
- 将
-
使用
kubectl apply
将配置应用于您的集群:kubectl apply -f configconnector.yaml
指定创建资源的位置
Config Connector 可以按项目、文件夹或组织整理资源,这与使用 Google Cloud 整理资源的方式相同。
在使用 Config Connector 创建资源之前,必须先配置创建资源的位置。为了确定创建资源的位置,Config Connector 会在资源配置或现有命名空间中使用注解。如需了解详情,请参阅整理资源。
如果您没有可用于此目的的命名空间,请使用kubectl
创建一个命名空间。kubectl create namespace NAMESPACE
将 NAMESPACE
替换为您的命名空间名称。 例如 config-connector
。
选择一个标签页以便选择 Config Connector 创建资源的位置。
项目
如需在特定项目中创建资源,请运行以下命令:
kubectl annotate namespace \ NAMESPACE cnrm.cloud.google.com/project-id=PROJECT_ID
请替换以下内容:
- 将
NAMESPACE
替换为您的命名空间名称。 - 将
PROJECT_ID
替换为 Google Cloud 项目 ID。
文件夹
如需在特定文件夹中创建资源,请运行以下命令:
kubectl annotate namespace \ NAMESPACE cnrm.cloud.google.com/folder-id=FOLDER_ID
请替换以下内容:
- 将
NAMESPACE
替换为您的命名空间名称。 - 将
FOLDER_ID
替换为您的 Google Cloud 文件夹 ID。
组织
如需在特定组织中创建资源,请运行以下命令:
kubectl annotate namespace \ NAMESPACE cnrm.cloud.google.com/organization-id=ORGANIZATION_ID
请替换以下内容:
- 将
NAMESPACE
替换为您的命名空间名称。 - 将
ORGANIZATION_ID
替换为您的 Google Cloud 组织 ID。
为命名空间添加注释时,Config Connector 将在相应的项目、文件夹或组织中创建资源。如需详细了解 Config Connector 如何使用 Kubernetes 命名空间,请参阅 Kubernetes 命名空间和 Google Cloud 项目。
验证安装
Config Connector 在命名空间 cnrm-system
中运行其所有组件。您可以通过运行以下命令来验证 Pod 是否准备就绪:
kubectl wait -n cnrm-system \
--for=condition=Ready pod --all
如果正确安装了 Config Connector,则输出类似于以下内容:
pod/cnrm-controller-manager-0 condition met
升级 Config Connector
下载并安装最新版本的 Config Connector Operator:
gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
tar zxvf release-bundle.tar.gz
kubectl apply -f operator-system/configconnector-operator.yaml
卸载 Config Connector
使用 kubectl delete
移除 Config Connector CRD 和控制器组件:
kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
--wait=true
如需卸载 Config Connector Operator,请运行以下命令:
kubectl delete -f operator-system/configconnector-operator.yaml --wait=true
使用命名空间模式安装 Config Connector
以下部分介绍如何启用命名空间模式。
准备工作
在将 Config Connector 配置为在命名空间模式下运行之前,请确保已启用 Config Connector GKE 插件或手动安装的 Config Connector Operator。
将 Config Connector 配置为在命名空间模式下运行
如需启用命名空间模式,请完成以下步骤:
将以下 YAML 清单复制到名为
configconnector.yaml
的文件中:apiVersion: core.cnrm.cloud.google.com/v1beta1 kind: ConfigConnector metadata: # the name is restricted to ensure that there is only ConfigConnector resource installed in your cluster name: configconnector.core.cnrm.cloud.google.com spec: mode: namespaced
使用
kubectl apply
将配置应用到集群:kubectl apply -f configconnector.yaml
配置 Config Connector 以管理命名空间中的资源
在以下部分中,您安装配置连接器的 Google Cloud 项目称为“宿主项目”或 HOST_PROJECT_ID。您管理资源的其他项目称为“代管项目”或 MANAGED_PROJECT_ID。如果您仅打算使用 Config Connector 在与您的集群相同的项目中创建 Google Cloud 资源,则这些项目可能是同一项目。
创建命名空间
如果您已有用于组织 Google Cloud 资源的命名空间,则可以跳过此步骤。
通过运行以下命令,使用 kubectl
创建新的命名空间:
kubectl create namespace NAMESPACE
将 NAMESPACE 替换为命名空间的名称。
创建身份
创建 Identity and Access Management (IAM) 服务帐号并在 IAM 服务帐号和 Config Connector 的 Kubernetes 服务帐号之间创建绑定:
创建 IAM 服务帐号。 如果您原本有一个服务帐号,则可以使用原有的帐号,而不必新建服务帐号。通过运行以下命令,使用
gcloud
创建服务帐号:gcloud iam service-accounts create NAMESPACE_GSA --project HOST_PROJECT_ID
请替换以下内容:
- 将 NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务帐号 (GSA) 的名称。
- 将 HOST_PROJECT_ID 替换为您的宿主项目 ID。
如需详细了解如何创建服务帐号,请参阅创建和管理服务帐号。
向 IAM 服务帐号授予对代管项目的提升权限:
gcloud projects add-iam-policy-binding MANAGED_PROJECT_ID \ --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/owner"
请替换以下内容:
- 将 MANAGED_PROJECT_ID 替换为您的代管项目 ID。
- 将 NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务帐号的名称。
- 将 HOST_PROJECT_ID 替换为您的宿主项目 ID。
在 IAM 服务帐号和 Config Connector Kubernetes 服务帐号之间创建 IAM 政策绑定。您可以通过运行以下
gcloud
命令来绑定服务帐号:gcloud iam service-accounts add-iam-policy-binding \ NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:HOST_PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-NAMESPACE]" \ --role="roles/iam.workloadIdentityUser" \ --project HOST_PROJECT_ID
请替换以下内容:
- 将 HOST_PROJECT_ID 替换为您的宿主项目 ID。
- 将 NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务帐号的名称。
- 将 NAMESPACE 替换为您的命名空间。
向 IAM 服务帐号授予在宿主项目上将 Prometheus 指标发布到 Google Cloud 的运维套件的权限。
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
请替换以下内容:
- 将 HOST_PROJECT_ID 替换为您的宿主项目 ID。
- 将 NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务帐号的名称。
创建 ConfigConnectorContext
如需创建 Google Cloud 资源,您需要配置 Config Connector 以监视命名空间,具体方法是在要使用的命名空间中添加 ConfigConnectorContext
对象。
要创建 ConfigConnectorContext
,请完成以下步骤:
将以下 YAML 清单复制到名为
configconnectorcontext.yaml
的文件中:apiVersion: core.cnrm.cloud.google.com/v1beta1 kind: ConfigConnectorContext metadata: # you can only have one ConfigConnectorContext per namespace name: configconnectorcontext.core.cnrm.cloud.google.com namespace: NAMESPACE spec: googleServiceAccount: "NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com"
请替换以下内容:
- 将 NAMESPACE 替换为您的命名空间名称。
- 将 NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务帐号的名称。
- 将 HOST_PROJECT_ID 替换为您的宿主项目 ID。
使用
kubectl
将文件应用到集群:kubectl apply -f configconnectorcontext.yaml
使用
kubectl
验证 Config Connector Operator 是否为您的命名空间创建了 Kubernetes 服务帐号,运行以下命令:kubectl get serviceaccount/cnrm-controller-manager-NAMESPACE -n cnrm-system
将 NAMESPACE 替换为您的命名空间名称。
使用
kubectl
验证 Config Connector 控制器 Pod 是否正在为您的命名空间运行,运行以下命令:kubectl wait -n cnrm-system \ --for=condition=Ready pod \ -l cnrm.cloud.google.com/component=cnrm-controller-manager \ -l cnrm.cloud.google.com/scoped-namespace=NAMESPACE
将 NAMESPACE 替换为您的命名空间名称。
如果 Config Connector 控制器正在运行,则输出类似于:
cnrm-controller-manager-abcdefghijk-0 condition met.
配置 Config Connector 以不再管理命名空间中的资源
如需配置 Config Connector 以不再管理命名空间,请移除命名空间中的所有 Config Connector 资源并删除命名空间中的 ConfigConnectorContext
。
移除命名空间中的 Config Connector 资源
如需最终移除 ConfigConnectorContext
,请从命名空间中移除所有 Config Connector 资源。
如需发现命名空间中的所有 Config Connector 资源,请列出每个 Config Connector 自定义资源定义中的所有资源。
kubectl get crds --selector cnrm.cloud.google.com/managed-by-kcc=true \ -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -n 1 \ kubectl get -o jsonpath='{range .items[*]}{" Kind: "}{@.kind}{"Name: "}{@.metadata.name}{"\n"}{end}' \ --ignore-not-found -n NAMESPACE
将 NAMESPACE 替换为您的命名空间名称。
如需移除所有 Config Connector 资源,请针对上一步输出中的每个资源发出删除命令。
kubectl delete -n NAMESPACE KIND NAME
请替换以下内容:
NAMESPACE
:您的命名空间名称KIND
:在上一步中发现的资源种类NAME
:在上一步中发现的资源的名称
移除 ConfigConnectorContext
如需配置 Config Connector 以不再管理命名空间中的 Config Connector 资源,请删除命名空间中的 ConfigConnectorContext
。
kubectl delete -n NAMESPACE ConfigConnectorContext configconnectorcontext.core.cnrm.cloud.google.com
将 NAMESPACE 替换为您的命名空间名称。
在从命名空间中移除所有 Config Connector 资源之前,删除 ConfigConnectorContext
不会完成。
卸载 Config Connector
使用 kubectl delete
移除 Config Connector CRD 和控制器组件:
kubectl delete ConfigConnectorContext --all -A –wait=false
kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
--wait=true
如需卸载 Config Connector Operator,请运行以下命令:
kubectl delete -f operator-system/configconnector-operator.yaml --wait=true
从非 Operator 安装升级
Config Connector 1.33.0 版及更高版本仅支持使用 GKE 插件或 Operator 进行安装。
如需升级到 Operator(并保留所有 Config Connector 资源),您必须移除除 CRD 之外的所有 Config Connector 系统组件,然后安装 Operator。
运行以下命令以移除 Config Connector 系统非 CRD 组件:
kubectl delete sts,deploy,po,svc,roles,clusterroles,clusterrolebindings --all-namespaces -l cnrm.cloud.google.com/system=true --wait=true kubectl delete validatingwebhookconfiguration abandon-on-uninstall.cnrm.cloud.google.com --ignore-not-found --wait=true kubectl delete validatingwebhookconfiguration validating-webhook.cnrm.cloud.google.com --ignore-not-found --wait=true kubectl delete mutatingwebhookconfiguration mutating-webhook.cnrm.cloud.google.com --ignore-not-found --wait=true
从插件切换为手动安装
作为插件安装时,Config Connector 的版本与已安装的 GKE 版本直接相关。
手动安装可以加快更新速度,但需要进行手动升级。
如需在保证安全的同时保留所有资源,请执行以下操作:
停用插件,而不删除任何
ConfigConnector
或ConfigConnectorContext
对象:gcloud container clusters update CLUSTER_NAME --update-addons ConfigConnector=DISABLED
将
CLUSTER_NAME
替换为您在其中安装 Config Connector 的集群的名称。按照说明安装所需版本的手动 Operator。
后续步骤
- Config Connector 使用入门。
- 了解如何排查 Config Connector。