将代码库与 Kustomize 配置和 Helm 图表一起使用

使用 Config Sync 时,系统会自动呈现您放置在 Git 代码库中的 Kustomize 配置和 Helm 图表。自动呈现具有以下优势:

  • 您不再需要外部混合流水线。如果没有自动呈现,您将必须在工作站上使用 Kustomize 和 Helm 手动呈现配置,或设置一个步骤以便在 CI 系统中触发混合过程。对于自动呈现,Config Sync 将会处理执行过程。

  • 维护费用将会降低。如果没有自动呈现,您必须维护一个具有原始 Kustomize 配置和 Helm 图表的 Git 代码库,以及另一个包含由外部混合过程生成的输出的 Git 代码库。然后,您必须将 Config Sync 配置为将 Git 代码库与呈现的输出进行同步。通过自动呈现,您只需维护一个具有原始配置的代码库。

  • 您的开发工作流将得到简化。如果没有自动呈现功能,则对原始配置进行的更改需要先经过两次审核,然后才能合并。一次在原始代码库中,另一次在呈现的代码库中。通过自动呈现,呈现配置由 Config Sync 生成,您只需审核对原始配置的更改。

要求

如需自动呈现 Kustomize 配置和 Helm 图表,请确保您的环境满足以下要求:

  • 具有 Anthos Config Management 1.9.0 或更高版本。如果需要,请升级 Anthos Config Management
  • 已启用多代码库模式。 如果您在安装 Config Sync 时使用的是 Google Cloud Console 或 gcloud 命令行工具,则 1.7.0 版和更高版本中默认启用多代码库模式。
  • 如需触发呈现过程,您的 Git 代码库必须在 Git 目录的根目录中包含 Kustomization 配置文件(kustomization.yamlkustomization.ymlKustomization)。如果根目录中没有 Kustomization 配置文件,则 Config Sync 会按原样同步配置,不需要进行任何呈现。
  • kustomization.yaml 中包含您的配置。如果不添加这些配置文件,则配置不会同步到集群。

Kustomize 配置的示例代码库架构

以下示例代码库演示了如何设置代码库以使用具有自动呈现功能的 Kustomize 配置。此代码库包含三个引用同一个库的叠加层(team-ateam-bteam-c)。

下图展示了目录结构:

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

以下 kustomization.yaml 文件位于代码库的根目录中,其中包含对三个叠加层的引用:

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

以下 kustomize.yaml 位于 team-a 目录中,是 team-a 的叠加层:

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

以下 kustomization.yaml 位于 base 目录中,是 Kustomize 库:

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

您可以在 Anthos Config Management 示例代码库的配置命名空间专用政策目录中浏览此代码库。

自动呈现 Helm 图表

您可以使用 kustomization.yaml 文件中的 helmGlobalshelmCharts 字段自动呈现 Helm 图表。

Helm 图表字段

Config Sync 支持将以下字段添加到 kustomization.yaml 文件中:

字段 说明
helmGlobals 应用于所有 Helm 图表的参数
helmGlobals.chartHome 接受字符串。这是目录的文件路径,它相对于 Kustomization 根目录,包含要添加到 Kustomization 中的每个图表的子目录。此字段的默认值为 charts
helmGlobals.configHome 接受字符串。定义 Kustomize 应使用 HELM_CONFIG_HOME 环境变量传递到 Helm 的值。Kustomize 不会尝试读取或写入此目录。如果省略,则使用 TMP_DIR/helm,其中 TMP_DIR 是 Kustomize 为 Helm 创建的临时目录。
helmCharts Helm 图表参数的数组
helmCharts.name 接受字符串。图表的名称。此字段是必填字段。
helmCharts.version 接受字符串。图表的版本
helmCharts.repo 接受字符串。用于定位图表的网址
helmCharts.releaseName 接受字符串。替换图表模板输出中的 RELEASE_NAME
helmCharts.namespace 接受字符串。设置版本的目标命名空间(模板中的 .Release.Namespace)
helmCharts.valuesInline 用于替换图表随附的默认值的值
helmCharts.valuesFile 接受字符串。ValuesFile 是用于替换图表随附默认值的值文件的本地文件路径或远程网址。默认值为 CHART_HOME/NAME/values.yaml
helmCharts.valuesMerge 接受 mergeoverride(default)replace。ValuesMerge 指定如何按照值来处理 ValuesInline。
helmCharts.includeCRDs 接受 truefalse。指定 Helm 是否还应生成 CustomResourceDefinitions。默认值为 false

Helm 图表示例

以下部分中的示例介绍了几种不同的 Helm 图表使用方法。

呈现远程 Helm 图表

Config Sync 支持在具有公开互联网访问权限的集群上呈现远程 Helm 图表。

以下 kustomization.yaml 通过设置以下 helmCharts 字段来呈现远程 cert-manager

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

呈现本地 Helm 图表

Config Sync 支持呈现本地 Helm 图表。如需使用 Helm 图表的自定义版本,您可以从 Helm 图表代码库(例如 ArtifactHub)拉取已发布的版本,在本地进行更改,然后将更改推送到您的代码库。

以下 kustomization.yaml 呈现一个本地 cert-manager 图表。Helm 图表的默认目录是 charts,并且由于此图表会签入到 charts 目录中,因此您无需指定 .helmCharts.repo.helmCharts.version

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

呈现多个 Helm 图表

无论图表是远程还是本地,Config Sync 都支持在一个 kustomiztion.yaml 文件中呈现多个 Helm 图表。

以下 kustomization.yaml 呈现一个本地 Helm 图表 (cert-manager):

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

示例格式

以下示例展示了

helmGlobals:
  chartHome: string
  configHome: string
helmCharts:
- name: string
  version: string
  repo: string
  releaseName: string
  namespace: string
  valuesInline: map[string]interface{}
  valuesFile: string
  valuesMerge: string
  includeCRDs: bool

后续步骤