Helm完全指南:Kubernetes包管理器
Helm完全指南:Kubernetes包管理器
前言
本教程专为以下读者编写:
目标读者:
- 想使用Helm简化Kubernetes应用部署的运维人员
- 需要管理多环境配置的DevOps工程师
- 想复用社区Chart的开发者
- 正在搭建CI/CD流水线的工程师
学完本教程后,你将能够: 1. 使用Helm搜索、安装、升级和回滚应用 2. 创建和定制自己的Chart 3. 管理Chart依赖和版本 4. 使用Helm部署生产级应用 5. 搭建私有Chart仓库
1. Helm基础
1.1 安装Helm
# Linux安装
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version
helm repo list
# 添加常用仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add prometheus https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
1.2 常用命令
# 搜索应用
helm search repo nginx
helm search repo prometheus --versions
# 安装应用
helm install my-release bitnami/nginx
helm install my-release bitnami/nginx --set replicaCount=3
# 升级和回滚
helm upgrade my-release bitnami/nginx
helm rollback my-release 1
# 查看状态
helm list
helm status my-release
helm get values my-release
# 卸载
helm uninstall my-release
2. 自定义Chart
2.1 创建Chart
# 创建新Chart
helm create mychart
tree mychart/
# Chart目录结构
mychart/
├── Chart.yaml # Chart元数据
├── values.yaml # 默认配置值
├── values.schema.json # 值验证模式
├── charts/ # 依赖Chart
├── templates/ # Kubernetes模板
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── _helpers.tpl # 辅助函数
│ └── NOTES.txt # 使用说明
└── crds/ # 自定义资源定义
2.2 Chart.yaml详解
apiVersion: v2
name: my-application
description: A production-ready Kubernetes application
type: application
version: 1.0.0
appVersion: "1.0.0"
dependencies:
- name: postgresql
version: "12.x.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
alias: database
keywords:
- application
- web
2.3 values.yaml详解
# 副本配置
replicaCount: 3
# 镜像配置
image:
repository: myregistry/myapp
pullPolicy: IfNotPresent
tag: "v1.0.0"
# 服务配置
service:
type: ClusterIP
port: 80
# 资源限制
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
3. 模板开发
3.1 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 }}"
ports:
- containerPort: {{ .Values.service.port }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
3.2 辅助函数
{{- define "mychart.name" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 -}}
{{- end -}}
{{- define "mychart.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 -}}
{{- else }}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}}
{{- end -}}
{{- end -}}
4. 依赖管理
4.1 依赖配置
# Chart.yaml dependencies
dependencies:
- name: postgresql
version: "12.x.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
- name: redis
version: "18.x.x"
repository: "https://charts.bitnami.com/bitnami"
4.2 依赖管理命令
# 更新依赖
helm dependency update ./mychart
# 查看依赖
helm dependency list ./mychart
# 构建依赖
helm dependency build ./mychart
# 打包Chart
helm package ./mychart
5. 测试和验证
5.1 测试Chart
# 模板渲染测试
helm template ./mychart
# 安装测试
helm install --dry-run ./mychart
# kubeconform验证
helm template ./mychart | kubeconform
# 运行测试
helm test ./mychart
5.2 发布Chart
# 打包
helm package ./mychart
# 发布到私有仓库
curl -u user:password \
https://chartmuseum.example.com/api/charts \
--data-binary "@mychart-1.0.0.tgz"
6. 最佳实践
6.1 Chart开发规范
# values.yaml最佳实践
image:
repository: myregistry/myapp
pullPolicy: IfNotPresent
tag: "v1.0.0"
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
6.2 安全配置
podSecurityContext:
runAsNonRoot: true
runAsUser: 1000
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
总结
核心要点: 1. Helm简化了Kubernetes应用部署和管理 2. Chart模板化配置提高了复用性 3. 依赖管理简化了复杂应用的部署 4. OCI仓库便于Chart分发和版本管理
进阶学习:
- 学习Helm插件开发
- 搭建私有Chart仓库
- 集成到CI/CD流水线
- 官方文档:https://helm.sh/docs/
- Chart仓库:https://artifacthub.io/
参考资源:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







