第一章:Helm 简介¶
什么是 Helm?¶
Helm 是 Kubernetes 的包管理器,类似于 apt、yum 或 npm,用于简化 Kubernetes 应用的部署和管理。
核心概念¶
- Chart:应用包,包含 Kubernetes 资源定义
- Release:Chart 的部署实例
- Repository:Chart 仓库
Helm 架构¶
┌─────────────────────────────────────────────────────────────┐
│ Helm 架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Helm CLI │────▶│ Chart Repo │────▶│ Charts │ │
│ │ (客户端) │ │ (仓库) │ │ (应用包) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ │ Install/Upgrade/Delete │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Kubernetes Cluster │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Release 1 │ │ Release 2 │ │ Release 3 │ │ │
│ │ │ (nginx) │ │ (mysql) │ │ (redis) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Helm vs kubectl¶
| 操作 | kubectl | Helm |
|---|---|---|
| 部署应用 | kubectl apply -f | helm install |
| 更新应用 | kubectl apply -f | helm upgrade |
| 删除应用 | kubectl delete -f | helm uninstall |
| 查看应用 | kubectl get all | helm list |
| 回滚 | kubectl rollout undo | helm rollback |
Chart 结构¶
mychart/
├── Chart.yaml # Chart 元数据
├── values.yaml # 默认配置值
├── charts/ # 依赖的 Chart
├── templates/ # 模板文件
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ ├── ingress.yaml
│ └── _helpers.tpl # 模板助手
├── templates/NOTES.txt # 安装说明
└── .helmignore # 打包忽略文件
Chart.yaml¶
apiVersion: v2
name: mychart
description: A Helm chart for my application
type: application
version: 1.0.0 # Chart 版本
appVersion: "1.0.0" # 应用版本
kubeVersion: ">=1.20.0"
keywords:
- web
- nginx
maintainers:
- name: Your Name
email: your@email.com
sources:
- https://github.com/user/mychart
dependencies:
- name: redis
version: "16.x.x"
repository: "https://charts.bitnami.com/bitnami"
values.yaml¶
# 镜像配置
image:
repository: nginx
tag: latest
pullPolicy: IfNotPresent
# 副本数
replicaCount: 3
# 服务配置
service:
type: ClusterIP
port: 80
# 资源限制
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
# 环境变量
env:
- name: ENV
value: production
# 配置文件
config:
key1: value1
key2: value2
# Ingress 配置
ingress:
enabled: true
className: nginx
hosts:
- host: example.com
paths:
- path: /
pathType: Prefix
安装 Helm¶
方式一:脚本安装¶
方式二:二进制安装¶
# 下载
wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
# 解压
tar xvf helm-v3.13.0-linux-amd64.tar.gz
# 安装
sudo mv linux-amd64/helm /usr/local/bin/
# 验证
helm version
方式三:包管理器¶
# macOS
brew install helm
# Ubuntu/Debian
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
# Windows
choco install kubernetes-helm
基本命令¶
仓库管理¶
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
# 更新仓库
helm repo update
# 查看仓库
helm repo list
# 搜索 Chart
helm search repo nginx
helm search hub nginx
Chart 管理¶
# 创建 Chart
helm create mychart
# 检查 Chart
helm lint mychart
# 打包 Chart
helm package mychart
# 查看 Chart 信息
helm show chart bitnami/nginx
helm show readme bitnami/nginx
helm show values bitnami/nginx
helm show all bitnami/nginx
Release 管理¶
# 安装
helm install mynginx bitnami/nginx
# 安装并指定配置
helm install mynginx bitnami/nginx -f values.yaml
# 安装并指定命名空间
helm install mynginx bitnami/nginx -n production --create-namespace
# 查看已安装
helm list
helm list -A # 所有命名空间
# 查看状态
helm status mynginx
# 查看历史
helm history mynginx
# 升级
helm upgrade mynginx bitnami/nginx
# 升级并指定配置
helm upgrade mynginx bitnami/nginx -f values.yaml
# 回滚
helm rollback mynginx 1
# 卸载
helm uninstall mynginx
模板调试¶
# 渲染模板(不安装)
helm template mynginx bitnami/nginx
# 调试模式
helm install mynginx bitnami/nginx --dry-run --debug
# 查看生成的 YAML
helm get manifest mynginx
# 查看配置值
helm get values mynginx
# 查看所有信息
helm get all mynginx
快速开始¶
# 1. 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# 2. 搜索 Chart
helm search repo nginx
# 3. 查看 Chart 配置
helm show values bitnami/nginx > values.yaml
# 4. 修改配置
vim values.yaml
# 5. 安装
helm install mynginx bitnami/nginx -f values.yaml
# 6. 查看状态
helm status mynginx
kubectl get pods
# 7. 升级
helm upgrade mynginx bitnami/nginx -f values.yaml
# 8. 回滚
helm rollback mynginx 1
# 9. 卸载
helm uninstall mynginx
Helm vs Kustomize¶
| 特性 | Helm | Kustomize |
|---|---|---|
| 模板引擎 | Go Template | 无模板 |
| 配置管理 | values.yaml | overlays |
| 包管理 | 支持 | 不支持 |
| 依赖管理 | 支持 | 不支持 |
| 学习曲线 | 较陡 | 平缓 |
| 发布管理 | Release 概念 | 无 |
小结¶
本章学习了:
- ✅ Helm 概念和架构
- ✅ Chart 结构
- ✅ Helm 安装
- ✅ 基本命令
- ✅ 快速开始
下一章¶
第二章:Helm 安装与配置 - 学习详细配置和插件。