Chart.yaml 中的 dependencies 声明
在 Chart.yaml 的 dependencies 字段声明当前 Chart 依赖的其他 Chart:
# Chart.yaml
apiVersion: v2
name: mywebapp
version: 0.1.0
appVersion: "1.0.0"
dependencies:
- name: postgresql # 子 Chart 名称
version: ">=13.0.0 <14.0.0" # SemVer 版本约束
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled # 条件字段:值为 false 时跳过
- name: redis
version: "18.x.x"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
alias: cache # 别名:允许同一 Chart 安装多次
- name: common # library 类型的 Chart
version: "2.x.x"
repository: https://charts.bitnami.com/bitnami
tags: # 标签组控制:启用/禁用一组依赖
- monitoring
helm dependency update:下载依赖
# 下载所有声明的依赖到 charts/ 目录
helm dependency update ./mywebapp
# 更新后会生成/更新 Chart.lock 文件(锁定精确版本)
cat mywebapp/Chart.lock
# 列出依赖状态
helm dependency list ./mywebapp
# 如果 charts/ 中已有 .tgz 文件,可跳过下载
helm dependency build ./mywebapp # 仅根据 Chart.lock 重建,不更新版本
# 查看 charts/ 目录(依赖以 .tgz 格式存储)
ls mywebapp/charts/
# postgresql-13.2.3.tgz redis-18.1.0.tgz
Chart.lock 记录每个依赖的精确版本,类似 package-lock.json。生产部署建议将 Chart.lock 提交到 Git,确保 CI/CD 使用 helm dependency build(按锁定版本构建)而非 helm dependency update(可能升级版本)。
条件依赖:condition 与 tags
# Chart.yaml 中的依赖声明
dependencies:
- name: postgresql
version: "13.x.x"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled # values 中 postgresql.enabled 为 false 则禁用
tags:
- database # 可通过 tags.database=false 批量禁用
- name: prometheus
version: "25.x.x"
repository: https://prometheus-community.github.io/helm-charts
condition: prometheus.enabled
tags:
- monitoring
# values.yaml 控制条件依赖
postgresql:
enabled: true # condition 优先级高于 tags
prometheus:
enabled: false # 禁用 prometheus
tags:
database: true # 批量启用/禁用 database 标签下的依赖
monitoring: false # 批量禁用 monitoring 标签下的依赖
alias:同一 Chart 安装多次
# 使用别名:同一个 redis Chart 安装两个实例
dependencies:
- name: redis
version: "18.x.x"
repository: https://charts.bitnami.com/bitnami
alias: session-cache # 第一个 Redis 实例:会话缓存
- name: redis
version: "18.x.x"
repository: https://charts.bitnami.com/bitnami
alias: job-queue # 第二个 Redis 实例:任务队列
# 通过别名分别配置两个实例
session-cache:
auth:
enabled: true
password: session-secret
master:
persistence:
size: 2Gi
job-queue:
auth:
enabled: false
master:
persistence:
size: 5Gi
Umbrella Chart:父 Chart 组合多个子 Chart
Umbrella Chart 是一种设计模式:创建一个纯粹用来组合其他 Chart 的父 Chart,本身没有 templates/,只有依赖声明和 values。
Umbrella Chart 架构 myplatform/ # Umbrella Chart(父) ├── Chart.yaml # dependencies: [myapp, postgresql, redis, nginx-ingress] ├── values.yaml # 所有子 Chart 的配置统一在此 └── charts/ # helm dep update 后下载的子 Chart ├── myapp-1.2.0.tgz # 自有应用 Chart ├── postgresql-13.tgz # 数据库 ├── redis-18.tgz # 缓存 └── ingress-nginx.tgz # 入口控制器 一条命令部署整套平台: helm upgrade --install myplatform ./myplatform -f values-prod.yaml
实战:Web 应用 + PostgreSQL + Redis
# mywebapp/Chart.yaml
apiVersion: v2
name: mywebapp
version: 1.0.0
appVersion: "1.5.0"
description: Web application with PostgreSQL and Redis
dependencies:
- name: postgresql
version: "13.x.x"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
- name: redis
version: "18.x.x"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
# mywebapp/values.yaml
# 自有应用配置
replicaCount: 2
image:
repository: myregistry.io/mywebapp
tag: "1.5.0"
# PostgreSQL 子 Chart 配置
postgresql:
enabled: true
auth:
database: mywebapp
username: appuser
password: changeme # 生产中用 Secret
primary:
persistence:
size: 8Gi
# Redis 子 Chart 配置
redis:
enabled: true
architecture: standalone # 开发用单机模式
auth:
enabled: false
# 完整部署流程
# 1. 下载依赖
helm dependency update ./mywebapp
# 2. 验证模板渲染
helm template myapp ./mywebapp --debug
# 3. 部署到 staging
helm upgrade --install myapp-staging ./mywebapp \
-f values-staging.yaml \
--namespace staging --create-namespace
# 4. 查看所有已创建的资源
kubectl get all -n staging
helm status myapp-staging -n staging
将 charts/*.tgz 加入 .gitignore(或 .helmignore),只提交 Chart.yaml 和 Chart.lock。CI 流程中通过 helm dependency build 按锁定版本重建依赖。这样做既保持 Git 仓库整洁,又通过 Chart.lock 保证可重现性。
Chart 依赖通过 Chart.yaml 的 dependencies 字段声明,helm dependency update 下载依赖为 .tgz 文件。condition 实现按需启用/禁用依赖,alias 允许同一 Chart 多实例,tags 批量控制一组依赖。Umbrella Chart 是大型系统的核心部署模式——创建一个只有依赖声明、无模板的父 Chart,一条命令部署整套平台。Chart.lock 类似 package-lock.json,应提交 Git 保证可重现性。