news 2026/5/22 13:15:37

Helm 3 最新完整教程(2026版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Helm 3 最新完整教程(2026版)

基于 Helm v3.14+(Kubernetes 1.28~1.31 兼容),涵盖核心概念、工作负载模板、高级用法、CI/CD 集成与生产最佳实践。


1. Helm 简介与核心架构

Helm 是 Kubernetes 的包管理器,用于定义、安装、升级和管理 Kubernetes 应用。它通过Chart(图表)打包一组 Kubernetes 资源模板,通过Values实现环境差异化配置。

🔑 Helm v3 架构演进(对比 v2)

特性Helm v2Helm v3
服务端组件Tiller(集群内运行,权限大)无 Tiller,直接使用用户 RBAC 权限
Release 存储ConfigMapSecret(可配置为 ConfigMap)
依赖管理requirements.yamldependencies内置于Chart.yaml
镜像仓库HTTP Chart Museum / GitHub Pages支持 OCI Registry(Docker Registry / Harbor / GHCR)
CRD 管理自动安装/删除仅创建,不删除(防误删数据)

2. 环境准备与安装

🐧 Linux / macOS

curlhttps://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3|bashhelm version

🪟 Windows (Scoop)

scoop install helm

✅ 验证与配置

# 添加官方仓库helm repoaddbitnami https://charts.bitnami.com/bitnami helm repo update# 搜索 Charthelm search repo nginx

3. Chart 目录结构与核心文件

helm create myapp tree myapp/
myapp/ ├── Chart.yaml # 元数据(名称、版本、依赖、API版本) ├── values.yaml # 默认配置值 ├── charts/ # 子 Chart(依赖) ├── templates/ # Kubernetes 资源模板 │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ └── _helpers.tpl # 模板函数与命名规则 ├── crds/ # CRD 定义(仅安装,不卸载) └── tests/ # 测试用例

📄Chart.yaml示例

apiVersion:v2name:myappdescription:示例应用 Charttype:applicationversion:1.0.0# Chart 版本(语义化)appVersion:"2.5.0"# 应用镜像版本dependencies:-name:postgresqlversion:"12.5.0"repository:https://charts.bitnami.com/bitnamicondition:postgresql.enabled

4. Helm 基础操作

# 安装/升级(幂等)helminstallmy-release ./myapp--namespacedev --create-namespace helm upgrade my-release ./myapp-fvalues-prod.yaml--namespacedev# 回滚helm rollback my-release2--namespacedev# 查看状态helm status my-release-ndev helm list-A# 卸载helm uninstall my-release-ndev# 模板预览(不提交集群)helm template my-release ./myapp-fvalues.yaml

5. Kubernetes 三大工作负载详解与 Helm 实践

🟦 5.1 Deployment:无状态应用

特点:副本数灵活、支持滚动更新、Pod 无固定身份、适合快速扩缩容。

📦templates/deployment.yaml
apiVersion:apps/v1kind:Deploymentmetadata:name:{{include "myapp.fullname" .}}labels:{{-include "myapp.labels" .|nindent 4}}spec:replicas:{{.Values.replicaCount}}selector:matchLabels:{{-include "myapp.selectorLabels" .|nindent 6}}strategy:type:RollingUpdaterollingUpdate:maxSurge:1maxUnavailable:0template:metadata:labels:{{-include "myapp.selectorLabels" .|nindent 8}}spec:containers:-name:{{.Chart.Name}}image:"{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"imagePullPolicy:{{.Values.image.pullPolicy}}ports:-name:httpcontainerPort:80protocol:TCPresources:{{-toYaml .Values.resources|nindent 12}}
🎯 适用场景
  • Web 前端、REST API、微服务
  • 需要快速水平扩展的应用
  • 配置通过 ConfigMap/Secret 注入,无本地持久化状态

🟨 5.2 StatefulSet:有状态应用

特点:Pod 名称固定(<name>-<ordinal>)、有序部署/扩缩容、独立 PVC、Headless Service 提供稳定网络标识。

📦templates/statefulset.yaml
apiVersion:apps/v1kind:StatefulSetmetadata:name:{{include "myapp.fullname" .}}-dbspec:serviceName:{{include "myapp.fullname" .}}-headlessreplicas:{{.Values.db.replicaCount}}podManagementPolicy:OrderedReadyupdateStrategy:type:RollingUpdateselector:matchLabels:app.kubernetes.io/name:{{include "myapp.name" .}}-dbtemplate:metadata:labels:app.kubernetes.io/name:{{include "myapp.name" .}}-dbspec:containers:-name:dbimage:"{{ .Values.db.image.repository }}:{{ .Values.db.image.tag }}"ports:-containerPort:5432env:-name:POSTGRES_PASSWORDvalueFrom:secretKeyRef:name:{{include "myapp.fullname" .}}-db-secretkey:passwordvolumeClaimTemplates:-metadata:name:dataspec:accessModes:["ReadWriteOnce"]storageClassName:{{.Values.db.storageClass}}resources:requests:storage:{{.Values.db.storageSize}}
🌐 Headless Service(必须配合 StatefulSet)
apiVersion:v1kind:Servicemetadata:name:{{include "myapp.fullname" .}}-headlessspec:clusterIP:None# 关键:无 ClusterIPports:-port:5432targetPort:5432name:dbselector:app.kubernetes.io/name:{{include "myapp.name" .}}-db
🎯 适用场景
  • 数据库(MySQL、PostgreSQL、MongoDB)
  • 消息队列(Kafka、RabbitMQ)
  • 分布式协调服务(ZooKeeper、etcd)
  • 需要稳定 DNS 标识与独立存储的集群

🟥 5.3 DaemonSet:节点级守护进程

特点:每个 Node 运行一个 Pod、自动跟随节点增删、通常使用hostNetwork/hostPath或特权模式。

📦templates/daemonset.yaml
apiVersion:apps/v1kind:DaemonSetmetadata:name:{{include "myapp.fullname" .}}-agentlabels:{{-include "myapp.labels" .|nindent 4}}spec:selector:matchLabels:app.kubernetes.io/name:{{include "myapp.name" .}}-agenttemplate:metadata:labels:app.kubernetes.io/name:{{include "myapp.name" .}}-agentspec:tolerations:-operator:Exists# 容忍所有污点,包括控制面节点containers:-name:node-exporterimage:"{{ .Values.agent.image.repository }}:{{ .Values.agent.image.tag }}"args:---path.procfs=/host/proc---path.sysfs=/host/sysports:-containerPort:9100volumeMounts:-name:procmountPath:/host/procreadOnly:true-name:sysmountPath:/host/sysreadOnly:truevolumes:-name:prochostPath:path:/proc-name:syshostPath:path:/sys
🎯 适用场景
  • 日志收集(Fluentd、Filebeat、Loki Promtail)
  • 监控指标采集(Prometheus Node Exporter、Datadog Agent)
  • 网络插件(Calico、Cilium、Flannel)
  • 存储插件(Ceph CSI、Rook)

6. 工作负载对比与选型指南

维度DeploymentStatefulSetDaemonSet
Pod 身份随机命名,可替换固定序号(pod-0,pod-1与 Node 绑定,通常唯一
扩缩容随机调度,并行严格按序号创建/删除自动跟随节点数量
网络标识通过 Service 负载均衡Headless Service + 稳定 DNS通常直接访问 Pod IP 或 hostPort
存储模型共享 PVC 或无状态独立 PVC(volumeClaimTemplates通常hostPath或本地存储
更新策略RollingUpdate / RecreateRollingUpdate(有序)OnDelete / RollingUpdate
典型场景Web/API/微服务DB/缓存/消息队列监控/日志/CNI/CSI
Helm 注意事项最常用,模板简单需配 Headless Service,注意storageClass兼容性注意tolerations、节点亲和性、权限升级

💡选型口诀
无状态跑 Deployment,有状态上 StatefulSet,管节点用 DaemonSet。


7. 高级特性与最佳实践

🔹 7.1 依赖管理与子 Chart

helm dependency update ./myapp helm dependency build ./myapp

templates/中覆盖子 Chart 值:

# values.yamlpostgresql:enabled:trueauth:postgresPassword:"supersecret"primary:persistence:size:10Gi

🔹 7.2 Helm Hooks(生命周期钩子)

apiVersion:batch/v1kind:Jobmetadata:name:"{{include "myapp.fullname" .}}-db-init"annotations:"helm.sh/hook":post-install,post-upgrade"helm.sh/hook-weight":"5""helm.sh/hook-delete-policy":hook-succeededspec:template:spec:containers:-name:initimage:"{{ .Values.db.image.repository }}:{{ .Values.db.image.tag }}"command:["sh","-c","psql -c 'CREATE DATABASE app;'"]restartPolicy:Never

🔹 7.3 OCI 仓库支持(Helm v3.8+)

# 登录helm registry login ghcr.io-uUSER-pTOKEN# 推送helm package ./myapp--version1.2.0 helm push myapp-1.2.0.tgz oci://ghcr.io/myorg/charts# 安装helminstallmyapp oci://ghcr.io/myorg/charts/myapp--version1.2.0

🔹 7.4 生产最佳实践

  1. 值结构分层:按环境拆分values-dev.yamlvalues-staging.yamlvalues-prod.yaml
  2. 避免硬编码:使用{{ .Values }}+ 默认值,敏感信息走 Secret/外部密钥管理
  3. Chart 版本控制:遵循 SemVer,appVersion与镜像版本对齐
  4. Lint 与测试
    helm lint ./myapp helm unittest ./myapp# 需安装 plugin
  5. CRD 安全:CRD 只增不删,升级前手动评估兼容性
  6. 资源限额:始终定义resources.requests/limits,配合 VPA/HPA

8. CI/CD 与 GitOps 集成

🛠 GitHub Actions 示例

name:Helm CIon:[push,pull_request]jobs:test:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-uses:azure/setup-helm@v3-run:helm lint ./myapp-run:helm template ./myapp-f values-test.yaml|kubeval--strict

🌐 GitOps(ArgoCD / Flux)

  • ArgoCD:原生支持 Helm,自动同步helm install/upgrade状态
  • Flux:使用HelmReleaseCRD 声明式管理
apiVersion:helm.toolkit.fluxcd.io/v2beta2kind:HelmReleasemetadata:name:myappnamespace:prodspec:interval:5mchart:spec:chart:./myappsourceRef:kind:GitRepositoryname:my-repovalues:replicaCount:3image:tag:"2.5.0"

🔍 变更预览插件

helm plugininstallhttps://github.com/databus23/helm-diff helmdiffupgrade my-release ./myapp-fvalues-prod.yaml

9. 常见坑与排错指南

现象原因解决
release "xxx" has no deployed releases首次安装失败但未清理helm uninstall xxxhelm install --atomic
failed to create resource: ... already exists手动创建了同名资源删除冲突资源或使用--replace
StatefulSet Pod 卡在PendingPVC 无法绑定 / StorageClass 不存在检查storageClassName与 Provisioner 状态
Helm 升级后旧 Pod 未删除标签选择器变更使用kubectl rollout restart或调整selector
Hook 执行阻塞升级Hook 未设置hook-delete-policy或超时添加"helm.sh/hook-delete-policy": hook-succeeded
OCI 拉取 401未登录或 Token 过期helm registry login重新认证

🐛 调试命令速查

helm template ./myapp--debug>rendered.yaml helm get manifest my-release-ndev helmhistorymy-release-ndev kubectl describe pod<pod-name>-ndev

📎 附录:Helm 常用命令速查表

命令说明
helm create <name>创建新 Chart
helm install <release> <chart>安装 Release
helm upgrade <release> <chart>升级 Release
helm rollback <release> [revision]回滚到指定版本
helm uninstall <release>删除 Release(不删 CRD/PVC)
helm list [-A]列出已安装 Release
helm repo add/update/search仓库管理
helm dependency update/build拉取/构建依赖
helm lint语法与规范检查
helm template本地渲染模板
helm package打包为.tgz
helm push推送至 OCI 仓库

📚 延伸阅读

  • 官方文档:https://helm.sh/docs/
  • Chart 最佳实践:https://helm.sh/docs/chart_best_practices/
  • Kubernetes 工作负载官方指南:https://kubernetes.io/docs/concepts/workloads/
  • Helm 插件生态:https://artifacthub.io/packages/search?kind=plugin

💡学习建议:从helm create开始,逐步替换deployment.yamlstatefulset.yamldaemonset.yaml,配合helm template --debug观察渲染结果,最后接入 CI/CD 实现自动化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 13:12:04

2026年国内酒吧管理系统有哪些?15款软件功能与适用场景

国内酒馆市场竞争摆在那里&#xff0c;靠手工记账和人盯人管理&#xff0c;越来越吃力。有行业统计显示&#xff0c;用了专业管理系统之后&#xff0c;酒吧的库存损耗平均能降18%&#xff0c;会员复购率提升25%以上。这笔账算下来&#xff0c;系统不是多出来的开支&#xff0c;…

作者头像 李华
网站建设 2026/5/22 13:08:08

Windows 11任务栏歌词终极解决方案:Taskbar-Lyrics完整指南

Windows 11任务栏歌词终极解决方案&#xff1a;Taskbar-Lyrics完整指南 【免费下载链接】Taskbar-Lyrics BetterNCM插件&#xff0c;在任务栏上嵌入歌词&#xff0c;目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics Taskbar-Lyrics是…

作者头像 李华
网站建设 2026/5/22 13:07:09

OpenProject开发环境一站式编织指南:打造你的项目管理交响乐团

OpenProject开发环境一站式编织指南&#xff1a;打造你的项目管理交响乐团 【免费下载链接】openproject OpenProject is the leading open source project management software. 项目地址: https://gitcode.com/GitHub_Trending/op/openproject 作为领先的开源项目管理…

作者头像 李华