Kubernetes Helm 包管理器
Kubernetes Helm 包管理器
什么是 Helm
Helm 是 Kubernetes 的包管理器,类似于 Linux 的 apt 或 yum。它将 Kubernetes 资源打包成 Chart,支持模板化、版本管理和依赖管理,极大简化了应用的部署和管理。
安装 Helm
# macOS
brew install helm
# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Windows
choco install kubernetes-helm
验证安装:
helm version
Helm 仓库管理
添加仓库
# 添加官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 更新仓库
helm repo update
# 查看已添加仓库
helm repo list
搜索 Chart
# 搜索 nginx 相关 chart
helm search repo nginx
# 搜索特定版本
helm search repo nginx --versions
安装 Chart
基本安装
# 安装 nginx
helm install my-nginx bitnami/nginx
# 指定命名空间
helm install my-nginx bitnami/nginx -n web --create-namespace
# 查看安装状态
helm list -n web
使用自定义值
# 查看默认值
helm show values bitnami/nginx
# 使用自定义值文件
helm install my-nginx bitnami/nginx -f custom-values.yaml
# 命令行覆盖值
helm install my-nginx bitnami/nginx --set service.type=NodePort
创建 Chart
初始化 Chart 结构
helm create my-chart
生成的目录结构:
my-chart/
├── Chart.yaml
├── values.yaml
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl
│ └── NOTES.txt
├── charts/
└── .helmignore
Chart.yaml 配置
apiVersion: v2
name: my-chart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.0.0"
values.yaml 配置
replicaCount: 2
image:
repository: nginx
pullPolicy: IfNotPresent
tag: "latest"
service:
type: ClusterIP
port: 80
ingress:
enabled: false
className: nginx
hosts:
- host: chart-example.local
paths:
- path: /
pathType: Prefix
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
模板语法
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-chart.fullname" . }}
labels:
{{- include "my-chart.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "my-chart.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "my-chart.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
Chart 操作
模板渲染
# 渲染模板
helm template my-nginx bitnami/nginx -f custom-values.yaml
# 渲染并保存
helm template my-nginx bitnami/nginx > rendered.yaml
打包 Chart
# 打包 Chart
helm package my-chart
# 打包并上传到仓库
helm cm-push my-chart-0.1.0.tgz my-repo
更新和回滚
# 更新 release
helm upgrade my-nginx bitnami/nginx -f custom-values.yaml
# 回滚到上一版本
helm rollback my-nginx 1
# 查看历史版本
helm history my-nginx
卸载 release
helm uninstall my-nginx -n web
实践案例:部署 Spring Boot 应用
创建自定义 Chart
helm create spring-boot-app
修改 values.yaml
replicaCount: 3
image:
repository: my-registry/spring-boot-app
tag: "1.0.0"
pullPolicy: Always
service:
type: ClusterIP
port: 8080
ingress:
enabled: true
className: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
hosts:
- host: api.example.com
paths:
- path: /
pathType: Prefix
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "250m"
memory: "256Mi"
部署应用
# 安装
helm install my-app ./spring-boot-app -n production
# 更新
helm upgrade my-app ./spring-boot-app -n production --set image.tag=1.1.0
# 回滚
helm rollback my-app 1 -n production
Chart 仓库管理
# 启动本地仓库服务
helm serve
# 上传 Chart 到 Harbor
helm push my-chart-0.1.0.tgz oci://harbor.example.com/chartrepo/my-project
总结
Helm 通过 Chart 机制极大简化了 Kubernetes 应用的部署和管理。掌握 Helm 的使用可以提高部署效率,实现应用的版本管理和回滚。