Helm Charts 入门实战:从 Chart 结构到应用发布与版本回滚
【摘要】 Helm Charts 入门实战:从 Chart 结构到应用发布与版本回滚 一、Helm 是什么Helm 是 Kubernetes 的包管理器。把一组 Deployment、Service、ConfigMap 打包成可版本化、可参数化的单元,就叫 Chart。没有 Helm 时,一套应用要维护十几份 YAML,改个镜像版本得全局搜替换,多环境还得复制几套目录。Helm 用「模板 + val...
Helm Charts 入门实战:从 Chart 结构到应用发布与版本回滚
一、Helm 是什么
Helm 是 Kubernetes 的包管理器。把一组 Deployment、Service、ConfigMap 打包成可版本化、可参数化的单元,就叫 Chart。
没有 Helm 时,一套应用要维护十几份 YAML,改个镜像版本得全局搜替换,多环境还得复制几套目录。Helm 用「模板 + values」把这件事变成一次 helm upgrade。
| 概念 | 说明 |
|---|---|
| Chart | 应用包,含模板与默认配置 |
| Release | Chart 的一次安装实例,同集群可装多份 |
| values.yaml | 可覆盖参数(镜像、副本数、资源限制…) |
| Repository | Chart 仓库,类似 apt / npm 源 |
| Revision | 每次 upgrade 自增,用于回滚 |
二、创建第一个 Chart
helm create webapp
webapp/
├── Chart.yaml # 名称、版本、依赖
├── values.yaml # 默认参数
├── templates/ # Go template 模板
│ ├── deployment.yaml
│ └── _helpers.tpl
└── charts/ # 子 Chart
Chart.yaml 关键字段:apiVersion: v2 / name: webapp / version: 0.1.0(Chart 版本)/ appVersion: "1.0.0"(应用版本)。
三、模板与 values
模板里用 {{ .Values.xxx }} 引用参数:
# templates/deployment.yaml
spec:
replicas: {{ .Values.replicaCount }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
{{- toYaml .Values.resources | nindent 12 }}
# values.yaml
replicaCount: 2
image: { repository: nginx, tag: "1.25" }
resources:
limits: { cpu: 500m, memory: 256Mi }
发布前必跑三件套:
helm lint webapp # 语法与规范检查
helm template webapp ./webapp # 本地渲染,不连集群
helm install webapp ./webapp --dry-run --debug # 干跑,看最终 YAML
四、安装、升级与回滚
helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
helm install my-web ./webapp -n demo --create-namespace
helm upgrade my-web ./webapp --set replicaCount=3 --set image.tag=1.26
helm upgrade my-web ./webapp -f values-prod.yaml # 多环境推荐
helm history my-web
helm rollback my-web 2 # 回到 revision 2
helm uninstall my-web -n demo
命令行 --set 优先级高于 values.yaml。多环境做法:目录里放 values-dev.yaml / values-prod.yaml,CI 按分支选文件,Chart 本身只有一份。
五、五个常见坑
- 改了 values 不生效 → 忘记
helm upgrade,或--set的嵌套 key 没用点号写全 - 模板报
nil pointer→ 引用了不存在的字段,用{{ .Values.foo | default "bar" }}兜底 nindent缩进错乱 →toYaml后必须配nindent,数字比上一行多 2- 回滚后配置漂移 → 有人
kubectl edit手工改过;回滚只恢复 Helm 记录的 manifest - Secret 提交进 Git → 密码走
--set-string从 CI 变量注入,或用 helm-secrets 插件
六、小结
Helm 的核心价值是把 K8s 部署从「一堆 YAML」变成「一个可版本化的包」。入门阶段掌握 create → lint/template → install → upgrade → rollback 这条主线,再逐步引入子 Chart 依赖和 CI 自动发布即可。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)