在本教程中,您将添加将 Helm 图表引用到您的代码库的 Kustomize 配置,然后使用 Config Sync 将集群同步到您的代码库。
使用 Config Sync 时,系统会自动呈现您放置在 Git 代码库中的 Kustomize 配置和 Helm 图表。自动呈现具有以下优势:
您不再需要外部混合流水线。如果没有自动呈现,您将必须在工作站上使用 Kustomize 和 Helm 手动呈现配置,或设置一个步骤以便在 CI 系统中触发混合过程。对于自动呈现,Config Sync 将会处理执行过程。
维护费用将会降低。如果没有自动呈现,您必须维护一个具有原始 Kustomize 配置和 Helm 图表的 Git 代码库,以及另一个包含由外部混合过程生成的输出的 Git 代码库。然后,您必须将 Config Sync 配置为将 Git 代码库与呈现的输出进行同步。通过自动呈现,您只需维护一个具有原始配置的代码库。
您的开发工作流将得到简化。如果没有自动呈现功能,则对原始配置进行的更改需要先经过两次审核,然后才能合并;一次在原始代码库中,另一次在呈现的代码库中。通过自动呈现,呈现配置由 Config Sync 生成,您只需审核对原始配置的更改。
配置您的代码库
以下任务展示了如何准备一个所包含的配置可以将 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 代码库同步
现在您已经创建了包含要使用的配置的代码库,接下来您可以配置从集群到代码库的同步。
如需配置
RootSync
对象,请创建root-sync.yaml
文件:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: true
将
YOUR_GIT_REPOSITORY
替换为您的 Git 代码库的网址。将
root-sync.yaml
文件应用到集群:kubectl apply -f root-sync.yaml
验证安装
安装和配置 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