Helm 使用指南
约 1145 字大约 4 分钟
2025-09-05
Helm 是 Kubernetes 的包管理器,类似于 Linux 的 apt、yum 或 macOS 的 Homebrew。它简化了 Kubernetes 应用的部署、升级和管理。
什么是 Helm
Helm 通过以下核心概念简化 Kubernetes 应用管理:
- Chart: 包含 Kubernetes 资源定义模板的包
- Release: Chart 在集群中的运行实例
- Repository: Chart 的存储位置
- Template: 使用 Go template 语法的 YAML 文件
安装 Helm
使用包管理器安装
# macOS
brew install helm
# Ubuntu/Debian
sudo apt-get install helm
# CentOS/RHEL
sudo yum install helm使用脚本安装
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash验证安装
helm version基本概念
Chart 结构
mychart/
├── Chart.yaml # Chart 元数据
├── values.yaml # 默认配置值
├── templates/ # 模板文件
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl # 辅助模板
└── charts/ # 依赖的 chartsChart.yaml 示例
apiVersion: v2
name: myapp
description: A Helm chart for my application
type: application
version: 0.1.0
appVersion: "1.0"常用命令
仓库管理
# 添加官方仓库
helm repo add stable https://charts.helm.sh/stable
# 添加自定义仓库
helm repo add myrepo https://myrepo.example.com/charts
# 更新仓库
helm repo update
# 列出仓库
helm repo list
# 搜索 charts
helm search repo nginx
helm search hub nginxChart 管理
# 创建新 chart
helm create mychart
# 打包 chart
helm package mychart
# 验证 chart
helm lint mychart
# 查看 chart 内容
helm show chart stable/nginx
helm show values stable/nginxRelease 管理
# 安装 release
helm install myrelease stable/nginx
# 安装时指定 values
helm install myrelease stable/nginx -f custom-values.yaml
# 安装时设置参数
helm install myrelease stable/nginx --set service.type=NodePort
# 列出 releases
helm list
# 查看 release 状态
helm status myrelease
# 查看 release 历史
helm history myrelease
# 升级 release
helm upgrade myrelease stable/nginx --set image.tag=1.20
# 回滚 release
helm rollback myrelease 1
# 卸载 release
helm uninstall myrelease模板语法
基本语法
# values.yaml
replicaCount: 3
image:
repository: nginx
tag: "1.19"
pullPolicy: IfNotPresent
# deployment.yaml 模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "mychart.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "mychart.name" . }}
template:
metadata:
labels:
app: {{ include "mychart.name" . }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}控制结构
# 条件判断
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "mychart.fullname" . }}
{{- end }}
# 循环
{{- range .Values.env }}
- name: {{ .name }}
value: {{ .value }}
{{- end }}
# 默认值
image: {{ .Values.image.repository | default "nginx" }}辅助函数
# _helpers.tpl
{{/*
Expand the name of the chart.
*/}}
{{- define "mychart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
*/}}
{{- define "mychart.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}实际使用示例
1. 部署 Nginx
# 添加仓库
helm repo add stable https://charts.helm.sh/stable
helm repo update
# 安装 nginx
helm install my-nginx stable/nginx
# 查看状态
helm status my-nginx
# 获取访问信息
kubectl get svc my-nginx-nginx2. 自定义配置
# 创建自定义 values 文件
cat > nginx-values.yaml << EOF
service:
type: NodePort
port: 80
nodePort: 30080
ingress:
enabled: true
hosts:
- host: nginx.example.com
paths:
- path: /
pathType: Prefix
EOF
# 使用自定义配置安装
helm install my-nginx stable/nginx -f nginx-values.yaml3. 创建自定义 Chart
# 创建 chart
helm create myapp
# 编辑 values.yaml
vim myapp/values.yaml
# 编辑模板
vim myapp/templates/deployment.yaml
# 测试模板渲染
helm template myapp
# 安装
helm install myapp ./myapp高级功能
依赖管理
# Chart.yaml
dependencies:
- name: postgresql
version: "10.0.0"
repository: "https://charts.bitnami.com/bitnami"
- name: redis
version: "12.0.0"
repository: "https://charts.bitnami.com/bitnami"# 更新依赖
helm dependency update
# 构建依赖
helm dependency buildHooks
# templates/job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ include "mychart.fullname" . }}-migrate"
annotations:
"helm.sh/hook": pre-install,pre-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
template:
spec:
containers:
- name: migrate
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
command: ["sh", "-c", "python manage.py migrate"]
restartPolicy: Never测试
# 运行测试
helm test myrelease
# 查看测试日志
kubectl logs -l app.kubernetes.io/instance=myrelease,app.kubernetes.io/name=test最佳实践
1. 版本管理
- 使用语义化版本控制
- 为每个环境使用不同的 values 文件
- 使用 Git 管理 Chart 和 values
2. 安全性
# 使用 secrets 管理敏感信息
helm install myapp ./myapp --set database.password=$(kubectl get secret db-secret -o jsonpath="{.data.password}" | base64 -d)3. 环境管理
# 开发环境
helm install myapp-dev ./myapp -f values-dev.yaml
# 生产环境
helm install myapp-prod ./myapp -f values-prod.yaml4. 监控和日志
# 添加监控标签
metadata:
labels:
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}故障排除
常见问题
模板渲染错误
# 检查模板语法 helm lint mychart # 测试模板渲染 helm template mychart依赖问题
# 更新依赖 helm dependency update # 检查依赖 helm dependency list升级失败
# 查看历史 helm history myrelease # 回滚 helm rollback myrelease 1
调试技巧
# 详细输出
helm install myapp ./myapp --debug --dry-run
# 查看渲染后的模板
helm template myapp
# 查看 values
helm get values myrelease总结
Helm 是 Kubernetes 应用管理的强大工具,通过以下方式简化了应用部署:
- 标准化: 统一的 Chart 格式
- 可重用: 一次编写,多处使用
- 版本控制: 支持应用的版本管理
- 依赖管理: 自动处理应用依赖
- 配置管理: 灵活的参数化配置
掌握 Helm 的使用,可以大大提高 Kubernetes 应用的部署和管理效率。
更新日志
2025/9/5 10:42
查看所有更新日志
1830f-add helm于
