本教程介绍如何使用适用于 Config Sync 的最佳实践,在两个环境(一个用于开发,一个用于生产)中为 Google Kubernetes Engine (GKE) Enterprise 版本设置 Config Sync。
在此场景中,您是 Foo Corp 的一个平台管理团队的成员。Foo Corpp 应用会部署到 GKE Enterprise,其中资源分布在两个项目中:dev
和 prod
。dev
项目包含开发 GKE Enterprise 集群,prod
项目包含生产 GKE Enterprise 集群。作为平台管理员,您的目标是确保这两个环境都符合 Foo Corp 的政策,并且 Kubernetes 命名空间和服务账号等基础级层资源在这两种环境中保持一致。
下图展示了您在本教程中设置的环境概览:
本教程利用 Config Sync 中的自动渲染功能来呈现集群上的资源。每个集群都配置为从包含 Kustomization 配置文件的目录进行同步,该文件将在 Config Sync 中自动触发渲染过程。如需了解详情,请参阅将代码库与 Kustomize 配置和 Helm 图表结合使用。
如上图所示,在本教程中,您将创建以下资源:
- 两个 Google Cloud 项目,分别表示开发和生产环境。
- 位于不同项目的两个 GKE Enterprise 集群
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 设置为自动呈现和同步两个单独环境的配置。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
在开始本教程之前,请确保您已完成以下步骤:
在 Google Cloud 控制台中的项目选择器页面上,选择或创建两个 Google Cloud 项目。
-
Make sure that billing is enabled for your Google Cloud project.
将 Google Cloud CLI 升级到最新版本。
安装或升级
nomos
命令
创建并注册集群
为了让您专注于为多个环境配置 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 项目中的项目 IDPROD_PROJECT_ID
:您要用作生产项目的 Google Cloud 项目中的项目 IDDEV_CLUSTER_ZONE
:您要在其中创建开发集群的 Compute Engine 可用区。例如us-central1-c
。PROD_CLUSTER_ZONE
:您要在其中创建生产集群的 Compute Engine 可用区
如需创建两个集群,请运行
./create-clusters.sh
脚本:./create-clusters.sh
此脚本会在开发项目中创建一个名为
dev
的 GKE Enterprise 集群,在生产项目中创建一个名为prod
的 GKE Enterprise 集群。此脚本还会启用 GKE Enterprise 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 Enterprise 集群注册,然后使用
gcloud container fleet memberships register
命令将dev
和prod
集群注册到其项目中的 GKE Enterprise。输出示例:
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 项目和环境的开发和生产环境设置了自动配置渲染。
清除数据
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除所有资源
如需删除您在本教程中创建的资源,但要保持开发和生产项目不变,请运行清理脚本:
./cleanup.sh
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 了解使用 Config Sync 安全发布
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。