如何结合Helm与Kustomize部署微服务?求目录结构示例
Helm与Kustomize协同部署微服务的实现方案及目录示例
Helm和Kustomize的协同核心是结合Helm的模板复用能力与Kustomize的增量定制优势,以下是两种主流落地方式:
方式一:Helm渲染YAML后,用Kustomize做定制化补丁
这种方式适合已有成熟Helm Chart,需要针对不同环境做轻量修改的场景,流程是先通过Helm生成基础YAML,再用Kustomize叠加定制规则。
实现步骤
- 准备微服务的Helm Chart:可以自行编写或基于开源Chart修改,包含Deployment、Service、Ingress等核心资源模板
- 用Helm将Chart渲染为原始YAML文件,输出到Kustomize的base目录
- 在Kustomize的overlay目录中定义补丁(patch)、配置替换等定制逻辑,针对不同环境(dev/test/prod)做差异化调整
目录结构示例
my-service-deploy/ ├── charts/ │ └── my-service/ # 微服务的基础Helm Chart │ ├── templates/ │ │ ├── deployment.yaml │ │ ├── service.yaml │ │ └── ingress.yaml │ ├── Chart.yaml │ └── values.yaml └── kustomize/ ├── base/ # Helm渲染后的基础YAML存放目录 │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ └── kustomization.yaml └── overlays/ ├── dev/ # 开发环境定制 │ ├── patch-replicas.yaml │ ├── patch-ingress-host.yaml │ └── kustomization.yaml └── prod/ # 生产环境定制 ├── patch-replicas.yaml ├── patch-resources.yaml └── kustomization.yaml
关键命令示例
- 渲染Helm Chart到Kustomize base目录:
helm template my-service ./charts/my-service --output-dir ./kustomize/base
- 构建开发环境的最终部署YAML并应用:
kustomize build ./kustomize/overlays/dev | kubectl apply -f -
方式二:Kustomize直接引用Helm Chart作为Base(Kustomize 3.2+支持)
这种方式更简洁,无需提前渲染YAML,Kustomize会自动调用Helm渲染Chart,并叠加定制规则,适合需要直接整合Helm Chart到Kustomize工作流的场景。
实现步骤
- 在kustomization.yaml中配置
helmChart字段,指定Helm Chart的来源(本地或远程仓库)、版本、自定义values等 - 添加Kustomize的补丁、配置替换等定制逻辑
- 直接用kustomize build生成最终部署YAML
目录结构示例
my-service-deploy/ └── kustomize/ ├── base/ │ └── kustomization.yaml # 引用Helm Chart作为base └── overlays/ ├── dev/ │ ├── patch-ingress.yaml │ └── kustomization.yaml └── prod/ ├── patch-resources.yaml └── kustomization.yaml
关键配置示例
- base/kustomization.yaml内容:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization helmCharts: - name: my-service repo: ./../charts # 本地Chart目录,也可以是远程仓库URL如https://charts.example.com version: 0.1.0 releaseName: my-service valuesFile: ./values-base.yaml # 基础values配置
- 构建生产环境部署YAML并应用:
kustomize build ./kustomize/overlays/prod | kubectl apply -f -
注意事项
- 若使用远程Helm仓库,需提前确保Helm能访问该仓库(执行
helm repo add) - Kustomize的补丁支持JSON Patch、Strategic Merge Patch等多种格式,根据需要选择
- 优先保持Helm Chart的通用性,将环境差异化配置放到Kustomize的overlay中,便于维护
内容的提问来源于stack exchange,提问作者sumantapr
相关产品推荐
相关产品推荐

