在本教程中,您将添加将 Helm 图表引用到您的代码库的 Kustomize 配置,然后使用 Config Sync 将集群同步到您的代码库。
使用 Config Sync 时,系统会自动呈现您放置在 Git 代码库中的 Kustomize 配置和 Helm 图表。自动呈现具有以下优势:
您不再需要外部混合流水线。如果没有自动呈现,您将必须在工作站上使用 Kustomize 和 Helm 手动呈现配置,或设置一个步骤以便在 CI 系统中触发混合过程。对于自动呈现,Config Sync 将会处理执行过程。
维护费用将会降低。如果没有自动呈现,您必须维护一个具有原始 Kustomize 配置和 Helm 图表的 Git 代码库,以及另一个包含由外部混合过程生成的输出的 Git 代码库。然后,您必须将 Config Sync 配置为将 Git 代码库与呈现的输出进行同步。通过自动呈现,您只需维护一个具有原始配置的代码库。
您的开发工作流将得到简化。如果没有自动呈现功能,则对原始配置进行的更改需要先经过两次审核,然后才能合并;一次在原始代码库中,另一次在呈现的代码库中。通过自动呈现,呈现配置由 Config Sync 生成,您只需审核对原始配置的更改。
目标
- 使用引用 cert-manager 的现成 Helm 图表的 Kustomize 配置来配置代码库。cert-manager 是 Kubernetes 的工具,可帮助您管理证书。
- 预览并验证您创建的配置。
- 使用 Config Sync 自动呈现图表,并将您的集群同步到您的代码库。
- 验证安装是否成功。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 创建符合 Config Sync 要求并使用以下 Config Sync 设置的集群,或确保您有权访问此集群:
- 使用非结构化代码库。
RootSync
和RepoSync
API 已启用。spec.override.enableShellInRendering
设置为true
,以便 Config Sync 支持在渲染过程中从公共代码库拉取远程库。
- 向舰队注册集群。
- 安装
nomos
命令行工具。 如果您已经安装了nomos
工具,请确保将其升级到 1.9.0 或更高版本。 - 安装 Helm
如果您对 Git、Kustomize 和 Helm 有一定的了解,将会很有帮助。
配置您的代码库
以下任务展示了如何准备一个所包含的配置可以将 Kustomize 配置与 Helm 图表结合使用的 Git 代码库:
创建 Git 代码库或确保您有权访问 Git 代码库。由于您的代码库使用 Kustomize 和 Helm,因此这是一个非结构化代码库。
在 Git 代码库的根目录中,创建一个名为
kustomization.yaml
的文件,并将以下代码粘贴到其中:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deployment
此文件是一个指向 Kustomize 库的 Kustomize 叠加层。此叠加层包含 Helm 图表库的一个补丁程序,用于向所有 Deployment 对象添加
client.lifecycle.config.k8s.io/mutation: ignore
注释。注释会导致 Config Sync 忽略您在集群中创建此对象之后对其执行的任何冲突更改。在 Git 代码库中,创建一个名为
base
的目录:mkdir base
在
base
目录中,创建另一个名为kustomization.yaml
的文件,并将以下代码粘贴到其中:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-manager
此文件是 Kustomize 库,用于呈现远程 Helm 图表。
返回 Git 代码库的根目录,创建一个名为
ignore-deployment-mutation-patch.yaml
的文件,并将以下代码粘贴到其中:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignore
此文件是一个应用于基本 Helm 图表的补丁。它将
client.lifecycle.config.k8s.io/mutation: ignore
注释添加到基本目录中的所有 Deployment。将更改提交到代码库:
git add . git commit -m 'Set up manifests.' git push
示例代码库的示例展示了此类代码库。
预览并验证呈现的配置
在 Config Sync 呈现配置并将配置同步到集群之前,请运行 nomos hydrate
来预览呈现的配置并运行 nomos vet
以验证格式是否正确,从而确保配置准确无误。
运行带有以下标志的以下
nomos hydrate
:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORY
在此命令中:
--source-format=unstructured
允许nomos hydrate
处理非结构化代码库。由于您正在使用 Kustomize 配置和 Helm 图表,因此需要使用非结构化代码库并添加此标志。- 利用
--output=OUTPUT_DIRECTORY
可以定义所呈现配置的路径。将OUTPUT_DIRECTORY
替换为您希望将输出保存的位置。
通过运行带有以下标志的
nomos vet
来检查配置的语法和有效性:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORY
在此命令中:
--source-format=unstructured
允许nomos vet
处理非结构化代码库。--keep-output=true
用于保存呈现的配置。--output=OUTPUT_DIRECTORY
是所呈现的配置的路径。
配置从 Git 代码库同步
现在您已经创建了包含要使用的配置的代码库,接下来您可以配置从集群到代码库的同步。如果您已安装 Config Sync,请继续验证同步状态。
在 Google Cloud 控制台中,启用 GKE Hub API。
- 在 Google Cloud 控制台中,转到功能部分下的配置页面。
点击 add 安装 Config Sync。
选择自动升级,使 Config Sync 可以自动升级版本。
在安装选项下,选择 Install Config Sync on individual clusters(在个别集群上安装 Config Sync)。
在可用集群表中,选择
cs-cluster
,然后点击 Install Config Sync(安装 Config Sync)。在设置标签页中,您应该会在几分钟后看到cs-cluster
的状态为已启用。在 Config Sync 信息中心上,点击部署软件包。
在选择要部署软件包的集群表中,选择
cs-cluster
,然后点击继续。保留托管在 Git 上的软件包,然后点击继续。
在软件包名称字段中,输入
sample-repository
。在代码库网址字段中,输入
https://github.com/GoogleCloudPlatform/anthos-config-management-samples
。在路径字段中,输入
config-sync-quickstart/multirepo/root
。其他所有字段保留默认值。
点击部署软件包。
几分钟后,您应该会在
cs-cluster
的同步状态列中看到已同步。
验证安装
安装和配置 Config Sync 后,您可以验证安装是否成功完成。
使用
nomos status
验证是否没有其他错误:nomos status
输出示例:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5a
验证 Helm 组件是否已成功安装:
kubectl get all -n cert-manager
输出示例:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
- 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 不允许在单个提交作业中移除所有命名空间或集群级资源。按照以下说明可以正常卸载组件并在单独的提交作业中移除命名空间:
从代码库中移除 cert-manager 组件:
git rm -rf manifests/cert-manager \ && git commit -m "uninstall cert-manager" \ && git push origin BRANCH
将
BRANCH
替换为您在其中创建代码库的分支。删除 cert-manager 命名空间:
git rm manifests/namespace-cert-manager.yaml \ && git commit -m "remove the cert-manager namespace" \ && git push origin BRANCH
验证 cert-manager 命名空间是否不存在:
kubectl get namespace cert-namespace
输出示例:
Error from server (NotFound): namespaces "cert-namespace" not found
删除集群
如需删除集群,请完成以下命令:
控制台
如需使用 Google Cloud 控制台删除集群,请完成以下任务:
在 Google Cloud 控制台中,转到 GKE 页面。
在您要删除的集群旁边,点击 more_vert 操作,然后点击 delete 删除。
当系统提示您确认时,再次点击删除。
gcloud
如需使用 Google Cloud CLI 删除集群,请运行以下命令:
gcloud container clusters delete CLUSTER_NAME
如需了解详情,请参阅 gcloud container clusters delete
文档。
后续步骤
- 详细了解如何使用非结构化代码库。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud 架构中心。