导读:本期聚焦于葵司创作的《Apache Helm Chart是什么?如何使用Helm部署与管理Kubernetes应用?》,敬请观看详情。Helm被称为Kubernetes生态中的包管理器,它能把复杂的应用部署配置打包成可复用的Chart,让一条命令就能完成整套服务的安装、升级和回滚。本文将系统讲解Helm Chart的核心概念与目录结构,演示如何安装Helm客户端、添加仓库并部署常用应用,同时深入介绍values文件定制、模板变量、依赖管理等进阶用法。你还会学到Chart的打包发布流程、helm upgrade与rollback的操作细节,以及生产环境中版本控制、命名规范等实战经验,帮助你真正掌握这套Kubernetes应用交付利器。

Helm 是 Kubernetes 生态中最流行的包管理工具,它的作用类似于 Linux 系统中的 apt 或 yum。通过 Helm,我们可以把一整套 Kubernetes 资源清单(Deployment、Service、ConfigMap 等)打包成一个称为 Chart 的单元,然后通过一条命令完成部署、升级和卸载。相比手工编写和维护大量 YAML 文件,Helm 大幅简化了应用的交付流程,尤其在管理有状态服务、中间件以及复杂微服务应用时优势明显。本文将从核心概念、安装部署、Chart 定制与生命周期管理几个方面,完整讲解 Helm 的使用方法。

Apache Helm Chart是什么?如何使用Helm部署与管理Kubernetes应用?

一、Helm 核心概念与Chart目录结构

Helm 的工作围绕几个核心概念展开。Chart 是应用的定义包,包含了一组 Kubernetes 资源模板和默认配置;Release 是 Chart 的一次运行实例,同一个 Chart 可以在集群中安装多个不同名字的 Release;Repository 是存放和共享 Chart 的仓库,类似 npm 或 Maven 的仓库概念。理解这三者的关系是掌握 Helm 的基础:从仓库拉取 Chart,通过安装生成 Release,后续的升级和回滚都针对具体的 Release 进行。

一个标准的 Chart 目录结构如下:

mychart/
├── Chart.yaml          # Chart的元信息:名称、版本、描述
├── values.yaml         # 默认配置值,可被外部覆盖
├── charts/             # 依赖的子Chart存放目录
├── templates/          # 模板目录,存放资源清单模板
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl    # 可复用的模板片段
│   └── NOTES.txt       # 安装成功后的提示信息
└── .helmignore         # 打包时忽略的文件列表

Chart.yaml 中声明了 Chart 的名称与版本,其中 version 表示 Chart 自身版本,appVersion 表示应用版本,两者相互独立。templates 目录下的文件最终会被渲染成真正的 Kubernetes 清单,模板中通过 Go template 语法引用 values.yaml 中定义的变量,例如 {{ .Values.image.repository }}。这种模板与配置分离的设计,让同一份 Chart 可以适配开发、测试、生产等多种环境。

二、安装Helm并部署第一个应用

Helm 客户端是一个单独的二进制程序,不依赖集群内部组件,通过 kubeconfig 与 Kubernetes API 通信。在 Linux 上可以通过官方脚本一键安装:

# 下载并安装Helm(以v3.14.0为例)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

# 验证安装
helm version

安装完成后,第一步通常是添加第三方仓库。以部署 Nginx Ingress Controller 为例,流程如下:

# 1. 添加Bitnami官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 2. 搜索想要的Chart
helm search repo nginx

# 3. 安装Chart,生成一个名为my-nginx的Release
helm install my-nginx bitnami/nginx \
  --namespace ingress-nginx \
  --create-namespace

# 4. 查看Release状态
helm list -n ingress-nginx
helm status my-nginx -n ingress-nginx

helm install 命令中的第一个参数是 Release 名称,第二个参数是 Chart 的仓库引用。如果不指定名称,可以加 --generate-name 让 Helm 自动生成。安装后可以用 helm get manifest 查看实际渲染出来的资源清单,这对排查模板渲染问题非常有用。卸载则使用 helm uninstall my-nginx -n ingress-nginx,Helm 会自动清理该 Release 创建的所有资源。

三、使用values文件定制Chart配置

