本教程介绍如何使用适用于 Config Sync 的最佳实践,在两个环境(一个用于开发,一个用于生产)中为 Google Kubernetes Engine 设置 Config Sync。
在此场景中,您是 Foo Corp 的一个平台管理团队的成员。Foo Corpp 应用会部署到 GKE,其中资源分布在两个项目中:dev 和 prod。dev 项目包含开发 GKE 集群,而 prod 项目包含生产 GKE 集群。作为平台管理员,您的目标是确保这两个环境都符合 Foo Corp 的政策,并且 Kubernetes 命名空间和服务账号等基础级层资源在这两种环境中保持一致。
下图展示了您在本教程中设置的环境概览:

本教程利用 Config Sync 中的自动渲染功能来呈现集群上的资源。每个集群都配置为从包含 Kustomization 配置文件的目录进行同步,该文件将在 Config Sync 中自动触发渲染过程。如需了解详情,请参阅将代码库与 Kustomize 配置和 Helm 图表结合使用。
如上图所示,在本教程中,您将创建以下资源:
- 两个 Google Cloud 项目,分别表示开发环境和生产环境。
- 位于不同项目的两个 GKE 集群 dev和prod都安装了 Config Sync。
代码库架构
在本教程中,您将配置 Config Sync 以同步到示例代码库的 config-source/ 目录中的配置。此目录包含以下目录和文件:
config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md
config-source 目录包含 base/ 清单以及 dev/ 和 prod/ Kustomize 叠加层。每个目录都包含一个 kustomization.yaml 文件,其中列出了 Kustomize 应管理并应用于集群的文件。在 dev/kustomization.yaml 和 prod/kustomization.yaml 中定义了一系列补丁程序。这些补丁程序会操纵该特定环境的 base/ 资源。
例如,开发 RoleBinding 允许所有 Foo Corp 开发者将 Pod 部署到开发集群,而生产 RoleBinding 仅允许持续部署代理 deploy-bot@foo-corp.com 将 Pod 部署到生产环境:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev
创建并注册集群
为了让您专注于为多个环境配置 Config Sync 时需要使用的工作流,multi-environments-kustomize 目录包含可用于自动配置 Config Sync 的脚本。
- 克隆示例代码库: - git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
- 导航到包含本教程所需资源的文件夹: - cd anthos-config-management-samples/multi-environments-kustomize/
- 如需运行本教程中使用的脚本,请设置以下变量: - export DEV_PROJECT="DEV_PROJECT_ID" export PROD_PROJECT="PROD_PROJECT_ID" export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE" export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE" export CM_CONFIG_DIR="config-sync-rendering"- 替换以下内容: - DEV_PROJECT_ID:要用作开发项目的Google Cloud 项目中的项目 ID
- PROD_PROJECT_ID:要用作生产项目的Google Cloud 项目中的项目 ID
- DEV_CLUSTER_ZONE:您要在其中创建开发集群的 Compute Engine 可用区。例如- us-central1-c。
- PROD_CLUSTER_ZONE:您要在其中创建生产集群的 Compute Engine 可用区
 
- 如需创建两个集群,请运行 - ./create-clusters.sh脚本:- ./create-clusters.sh- 此脚本会在开发项目中创建一个名为 - dev的 GKE 集群,在生产项目中创建一个名为- prod的 GKE 集群。此脚本还会启用 GKE API 并连接到您的- dev和- prod集群,以便您可以使用- kubectl访问其 API。- 输出示例: - kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
- 如需将集群注册到两个单独的舰队,请运行 - register-clusters.sh脚本:- ./register-clusters.sh- 此脚本会创建一个 Google Cloud 服务账号和密钥以用于 GKE 集群注册,然后使用 - gcloud container fleet memberships register命令将- dev和- prod集群注册到其项目中的 GKE。- 输出示例: - Waiting for Feature Config Management to be created...done. ⭐️ Done registering clusters.
设置 Config Sync
现在您已创建并注册集群,接下来可以安装 Config Sync 并验证安装。
安装 Config Sync
如需在开发和生产集群上安装 Config Sync,请运行 install-config-sync.sh 脚本:
./install-config-sync.sh
预期输出:
🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.
Config Sync 现在正在同步到代码库中的配置。
验证您的配置
在本部分中,您将检查集群是否同步到代码库中的配置:
- 如需检查 Config Sync 安装的状态,请运行 - nomos status命令:- nomos status- 您应该会看到开发集群和生产集群现在均已同步到其各自的代码库: - gke_DEV_PROJECT_ID_us-central1-c_dev -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main SYNCED 8f2e196f Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-dev Current *gke_PROD_PROJECT_ID_us-central1-c_prod -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main SYNCED c91502ee Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-prod Current ```
- 使用 - kubectl切换到开发集群:- kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
- 如需验证资源是否已同步,请获取命名空间。您应该会看到 - foo命名空间。- kubectl get namespace- 输出示例: - NAME STATUS AGE config-management-monitoring Active 9m38s config-management-system Active 9m38s default Active 47h foo Active 9m5s kube-node-lease Active 47h kube-public Active 47h kube-system Active 47h resource-group-system Active 9m30s- 现在,您已经为跨多个 Google Cloud 项目和环境的开发和生产环境设置了自动配置渲染。