跳转至

第一章: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

方式一:脚本安装

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

方式二:二进制安装

# 下载
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 安装与配置 - 学习详细配置和插件。