直接使用默认配置安装 Chart 往往无法满足实际需求,Helm 提供了多种覆盖 values 的方式。最常用的做法是编写自定义的 values 文件,在安装时通过 -f 参数传入:

# my-values.yaml 自定义配置
replicaCount: 3

image:
  repository: my-registry.ipipp.com/myapp
  tag: "1.2.0"
  pullPolicy: IfNotPresent

service:
  type: NodePort
  port: 8080

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 100m
    memory: 128Mi
# 使用自定义配置安装
helm install myapp ./mychart -f my-values.yaml -n prod

# 也可以直接在命令行覆盖单个值
helm upgrade myapp ./mychart --set image.tag=1.3.0 -n prod

# 查看某个Release当前生效的完整配置
helm get values myapp -n prod --all

三种覆盖方式的优先级从低到高依次是:Chart 内置的 values.yaml、-f 传入的文件、--set 命令行参数。需要注意的是,--set 适合临时调整少量参数,大量配置还是应该用文件管理并纳入 Git 版本控制,这样每次部署的配置都可追溯。此外,可以用 helm show values bitnami/nginx 查看一个 Chart 支持的全部配置项,这是了解第三方 Chart 定制能力的最佳途径。

在多环境场景下,通常会为每个环境维护独立的 values 文件,例如 values-dev.yamlvalues-prod.yaml,公共配置放在基础文件中,环境差异只写增量部分。结合 Helm 的层叠覆盖机制,就能实现一套 Chart 适配多套环境的目标,避免为每个环境复制一份完整的配置。

四、升级、回滚与Chart的生命周期管理

应用迭代时需要更新镜像版本或调整副本数,这时使用 helm upgrade。一个实用的习惯是每次升级都加上 --install 参数,这样即使 Release 不存在也会自动创建,脚本中就不必区分首次安装和后续升级:

# 升级Release:更新镜像版本并增加副本
helm upgrade --install myapp ./mychart \
  -f values-prod.yaml \
  --set image.tag=2.0.0 \
  --set replicaCount=5 \
  -n prod

# 查看历史版本
helm history myapp -n prod

# 回滚到上一个版本
helm rollback myapp -n prod

# 回滚到指定修订版本
helm rollback myapp 2 -n prod

Helm 会为每次升级生成一个修订号(Revision),回滚时可以精确指定回到哪个版本。要注意的是,回滚只针对通过 Helm 管理的资源生效,如果资源被外部工具直接修改过,可能出现状态不一致。生产环境中建议升级时配合 --wait 参数,让 Helm 等待所有资源就绪才返回成功,还可以加上 --timeout 10m 控制等待上限。

当 Chart 开发完成需要分发时,可以执行 helm package ./mychart 生成 .tgz 压缩包,再通过 helm repo index 生成索引文件,搭建私有仓库供团队共享。Chart 版本管理建议遵循语义化版本规范:功能性变更递增次版本号,仅修复问题递增修订号,不兼容变更递增主版本号。配合 CI/CD 流水线,可以实现提交代码后自动打包 Chart、自动部署到指定环境的完整交付链路,这也是 Helm 在生产环境中最大的价值所在。

五、常见问题与使用建议

使用 Helm 过程中有几个常见坑需要注意。第一,Helm 3 已移除 Tiller 服务端组件,权限完全依赖当前 kubeconfig 的身份,因此报权限错误时应检查 ServiceAccount 的 RBAC 配置。第二,删除 Release 时可以加 --keep-history 保留历史记录,方便事后排查;默认的 --no-hooks 行为也值得了解,避免误删 Hook 资源。第三,模板渲染错误是最常见的问题,可以用 helm template ./mycharthelm install --dry-run --debug 在本地验证渲染结果而不实际部署。

在团队协作层面,建议把 Chart 源码和 values 文件都放进 Git 仓库管理,环境配置与 Chart 定义分离存放;对生产环境的 Release 操作统一走流水线,避免人工随意执行 upgrade;定期用 helm list --all-namespaces 巡检集群中的 Release 状态,及时清理废弃实例。遵循这些实践,Helm 就能真正成为 Kubernetes 应用交付的可靠基石。

Helm ChartKubernetes部署Helm命令修改时间:2026-09-01 22:54:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。