用途
Helm Charts 技能用于创建、管理和部署 Kubernetes 应用的 Helm 包,即 Kubernetes 的包管理器。它适合以下场景:创建可复用的 Kubernetes 应用包;使用可配置的值部署应用;管理 Helm release 与升级;使用第三方 Helm chart;实现 chart 版本管理与仓库。
前提条件
- 已安装 Helm 3.x
- kubectl 已配置集群访问权限
- 具备基本 Kubernetes 知识
Chart 结构
一个典型 chart 目录包含:
Chart.yaml:Chart 元数据values.yaml:默认配置值charts/:Chart 依赖templates/:Kubernetes 清单模板,包括 deployment.yaml、service.yaml、ingress.yaml、configmap.yaml、secret.yaml、_helpers.tpl、NOTES.txt 以及 tests/test-connection.yaml.helmignore:需要忽略的文件
Chart.yaml 与 values.yaml
Chart.yaml 使用 apiVersion v2,包含 name、description、type、version、appVersion、keywords、maintainers 和 dependencies 等字段。dependencies 可指定名称、版本、仓库和 condition。
values.yaml 定义默认配置,例如 replicaCount、image(repository、tag、pullPolicy)、service(type、port)、ingress(enabled、className、hosts、tls)、resources(limits、requests)以及第三方依赖(如 postgresql)的配置。
模板
Deployment 模板使用 include 引用辅助模板生成名称和标签,通过 .Values 读取配置,使用 default 回退到 .Chart.AppVersion,并通过 toYaml 与 nindent 输出 resources。环境变量可从 Secret 读取。
辅助函数定义在 templates/_helpers.tpl 中,包括 myapp.name、myapp.fullname、myapp.labels、myapp.selectorLabels,用于生成名称、全限定名称和标签。
条件资源示例为 ingress.yaml,通过 {{- if .Values.ingress.enabled -}} 控制是否渲染,并支持 annotations、tls 和 hosts 的循环。
Helm 命令
安装:
helm install myapp ./mychart
helm install myapp ./mychart -f custom-values.yaml
helm install myapp ./mychart --set replicaCount=3 --set image.tag=2.0.0
helm install myapp ./mychart -n production --create-namespace
helm install myapp ./mychart --dry-run --debug
管理 release:
helm list
helm list -A
helm upgrade myapp ./mychart
helm upgrade myapp ./mychart -f new-values.yaml
helm rollback myapp 1
helm history myapp
helm uninstall myapp
Chart 开发:
helm create mychart
helm lint ./mychart
helm template myapp ./mychart
helm package ./mychart
helm dependency update ./mychart
仓库操作:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo postgresql
helm search hub prometheus
helm install postgres bitnami/postgresql
helm show values bitnami/postgresql
高级功能
Hooks:通过注解 helm.sh/hook、helm.sh/hook-weight、helm.sh/hook-delete-policy 定义 pre-install、pre-upgrade 等钩子,例如数据库迁移 Job。
测试:在 templates/tests/ 中定义带 helm.sh/hook: test 注解的 Pod,使用 helm test myapp 运行。
库 Chart:Chart.yaml 中 type: library,通过 dependencies 引用。
OCI 仓库支持:
helm registry login registry.example.com
helm push mychart-1.0.0.tgz oci://registry.example.com/charts
helm pull oci://registry.example.com/charts/mychart --version 1.0.0
helm install myapp oci://registry.example.com/charts/mychart
常见问题
- YAML 缩进错误:使用
nindent辅助函数,如{{- toYaml .Values.resources | nindent 12 }}。 - 值未生效:检查值路径,使用
--debug,如helm template myapp ./mychart --debug。 - 依赖错误:运行
helm dependency update。 - Release 已存在:使用
helm upgrade --install myapp ./mychart。
最佳实践
- 对 chart 使用语义化版本
- 提供全面的默认值
- 在 values.yaml 中用注释记录所有值
- 对重复模式使用辅助模板
- 实现 chart 测试
- 使用 .helmignore 排除不必要的文件
- 固定依赖版本
- 在 CI 流水线中使用 helm lint
相关技能
- kubernetes-ops:K8s 基础
- argocd-gitops:结合 Helm 的 GitOps
- kustomize:替代模板方案
限制
资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供。