使用 Kustomize 配置 Kubernetes
Kustomize 是一种 Kubernetes 配置转换工具,可让您自定义未模板化的 YAML 文件,同时让原始文件保持不变。Kustomize 还可以根据其他表示法生成 ConfigMap 和 Secret 等资源。Kustomize 专为 Kubernetes API 构建,因此它可以理解和修改 Kubernetes 样式的对象。
如需了解详情,请阅读 Kustomize 文档。
如果您要将 Helm 图表与 Config Sync 结合使用,有两种受支持的方法:通过 Kustomize 呈现 Helm 或使用 Helm API。本页面详细介绍了通过 Kustomize 呈现 Helm 图表的要求。如需详细了解如何使用 Helm API,请参阅从 Artifact Registry 同步 Helm 图表。
使用 Kustomize 呈现 Helm 图表时,存在以下差异:
- 不支持专用和基于 OCI 的 Helm 库。Helm API 支持私有库和基于 OCI 的库。
- Helm 值可以在可靠来源中管理。使用 Helm API 时,值作为 RootSync 或 RepoSync API 的一部分进行管理。
- 支持在 RootSync 或 RepoSync 对象中呈现多个 Helm 图表。使用 Helm API 时,您只能在 RootSync 或 RepoSync 对象中呈现一个 Helm 图表。
Kustomize 的 Config Sync 要求
如需自动呈现 Kustomize 配置和 Helm 图表,请确保您的 Config Sync 环境满足以下要求:
- 使用非结构化代码库。分层代码库不支持自动渲染。
- 如需触发呈现过程,您的 Git 代码库必须在 Git 目录的根目录中包含 Kustomization 配置文件(
kustomization.yaml
、kustomization.yml
或Kustomization
)。如果根目录中没有 Kustomization 配置文件,则 Config Sync 会按原样同步配置,不需要进行任何呈现。 - 在
kustomization.yaml
中包含您的配置。如果不添加这些配置文件,则配置不会同步到集群。
通过 Kustomize 呈现 Helm 图表
本部分介绍如何通过 Kustomize 呈现 Helm 图表。捆绑的 Helm 和 Kustomize 版本列出了与对应版本的 Config Sync 捆绑的 Kustomize 和 Helm 版本。
Helm 图表字段
您可以将以下 Helm 图表字段添加到您的 kustomization.yaml
文件中,以支持通过 Kustomize 呈现 Helm 图表:
字段 | 说明 |
---|---|
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 。 |
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
您可以在 Config Management 示例代码库的配置命名空间专用政策目录中浏览此代码库。
呈现远程 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
...