Helm Introduction

Helm 是 Kubernetes 的包管理工具,可以把一组相关的 Kubernetes 资源打包成一个 Chart,并通过统一命令完成安装、升级、回滚与卸载。

1. Chart 基础

1.1. 什么是 Chart

Chart 是一组描述 Kubernetes 资源的文件集合。
你可以把它理解为“应用部署模板包”:既包含资源模板,也包含默认参数和值文件。

1.2. Chart 目录结构(Helm 3)

1
2
3
4
5
6
7
8
mychart/
Chart.yaml # Chart 元数据(必须)
values.yaml # 默认配置(必须)
charts/ # 依赖 chart 包(可选)
templates/ # Kubernetes 模板文件目录(必须)
templates/NOTES.txt # 安装后提示信息(可选)
.helmignore # 打包时忽略规则(可选)
Chart.lock # 依赖锁文件(可选)

2. Chart.yaml 关键字段

Chart.yaml 是 Chart 的元信息文件,常见字段如下:

1
2
3
4
5
6
7
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.0.0"
kubeVersion: ">=1.26.0-0"

字段说明:

  1. version 是 Chart 包版本,必须遵循 SemVer。
  2. appVersion 是应用版本,仅用于展示,不参与依赖解析。
  3. apiVersion 在 Helm 3 常见为 v2

3. 依赖管理(已不再使用 requirements.yaml)

在 Helm 3 中,依赖统一写在 Chart.yamldependencies 字段中,而不是旧版 requirements.yaml

1
2
3
4
5
6
7
8
9
10
apiVersion: v2
name: platform
version: 0.1.0
dependencies:
- name: mysql
version: "9.x.x"
repository: "https://charts.bitnami.com/bitnami"
condition: mysql.enabled
tags:
- database

常用字段:

  1. name:依赖 chart 名称。
  2. version:依赖版本(建议使用范围约束而不是写死单版本)。
  3. repository:依赖仓库地址。
  4. condition:根据 values 中布尔值启用/禁用依赖。
  5. tags:可按标签批量控制一组依赖是否启用。

更新依赖命令:

1
helm dependency update

执行后会下载依赖到 charts/,并生成或更新 Chart.lock

4. 模板与 values

templates/ 下的文件会被 Helm 模板引擎渲染为 Kubernetes 清单。
模板中的变量通常来自 .Values

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}

values 的常见来源:

  1. Chart 自带的 values.yaml(默认值)。
  2. 用户通过 -f custom-values.yaml 传入的覆盖值。
  3. 用户通过 --set key=value 传入的临时值。

通常优先级是:--set > -f > values.yaml

5. 常用命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建 chart 骨架
helm create mychart

# 渲染模板到本地(不安装)
helm template demo ./mychart -f values.yaml

# 安装
helm install demo ./mychart -n demo --create-namespace

# 升级(不存在则安装)
helm upgrade --install demo ./mychart -n demo -f prod-values.yaml

# 查看发布历史
helm history demo -n demo

# 回滚到指定版本
helm rollback demo 2 -n demo

# 卸载
helm uninstall demo -n demo

6. 小结

Helm 的核心是三件事:

  1. Chart.yaml 描述包和依赖。
  2. templates/ + values 生成可复用的 Kubernetes 资源。
  3. install/upgrade/rollback 管理应用整个生命周期。

把这三件事掌握后,日常 Kubernetes 应用发布会更标准、更可维护。