将代码库与 Kustomize 配置和 Helm 图表一起使用
使用 Config Sync 时,系统会自动呈现您放置在 Git 代码库中的 Kustomize 配置和 Helm 图表。自动呈现具有以下优势:
您不再需要外部混合流水线。如果没有自动呈现,您将必须在工作站上使用 Kustomize 和 Helm 手动呈现配置,或设置一个步骤以便在 CI 系统中触发混合过程。对于自动呈现,Config Sync 将会处理执行过程。
维护费用将会降低。如果没有自动呈现,您必须维护一个具有原始 Kustomize 配置和 Helm 图表的 Git 代码库,以及另一个包含由外部混合过程生成的输出的 Git 代码库。然后,您必须将 Config Sync 配置为将 Git 代码库与呈现的输出进行同步。通过自动呈现,您只需维护一个具有原始配置的代码库。
您的开发工作流将得到简化。如果没有自动呈现功能,则对原始配置进行的更改需要先经过两次审核,然后才能合并。一次在原始代码库中,另一次在呈现的代码库中。通过自动呈现,呈现配置由 Config Sync 生成,您只需审核对原始配置的更改。
要求
如需自动呈现 Kustomize 配置和 Helm 图表,请确保您的环境满足以下要求:
- 使用非结构化代码库。分层代码库不支持自动渲染。
- 需要启用
RootSync
和RepoSync
API。如果您使用kubectl
手动安装了 Config Sync,并且未启用RootSync
和RepoSync
API,则需要迁移 ConfigManagement 对象。 - 如需触发呈现过程,您的 Git 代码库必须在 Git 目录的根目录中包含 Kustomization 配置文件(
kustomization.yaml
、kustomization.yml
或Kustomization
)。如果根目录中没有 Kustomization 配置文件,则 Config Sync 会按原样同步配置,不需要进行任何呈现。 - 从 Anthos Config Management 1.12.0 版及更高版本开始,
spec.override.enableShellInRendering
必须设置为true
,以便 Config Sync 支持在渲染过程中从公共代码库拉取远程库。 - 在
kustomization.yaml
中包含您的配置。如果不添加这些配置文件,则配置不会同步到集群。
捆绑的 Helm 和 Kustomize 版本
Config Sync 利用 Helm 和 Kustomize 可执行文件在后台渲染配置。下表列出了支持渲染功能的 Config Sync 版本以及捆绑的 Helm 和 Kustomize 版本。
Config Sync 版本 | Helm 版本 | Kustomize 版本 |
---|---|---|
1.11.0 及更高版本 | v3.6.3 | v4.5.2 |
从 1.9.0 到 1.10.2 | v3.6.3 | v4.3.0 |
Kustomize 配置的示例代码库架构
以下示例代码库演示了如何设置代码库以使用具有自动呈现功能的 Kustomize 配置。此代码库包含三个引用同一个库的叠加层(team-a
、team-b
和 team-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
文件中的 helmGlobals
和 helmCharts
字段自动呈现 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
|
接受 merge 、override 、(default) 或 replace 。ValuesMerge 指定如何按照值来处理 ValuesInline。 |
helmCharts.includeCRDs
|
接受 true 或 false 。指定 Helm 是否还应生成 CustomResourceDefinitions。默认值为 false 。 |
Helm 图表示例
以下部分中的示例介绍了几种不同的 Helm 图表使用方法。
呈现远程 Helm 图表
Config Sync 支持在具有公开互联网访问权限的集群上呈现远程 Helm 图表。
以下 kustomization.yaml
通过设置以下 helmCharts
字段来呈现远程 cert-manager:
# ./kustomization.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
。
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
...
呈现多个 Helm 图表
无论图表是远程还是本地,Config Sync 都支持在一个 kustomization.yaml
文件中呈现多个 Helm 图表。
以下 kustomization.yaml
呈现一个本地 Helm 图表 (cert-manager
):
# ./kustomization.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
...
支持的字段
以下示例显示了 kustomization.yaml
文件中支持的字段:
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
后续步骤
- 学习教程,了解如何将 Config Sync 与 Kustomize 和 Helm 搭配使用。