参考资料
SIG CLIKustomize Built-InsKustomize Built-Ins
Reference docs for Kustomize's built-in transformers and generators
AimHigherGGKustomize 組み込みの helmCharts で Helm を管理する
Kustomize 組み込みの helmCharts で Helm を管理する
actions-runner-controller ansible ArgoCD argocd-vault-plugin bookworm cert-manager CI/CD cluster-issuer datadog debian docker docker-compose enclosure github-actions gitlab glusterfs grafana ha-cluster helm influxdb ingress ingress-controller ingress-nginx ingress-nginx-controller kube-state-metrics kubernetes kustomize Let'sEncrypt loki longhorn LVM M.2 manifest microk8s monitoring mysql nginx promtail RasspberryPi rke saas SSD terraform vault VictoriaMetrics
MediumUsing Kustomize With Helm Charts for Argo CD Applications

Using Kustomize With Helm Charts for Argo CD Applications
Introduction
helmCharts 可用字段
name:要使用的 Chart 名称
repo:[可选] 包含该 Chart 的仓库 URL- 如果提供了此字段,生成器将尝试从远程获取 Chart;否则,将尝试从 chartHome 目录加载本地 Chart
version:[可选] Chart 的版本。若省略,则使用最新版本
releaseName:[可选] 在 Chart 中设置的 Release 名称
namespace:[可选] 用于 helm template 命令中--namespace标志的命名空间
valuesFile:[可选] values 文件的路径
valuesInline:直接在配置中指定的值映射(而非通过单独的文件)
valuesMerge:指定如何将 valuesInline 与 valuesFile 中的值进行合并- 可用值
mergeoverride,默认replace
includeCRDs:是否让 Helm 同时生成 CustomResourceDefinitions- 默认为
false
skipHooks:[可选] 在展开 Chart 时跳过执行 Helm hooks- Kustomize 默认会渲染 templates 目录下的所有内容,这可能导致输出结果与 helm install 不一致。启用此选项可抑制该行为
additionalValuesFiles:[可选] 一个本地 values 文件路径列表,这些文件将与当前 values 文件一同使用
skipTests:[可选] 从模板化输出中跳过测试(tests)
apiVersions:[可选] 用于 Capabilities.APIVersions 的 Kubernetes API 版本列表
nameTemplate:[可选] 指定用于命名 Release 的名称模板
kubeVersion:[可选] 指定 Helm 用于 Capabilities.KubeVersion 的 Kubernetes 版本
helmGlobals 存储影响相关 helmCharts 字段中所有条目的全局设置
- chartHome:一个相对于 kustomization 根目录的文件路径,指向一个包含多个子目录的目录,每个子目录对应一个要包含在 kustomization 中的 Helm Chart
- 该字段的默认值为 “charts”
- 例如,kustomize 会在
{kustomizationRoot}/{chartHome}/minecraft路径下查找名为 minecraft 的 Chart - 如果在构建时该 Chart 已存在于该位置,kustomize 将直接使用本地找到的版本,而不会检查版本号或时间戳
- 如果该 Chart 不存在,kustomize 将根据 kustomization 文件中指定的版本号尝试拉取该 Chart 并保存到此位置
- 若要禁止自动拉取行为,只需确保 Chart 已预先放置在该目录中即可
- configHome:kustomize 应通过
HELM_CONFIG_HOME环境变量传递给 Helm 的配置目录路径 - kustomize 本身不会读取或写入该目录
- 如果未指定此字段,则默认使用
{tmpDir}/helm,其中{tmpDir}是 kustomize 为 Helm 创建的一个临时目录
kustomize build --enable-helm 实际包装了 helm pull 和 helm template 两个指令
- 样例
helmCommand=${MYGOBIN:-~/go/bin}/helmV3- helm 二进制文件路径,根据你实际安装进行配置
DEMO_HOME=$(mktemp -d) && mkdir -p $DEMO_HOME/base $DEMO_HOME/dev $DEMO_HOME/prod
vim $DEMO_HOME/base/kustomization.yaml
vim $DEMO_HOME/dev/kustomization.yaml
vim $DEMO_HOME/prod/kustomization.yaml
DEMO_HOME 结构如下
tree $DEMO_HOME
执行 kustomize build 构筑 base chart
--enable-helm必须设置
--helm-command为 helm 二进制文件路径- 默认为
helm
- 如果有位于项目根目录之外的文件,需要添加
--load-restrictor=LoadRestrictionsNone
如果是作为 kubectl 插件则执行 kubectl kustomize
--enable-helm必须设置
--helm-command为 helm 二进制文件路径- 默认为
helm
kustomize build --enable-helm 相当于调用 helm 拉取 chart 后并渲染了 template
- 如果不想拉取 chart 的话可以先手动 pull 一次
如下包装了 helm pull
如下包装了 helm template
后续比较 dev 和 prod
diff <(kubectl kustomize --enable-helm --helm-command "$helmCommand" "$DEMO_HOME/dev") <(kubectl kustomize --enable-helm --helm-command "$helmCommand" "$DEMO_HOME/prod") | less
最终得到 DEMO_HOME 结构如下
tree $DEMO_HOME
- 后续版本更新会拉取 chart 到 base/charts 文件夹下的对应版本文件夹
values 文件可以根据不同环境需求放到对应 kustomization 文件内
kustomization 内可以这样定义 values
kustomize 结构安排如下
kustomize build --enable-helm 进行版本管理
- 优点
- 可以同时用 Helm values + Kustomize patch
- 生成结果固定,方便 CI 以及安全审计
- 与 GitOps 工作流结合更紧密,无需依赖 Helm Release 状态
helmCharts 支持多个 Chart 组合
values 文件与环境结合,不需要重复编写基础部分
- 缺点
- 不支持 Helm release 版本管理
- 通过 Git 进行管理
- 不方便调试
- Helm 可以显示具体错误所在
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/k8s_kustomize_helmcharts
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
