09-Helm 包管理

📅 2026/7/27 11:21:11
09-Helm 包管理
Helm 包管理概念引入安装一个应用需要多少 YAML一个 WordPress 至少需要Deployment、Service、PVC、ConfigMap、Secret、Ingress……手写 6 个文件每个几十行还要处理它们之间的依赖关系。Helm 就是 K8s 的包管理器类似 Linux 的 apt/yum或 Node.js 的 npm。一条命令就能安装整个应用所有 YAML 都打包好了。K8s 世界Chart.yamlhelm install完整 K8s 应用Node.js 世界package.jsonnpm install完整应用原理讲解三个核心概念概念含义类比Chart一个 Helm 包包含所有 K8s 资源定义npm 的 packageReleaseChart 的一次安装实例npm install 后的 node_modulesRepository存放 Chart 的仓库npm registry (npmjs.com)Chart 的结构my-chart/ ├── Chart.yaml # Chart 的元数据名字、版本、描述 ├── values.yaml # 默认配置值用户可以覆盖 ├── templates/ # K8s 资源模板 │ ├── deployment.yaml # Deployment 模板Go 模板语法 │ ├── service.yaml # Service 模板 │ └── ingress.yaml # Ingress 模板 └── charts/ # 依赖的子 Chart模板 Values 可定制Helm 的强大之处在于模板化。同一个 Chart通过传不同的 values可以部署到不同环境# values.yaml默认值replicaCount:1image:repository:nginxtag:1.27# values-prod.yaml生产环境覆盖replicaCount:3image:tag:1.27-alpineresources:limits:cpu:500mmemory:256Mi# 开发环境用默认值helminstallweb my-chart# 生产环境用自定义值helminstallweb my-chart-fvalues-prod.yaml# 也可以直接覆盖单个值helminstallweb my-chart--setreplicaCount3常用命令# 创建 Charthelm create my-chart# scaffold 一个标准 Chart# 安装helminstallmy-app ./my-chart/# 从本地目录安装helminstallmy-app bitnami/nginx# 从仓库安装需要先 helm repo add# 管理helm list# 查看所有 Releasehelm status my-app# 查看 Release 状态helm upgrade my-app ./my-chart/# 升级helm rollback my-app1# 回滚到版本 1helm uninstall my-app# 卸载# 调试helm template ./my-chart/# 预览渲染后的 YAML不连接集群helminstallmy-app ./my-chart/ --dry-run# 模拟安装校验语法helm get values my-app# 查看已安装 Release 的 valueshelmhistorymy-app# 查看版本历史Helm 的版本管理每次helm upgrade都会创建一个新的版本revision。你可以随时回滚helm rollback 1v1: 初始安装v2: 升级v3: 改配置回到 v1 状态每个 revision 都保留随时可以回滚动手实验配套实验位于docs/labs/beginner/helm/本实验不依赖外部 Chart 仓库——用helm create从零创建本地 Chart避免网络问题。步骤 1创建集群和本地 Chartcddocs/labs/beginner/helmbashsetup.shsetup.sh会自动创建一个本地 Helm Chartmy-chart/镜像使用 nginx:1.27。步骤 2认识 Chart 结构# 查看 Chart 的文件结构ls-Rmy-chart/# 查看默认配置catmy-chart/values.yaml# 预览渲染后的 YAML不实际安装helm template my-chart/步骤 3安装和自定义# 从本地 Chart 安装helminstallmy-nginx ./my-chart# 查看 Releasehelm list# 查看 Helm 创建的资源kubectl get all-lapp.kubernetes.io/instancemy-nginx# 用自定义值安装第二个实例helminstallcustom-nginx ./my-chart\--setreplicaCount2\--setservice.typeNodePort# 对比两个 Release 的值helm get values my-nginx helm get values custom-nginx步骤 4升级和回滚# 升级到 3 个副本helm upgrade my-nginx ./my-chart--setreplicaCount3# 查看版本历史helmhistorymy-nginx# 回滚到版本 1helm rollback my-nginx1# 确认回滚成功helmhistorymy-nginx kubectl get pods-lapp.kubernetes.io/instancemy-nginx步骤 5清理bashteardown.sh自检问题Chart、Release、Repository 分别是什么查看答案 **Chart** 是一个 Helm 包包含一组 K8s 资源模板和默认配置。**Release** 是 Chart 被安装后的实例——同一个 Chart 可以安装多次每次产生一个独立的 Release。**Repository** 是存放和分发 Chart 的仓库类似 npm registry。helm template和helm install --dry-run的区别是什么查看答案 helm template 在本地渲染模板并输出 YAML**不连接集群**适合快速预览模板结果或 CI 中做 lint 检查。helm install --dry-run 会连接集群模拟安装包括资源验证但不实际创建资源适合验证 Chart 在当前集群上是否能成功安装。调试模板语法用 template验证安装可行性用 --dry-run。你的团队需要把同一个微服务部署到 dev/staging/prod 三个环境。用 Helm 怎么管理查看答案 创建一个 Chart然后用三个 values 文件values-dev.yaml1 副本低资源、values-staging.yaml2 副本、values-prod.yaml3 副本高资源启用 HPA。部署时 helm install app my-chart -f values-{env}.yaml。这样只维护一份模板环境差异通过 values 管理。下一步你掌握了 K8s 的包管理器。接下来学习怎么看到集群里发生了什么→ 10. 可观测性与排错本文来自 K8s Guide—— 开源免费的 Kubernetes 中文学习指南️ 初学者轨道 面试轨道从零基础到拿 Offer 一站式覆盖 每篇文章配套 Kind 实验脚本本地一键运行 本文源码docs/beginner/17-helm.md⭐如果对你有帮助欢迎 Stargithub.com/callmebg/k8s-guide