Kustomize 是一种 Kubernetes 配置转换工具,可让您自定义未模板化的 YAML 文件,同时让原始文件保持不变。Kustomize 还可以根据其他表示法生成 ConfigMap 和 Secret 等资源。Kustomize 专为 Kubernetes API 构建,因此它可以理解和修改 Kubernetes 样式的对象。
如果您要将 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 环境满足以下要求:
- 使用非结构化可靠来源。分层来源不支持自动呈现。
- 如需触发呈现过程,可靠来源必须在目录的根目录中包含 Kustomization 配置文件(
kustomization.yaml
、kustomization.yml
或Kustomization
)。如果根目录中没有 Kustomization 配置文件,则 Config Sync 会按原样同步配置,不需要进行任何呈现。 - 在
kustomization.yaml
文件中添加您的配置。如果不添加这些配置文件,则配置不会同步到集群。 - 在 Config Sync 1.19.0 之前,所有配置都必须包含在 Kustomization 根目录下。从 1.19.0 版开始,Config Sync 支持根目录之外的文件。
呈现 Kustomize 配置
以下示例演示了如何设置可信来源以使用具有自动呈现功能的 Kustomize 配置。
Kustomize 配置的示例架构
此目录包含四个引用同一个库的叠加层(team-a
、team-b
、team-c
和 external-team
),以及 ConfigMap 生成器使用的文件。
下图展示了目录结构:
├── example
│ ├── 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
├── external-team
│ └── kustomization.yaml
└── external-data.txt
以下 kustomization.yaml
文件位于可靠来源的根目录中,其中包含对四个叠加层的引用,以及来自本地文件的 ConfigMap 生成器:
# ./example/kustomization.yaml
resources:
- team-a
- team-b
- team-c
- ../external-team # Starting from 1.19.0, Config Sync allows external resources located outside of the Kustomization root directory.
configMapGenerator:
- name: my-configmap
namespace: my-namespace
files:
- ../external-data.txt # Starting from 1.19.0, Config Sync allows external files located outside of the Kustomization root directory.
以下 kustomize.yaml
位于 team-a
目录中,是 team-a
的叠加层:
# ./example/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 库:
# ./example/base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml
您可以在 GitHub 的配置命名空间专用政策目录中探索示例仓库。
通过 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 指定如何按照 Values 来处理 ValuesInline。 |
helmCharts.includeCRDs
|
接受 true 或 false 。指定 Helm 是否还应生成 CustomResourceDefinitions。默认值为 false 。 |
呈现远程 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)拉取已发布的版本,在本地进行更改,然后将更改推送到可靠来源。
下图展示了目录结构:
├── base
│ ├── charts
│ │ └── cert-manager
│ └── kustomization.yaml
├── overlays
│ └── stage
│ └── kustomization.yaml
└── base_value_overrides.yaml
以下 kustomization.yaml
呈现一个本地 cert-manager
图表。Helm 图表的默认目录是 charts
,并且由于此图表会签入到 charts
目录中,因此您无需指定 .helmCharts.repo
或 .helmCharts.version
。
# ./overlays/stage/kustomization.yaml
...
# This field is optional if your Helm charts are located in the default 'charts' directory.
helmGlobals:
# Starting from 1.19.0, Config Sync allows loading from an external directory outside of the Kustomization root.
chartHome: ../../base/charts
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
# Specify a local path or a remote URL to a values file instead of using the default values in CHART_HOME/NAME/values.yaml.
valuesFile: ../../base_value_overrides.yaml
...
呈现多个 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
...