Skip to content

Kubernetes-Helm包管理器

中文文档:https://docs.helm.sh/zh/

Github:https://github.com/helm/helm

Helm 是 Kubernetes 的包管理工具,用于简化应用的部署、升级和版本管理。其核心功能包括:

核心概念

Chart

  • 定义:Kubernetes 应用的打包格式,包含:
    • Chart.yaml:元数据(名称、版本、依赖等)。
    • templates/:资源模板(Deployment、Service 等 YAML 文件)。
    • values.yaml:默认配置值,支持动态参数化。
  • 复用性:通过模板语法(Go 模板)实现配置与资源分离,支持多环境部署。

Release

  • 实例化:Chart 的特定配置版本,每次安装生成唯一 Release。
  • 生命周期管理:支持版本追踪(helm history)、回滚(helm rollback)和卸载(helm uninstall)。

Repository

  • 功能:存储和分发 Chart 的仓库(如 Bitnami、阿里云仓库)。
  • 操作:通过 helm repo add/update 管理仓库索引。

工作流程

  1. Chart 准备:开发者创建或从仓库获取 Chart,定制 values.yaml
  2. 安装/升级
    • Helm 客户端合并 Chart 模板与配置,生成 Kubernetes 资源清单。
    • 直接通过 kubeconfig 向 API 服务器提交资源请求。
  3. 状态管理
    • Release 状态存储在 Kubernetes Secrets 中。
    • 支持实时查询(helm status)和版本对比。

Helm 安装

二进制安装

bash
# 下载对应架构的Helm 3.13+(与k8s 1.31.0兼容)
curl -LO https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
tar -zxvf helm-v3.*.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

# 验证安装
helm version

使用脚本安装

bash
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

通过包管理器安装

Debian/Ubuntu

bash
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

RHEL(dnf/yum)

bash
dnf -y install helm

使用 pkg (FreeBSD)

bash
pkg install helm

源码编译

bash
# 您必须有可用的Go环境。
git clone https://github.com/helm/helm.git
cd helm
make

使用Helm

基础命令

命令作用常用参数示例
helm version显示版本信息--short 精简输出helm version --short
helm env查看环境变量-helm env
helm help查看命令帮助<command> 指定命令helm help install

helm search - 搜索 Charts

命令简介

helm search 是 Helm 包管理工具中的一个命令,用于在本地或远程仓库中搜索可用的 Charts(Helm 包)。它可以帮助用户快速查找和发现需要的 Kubernetes 应用模板。

语法格式

bash
helm search [command] [flags] [keyword]

选项

选项描述示例
-h, --help显示帮助信息helm search --help
--devel显示开发版本(alpha/beta/rc)helm search --devel nginx
-l, --versions显示所有版本而不仅是最新版本helm search -l mysql
-r, --regexp使用正则表达式匹配helm search -r "^nginx"
--version string指定版本号进行搜索helm search --version 1.2.3 nginx
-o, --output format指定输出格式(table/json/yaml)helm search -o json nginx
--repo string指定仓库URL进行搜索helm search --repo https://example.com/charts

经典案例

bash
# 搜索所有包含nginx的charts
helm search hub nginx

# 在本地添加的仓库中搜索mysql相关charts
helm search repo mysql

# 使用正则表达式搜索以"postgres"开头的charts
helm search repo -r "^postgres"

# 显示所有版本(包括历史版本)
helm search repo -l redis

# 以JSON格式输出搜索结果
helm search repo -o json wordpress

注意事项

  1. 使用前需要确保已添加远程仓库(如 helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm search hub 需要访问网络,会搜索Artifact Hub上的公共charts
  3. 搜索结果中的APP VERSION表示打包的应用版本,CHART VERSION表示chart本身的版本
  4. 对于生产环境,建议明确指定chart版本而不是使用最新版

helm repo - 仓库管理

命令简介

helm repo 是 Helm 包管理工具的子命令,用于管理 Helm 仓库(Chart 仓库)。通过该命令可以添加、删除、更新和列出 Helm 仓库,这些仓库包含了可供安装的 Helm Charts。

语法格式

bash
helm repo [command] [flags]

子命令

子命令描述示例
add添加一个新的 Helm 仓库helm repo add bitnami https://charts.bitnami.com/bitnami
remove移除一个 Helm 仓库helm repo remove bitnami
list列出所有已配置的 Helm 仓库helm repo list
update更新本地缓存的仓库索引helm repo update
index为本地 Chart 目录生成索引文件helm repo index ./mycharts

常用Flags

Flag描述示例
--username私有仓库用户名helm repo add --username myuser
--password私有仓库密码helm repo add --password mypass
--ca-fileCA证书文件路径helm repo add --ca-file /path/to/ca.crt
--cert-file客户端证书文件路径helm repo add --cert-file /path/to/client.crt
--key-file客户端密钥文件路径helm repo add --key-file /path/to/client.key
--insecure-skip-tls-verify跳过TLS验证helm repo add --insecure-skip-tls-verify
--no-update添加仓库时不更新索引helm repo add --no-update
--debug启用调试输出helm repo update --debug

经典案例

bash
# 添加 Bitnami 官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 更新所有仓库的索引
helm repo update

# 列出所有已配置的仓库
helm repo list

# 搜索仓库中的 Charts
helm search repo nginx

# 添加带认证的私有仓库
helm repo add myrepo https://myrepo.example.com \
  --username myuser \
  --password mypass \
  --ca-file /path/to/ca.crt

# 更新特定仓库(3.7+版本支持)
helm repo update myrepo

# 强制更新所有仓库(忽略缓存)
helm repo update --force-update

注意事项

  1. 网络连接helm repo update 需要网络连接来获取最新的 Chart 索引。
  2. 仓库认证:某些私有仓库可能需要认证,可以通过 --username--password 参数提供凭据。
  3. 缓存问题:Helm 会缓存仓库索引,如果遇到问题,可以尝试删除 ~/.cache/helm 目录后重新更新。
  4. 仓库格式:确保添加的仓库 URL 是正确的 Helm 仓库格式(通常以 index.yaml 结尾)。
  5. 删除仓库:删除仓库不会删除已安装的 Charts,只会移除仓库的配置信息。

helm create - 创建Chart

命令简介

helm create 是 Helm 包管理工具的子命令,用于快速生成一个新的 Helm Chart 目录结构。该命令会创建一个包含所有必要文件和目录的标准 Helm Chart 模板,用户可以基于此模板进行自定义开发。

语法格式

bash
helm create NAME [flags]

选项

选项描述示例
--starter使用 starter chart 模板helm create --starter=starter-name mychart
--version指定 Chart API 版本helm create --version=v2 mychart
--debug启用调试输出helm create --debug mychart

经典案例

bash
# 创建一个名为 myapp 的新 Chart
helm create myapp

# 使用特定的 starter 模板创建 Chart
helm create myapp --starter=starter-name

# 创建指定 API 版本的 Chart
helm create myapp --version=v2

生成的文件结构

执行 helm create myapp 后会生成以下目录结构:

myapp/
├── charts/               # 依赖的子 Chart
├── Chart.yaml           # Chart 元数据文件
├── values.yaml          # 默认配置值
├── templates/           # 模板文件目录
│   ├── deployment.yaml  # 部署模板
│   ├── service.yaml     # 服务模板
│   ├── _helpers.tpl     # 模板辅助函数
│   └── tests/           # 测试文件
└── .helmignore          # 忽略文件规则

注意事项

  1. 命名规范:Chart 名称应遵循 DNS 命名规则(小写字母、数字和连字符)
  2. 版本控制:建议将生成的 Chart 纳入版本控制系统(如 Git)
  3. 模板定制:创建后需要根据实际需求修改 templates/ 下的模板文件
  4. 依赖管理:如需添加依赖,需编辑 Chart.yaml 中的 dependencies 部分
  5. 测试验证:创建后应使用 helm lint 检查 Chart 格式,使用 helm install --dry-run 测试模板渲染

helm dependency - Chart 依赖管理命令

命令简介

helm dependency 是 Helm 的子命令,用于管理 Chart 的依赖关系。它允许你更新、构建和列出 Chart 的依赖项,这些依赖项通常定义在 Chart.yaml 文件的 dependencies 部分。

语法格式

bash
helm dependency [command] [flags] [CHART]

子命令

子命令描述示例
build基于 Chart.lock 文件构建依赖项helm dependency build ./mychart
update从 Chart.yaml 更新依赖项helm dependency update ./mychart
list列出 Chart 的所有依赖项helm dependency list ./mychart

常用 Flags

Flag描述示例
--verify验证依赖项的签名helm dependency update --verify
--keyring验证使用的密钥环helm dependency update --keyring ~/.gnupg/pubring.gpg
--skip-refresh跳过更新仓库索引helm dependency update --skip-refresh

经典案例

bash
# 1. 更新依赖项(会下载到 charts/ 目录)
helm dependency update ./mychart

# 2. 构建依赖项(基于 Chart.lock 文件)
helm dependency build ./mychart

# 3. 列出当前 Chart 的依赖项
helm dependency list ./mychart

# 4. 带验证的依赖更新
helm dependency update --verify ./mychart

工作流程

  1. 在 Chart.yaml 中定义依赖:
yaml
dependencies:
  - name: mysql
    version: "8.8.2"
    repository: "https://charts.bitnami.com/bitnami"
  1. 更新依赖:
bash
helm dependency update
  1. 这会生成:
  • charts/ 目录(包含下载的依赖)
  • Chart.lock 文件(锁定具体版本)

注意事项

  1. 依赖解析:Helm 会递归处理所有依赖关系
  2. 版本锁定Chart.lock 确保团队使用相同版本的依赖
  3. 离线使用:构建后的 charts/ 目录可以打包用于离线安装
  4. 仓库配置:确保依赖的仓库已通过 helm repo add 添加
  5. 清理依赖:删除 charts/ 目录和 Chart.lock 文件可以重置依赖状态

helm lint - Chart 语法和配置检查命令

命令简介

helm lint 是 Helm 的重要验证工具,用于检查 Chart 的语法正确性、文件结构和配置问题。它会验证 Chart 是否符合最佳实践,帮助开发者在部署前发现潜在问题。

语法格式

bash
helm lint PATH [flags]

选项

选项描述示例
--strict启用严格检查模式helm lint --strict ./mychart
--quiet只显示错误信息helm lint --quiet ./mychart
--with-subcharts同时检查子 Charthelm lint --with-subcharts ./mychart
--kube-version指定目标 Kubernetes 版本helm lint --kube-version 1.22 ./mychart
--debug显示调试信息helm lint --debug ./mychart

经典案例

bash
# 基本检查
helm lint ./mychart

# 严格模式检查(包含警告)
helm lint --strict ./mychart

# 检查包含子 Chart
helm lint --with-subcharts ./mychart

# 针对特定 K8s 版本检查
helm lint --kube-version 1.24 ./mychart

检查内容

  1. 文件结构验证

    • 必需的 Chart.yaml 文件
    • 正确的 templates/ 目录结构
    • 有效的 .helmignore 文件
  2. 模板语法检查

    • 模板变量引用是否正确
    • 函数调用是否有效
    • 控制结构是否完整
  3. 值文件验证

    • values.yaml 格式是否正确
    • 默认值是否合理
  4. Kubernetes 资源验证

    • API 版本兼容性
    • 必需字段是否设置

输出示例

bash
[INFO] Chart.yaml: icon is recommended
[ERROR] templates/deployment.yaml: unable to parse YAML: error converting YAML to JSON...
[WARNING] values.yaml: missing required field "image.tag"

注意事项

  1. 开发阶段:建议在每次修改后都运行 lint 检查
  2. CI/CD 集成:应在 CI 流水线中加入 lint 检查步骤
  3. 错误分级:注意区分 ERROR(必须修复)和 WARNING(建议修复)
  4. 版本兼容:使用 --kube-version 确保与目标集群版本兼容
  5. 子 Chart 检查:复杂项目应启用 --with-subcharts 选项

helm package - Chart 打包命令

命令简介

helm package 是 Helm 的核心命令,用于将 Chart 目录打包成可发布的 .tgz 归档文件。该命令会验证 Chart 内容并生成一个版本化的打包文件,便于分发和部署。

语法格式

bash
helm package [CHART_PATH] [...] [flags]

选项

选项描述示例
--destination指定输出目录(默认当前目录)helm package --destination ./dist ./mychart
--version覆盖 Chart.yaml 中的版本号helm package --version 1.2.3 ./mychart
--app-version覆盖应用版本号helm package --app-version v2.1.0 ./mychart
--dependency-update打包前更新依赖helm package --dependency-update ./mychart
--sign使用 PGP 签名打包文件helm package --sign --key 'John Doe' ./mychart
--keyring指定 GPG 密钥环路径helm package --sign --keyring ~/.gnupg/secring.gpg ./mychart

经典案例

bash
# 基本打包(生成 mychart-0.1.0.tgz)
helm package ./mychart

# 指定输出目录和版本
helm package --destination ./dist --version 1.0.0 ./mychart

# 带依赖更新和签名
helm package --dependency-update --sign --key 'dev@example.com' ./mychart

# 打包多个 Charts
helm package ./chart1 ./chart2 ./chart3

打包流程

  1. 读取并验证 Chart.yaml
  2. 检查依赖关系(如果使用 --dependency-update)
  3. 生成临时目录并复制必要文件
  4. 创建 .tgz 压缩包
  5. (可选)使用 GPG 签名
  6. 输出打包文件到目标目录

输出文件命名规则

<chart名称>-<版本号>.tgz
例如:redis-cluster-1.2.3.tgz

注意事项

  1. 版本控制:打包前确保 Chart.yaml 中的 version 字段已更新
  2. 依赖管理:建议使用 --dependency-update 确保依赖最新
  3. 签名安全:生产环境建议启用 --sign 选项
  4. 目录结构:Chart 必须符合标准目录结构
  5. 文件包含:.helmignore 文件会影响打包内容
  6. CI/CD 集成:适合在发布流水线中自动执行

验证打包结果

bash
# 查看打包内容
tar -ztvf mychart-0.1.0.tgz

# 验证签名
helm verify mychart-0.1.0.tgz

helm install - 部署 Chart 到 Kubernetes 集群

命令简介

helm install 是 Helm 最核心的命令,用于将打包好的 Chart 部署到 Kubernetes 集群。该命令会读取 Chart 定义,渲染 Kubernetes 资源模板,并将这些资源提交到集群。

语法格式

bash
helm install [NAME] [CHART] [flags]

基本参数

参数描述必需示例
NAME发布名称my-release
CHARTChart 路径/名称./mychartbitnami/nginx

常用选项

选项描述示例
--namespace指定目标命名空间--namespace production
--create-namespace自动创建命名空间--create-namespace
--values指定 values 文件--values my-values.yaml
--set设置参数值--set image.tag=v1.2.3
--dry-run模拟运行(不实际部署)--dry-run
--atomic失败时自动回滚--atomic
--wait等待所有资源就绪--wait
--timeout设置超时时间--timeout 5m
--version指定 Chart 版本--version 1.2.3

经典案例

bash
# 从仓库安装 Chart
helm install my-nginx bitnami/nginx --version 13.2.1

# 从本地目录安装
helm install my-app ./mychart

# 使用自定义 values 文件
helm install -f values.yaml -f override.yaml my-app bitnami/nginx

# 设置参数并等待部署完成
helm install my-db bitnami/mysql \
  --set auth.rootPassword=secret \
  --set auth.database=app_db \
  --wait \
  --timeout 5m

# 测试安装(dry-run)
helm install --dry-run my-test ./mychart

安装流程

  1. 检查 Chart 依赖
  2. 渲染模板文件
  3. 验证 Kubernetes 清单
  4. 提交到 Kubernetes API
  5. 记录发布信息

注意事项

  1. 命名唯一性:同一命名空间内发布名称必须唯一
  2. values 优先级:命令行 --set 会覆盖 values 文件中的设置
  3. 生产环境建议
    • 使用 --atomic--wait 选项
    • 明确设置 --timeout
    • 通过 --dry-run 预先测试
  4. 故障排查
    • 使用 helm get manifest RELEASE_NAME 查看实际部署的资源
    • 使用 helm status RELEASE_NAME 查看发布状态
  5. 版本控制:建议明确指定 Chart 版本(--version

安装后验证

bash
# 查看发布状态
helm status my-release

# 列出所有发布
helm list

# 查看生成的资源
kubectl get all -n <namespace>

通过 helm install --help 可以获取更详细的帮助信息。

helm upgrade - 更新已部署的 Release

命令简介

helm upgrade 是 Helm 的核心命令之一,用于更新已部署的 Release 到新版本或修改其配置。该命令允许您无缝升级应用程序,同时保持现有 Kubernetes 资源的完整性。

语法格式

bash
helm upgrade [RELEASE] [CHART] [flags]

基本参数

参数描述必需示例
RELEASE要升级的 Release 名称my-app
CHARTChart 路径/名称./mychartbitnami/nginx

常用选项

选项描述示例
--install如果 Release 不存在则安装--install
--namespace指定目标命名空间--namespace staging
--values指定 values 文件--values prod-values.yaml
--set设置参数值--set replicaCount=3
--dry-run模拟升级(不实际执行)--dry-run
--atomic失败时自动回滚--atomic
--wait等待所有资源就绪--wait
--timeout设置超时时间--timeout 10m
--version指定 Chart 版本--version 2.1.0
--history-max限制保留的修订历史数量--history-max 5

经典案例

bash
# 基本升级
helm upgrade my-app ./mychart

# 升级并修改配置
helm upgrade my-app bitnami/nginx \
  --set service.type=LoadBalancer \
  --set replicaCount=3

# 带自动回滚的升级
helm upgrade --atomic --wait my-app ./mychart

# 升级到特定 Chart 版本
helm upgrade my-app bitnami/nginx --version 15.0.0

# 模拟升级并输出 YAML
helm upgrade --dry-run --debug my-app ./mychart

升级策略

  1. 滚动更新:默认策略,逐步替换 Pod
  2. 重新创建:设置 strategy.type: Recreate
  3. 蓝绿部署:通过 labels 和 selectors 实现

注意事项

  1. 兼容性检查:升级前检查 Chart 的变更日志
  2. values 继承:默认会保留上次安装时的 values
  3. 资源保留:PVC 等资源默认不会被删除
  4. 回滚准备:建议先执行 helm rollback 测试
  5. 生产环境建议
    • 使用 --atomic--wait 选项
    • 在非生产环境先测试升级
    • 考虑使用 --dry-run 预先检查

升级后验证

bash
# 检查发布状态
helm status my-app

# 查看升级历史
helm history my-app

# 检查 Pod 状态
kubectl get pods -n <namespace>

# 查看生成的资源差异
helm get manifest my-app | kubectl diff -f -

helm list - 列出已部署的 Releases

命令简介

helm list 是 Helm 的基础查询命令,用于查看集群中已安装的 Releases。该命令显示 Release 名称、状态、版本等关键信息,是日常运维中最常用的命令之一。

语法格式

bash
helm list [flags]

常用选项

选项描述示例
--all显示所有 Releases(包括失败/已删除的)helm list --all
--all-namespaces查看所有命名空间的 Releaseshelm list --all-namespaces
--namespace指定命名空间查询helm list --namespace prod
--output指定输出格式(json/yaml/table)helm list --output json
--filter按名称过滤 Releaseshelm list --filter '^web-'
--date按日期格式显示(默认 RFC3339)helm list --date "2006-01-02"
--reverse反向排序(默认按安装时间升序)helm list --reverse
--max限制显示数量helm list --max 10
--deployed只显示已部署的 Releaseshelm list --deployed
--failed只显示失败的 Releaseshelm list --failed
--pending只显示待处理的 Releaseshelm list --pending

经典案例

bash
# 查看当前命名空间的 Releases
helm list

# 查看所有命名空间的 Releases(表格格式)
helm list --all-namespaces

# 查看 prod 命名空间的 Releases(JSON 格式)
helm list --namespace prod --output json

# 过滤名称包含 "api" 的 Releases
helm list --filter 'api'

# 查看最近 5 个失败的 Releases
helm list --failed --max 5 --reverse

# 查看所有命名空间已部署的 Releases 并按时间倒序
helm list --all-namespaces --deployed --reverse

# 生成 JSON 格式输出并用 jq 处理
helm list --output json | jq '.[] | select(.status == "deployed")'

输出字段说明

字段描述
NAMERelease 名称
NAMESPACE所在命名空间
REVISION修订版本号
UPDATED最后更新时间
STATUS当前状态(deployed/failed/pending等)
CHARTChart 名称及版本
APP VERSION应用版本

注意事项

  1. 权限要求:需要集群读取权限
  2. 状态说明
    • deployed: 成功部署
    • failed: 部署失败
    • pending: 安装/升级中
    • uninstalled: 已卸载但保留记录
  3. 历史记录:默认只保留 256 条历史,可通过 helm history 查看详情
  4. 性能优化:在大规模集群中使用 --max 限制查询数量
  5. 时间格式:使用 --date 可自定义时间显示格式

helm status - 查看 Release 的详细状态

命令简介

helm status 是 Helm 的重要诊断命令,用于查看已部署 Release 的详细状态信息。该命令提供 Release 的配置、资源状态和部署历史等关键信息,是故障排查和日常运维的核心工具。

语法格式

bash
helm status RELEASE_NAME [flags]

基本参数

参数描述必需示例
RELEASE_NAME要查询的 Release 名称my-app

常用选项

选项描述示例
--output指定输出格式(json/yaml/table)--output json
--revision查看特定修订版本的状态--revision 3
--show-desc显示 Release 描述信息--show-desc
--namespace指定命名空间--namespace prod

经典案例

bash
# 查看基本状态信息
helm status my-app

# 获取 JSON 格式的详细状态
helm status my-app --output json

# 查看历史修订版本的状态(如回滚前检查)
helm status my-app --revision 2

# 跨命名空间查询
helm status my-app --namespace staging

# 检查未就绪的资源
helm status my-app | grep -A 5 "NOT READY"

# 获取 Service 访问 URL
helm status my-app | grep -A 3 "URL"

# 结合 kubectl 诊断
helm status my-app --output json | jq '.info.status.resources' | kubectl explain

输出内容详解

  1. 基本信息

    • Release 名称和命名空间
    • 当前状态(deployed/failed/pending)
    • Chart 版本和应用版本
    • 最后更新时间
  2. 资源配置

    • 生成的 Kubernetes 资源列表
    • 资源状态(Ready/Not Ready)
  3. 值配置

    • 当前生效的 values 配置
    • 用户自定义的 set 参数
  4. 附加信息

    • NOTES.txt 内容(如有)
    • 相关 Service 的访问端点

注意事项

  1. 权限要求:需要集群读取权限
  2. 资源状态延迟:新建 Release 可能需要等待才能显示完整状态
  3. 敏感信息:输出中可能包含密码等敏感信息(使用 --output json | jq 过滤)
  4. 历史版本:默认显示当前版本,使用 --revision 查看历史版本
  5. 状态解释
    • pending-install/pending-upgrade:操作进行中
    • failed:检查 helm get hooks 和事件日志

helm history - 查看 Release 的修订历史

命令简介

helm history 是 Helm 的版本控制命令,用于查看 Release 的完整修订历史记录。该命令显示每次安装、升级、回滚或删除操作的详细信息,是版本管理和故障恢复的重要工具。

语法格式

bash
helm history RELEASE_NAME [flags]

基本参数

参数描述必需示例
RELEASE_NAME要查询的 Release 名称my-app

常用选项

选项描述示例
--max限制显示的修订版本数量--max 10
--output指定输出格式(json/table)--output json
--namespace指定命名空间--namespace prod
--show-desc显示修订版本的描述信息--show-desc

经典案例

bash
# 查看完整的修订历史
helm history my-app

# 查看最近5次修订(表格格式)
helm history my-app --max 5

# 获取JSON格式的历史记录
helm history my-app --output json

# 查看特定命名空间的修订历史
helm history my-app --namespace staging

# 查找最后一次成功的部署
helm history my-app | grep deployed | tail -1

# 比较两个修订版本的values差异
diff <(helm get values my-app --revision 3) <(helm get values my-app --revision 5)

# 导出历史记录到文件
helm history my-app --output json > release-history.json

输出字段说明

字段描述
REVISION修订版本号(从1开始递增)
UPDATED操作时间戳
STATUS操作状态(deployed/failed/superseded)
CHART使用的Chart版本
APP VERSION应用版本
DESCRIPTION操作描述(安装/升级/回滚等)

状态类型说明

状态含义
deployed成功部署
failed部署失败
superseded被新版本替换
uninstalled已卸载

注意事项

  1. 历史保留:默认保留256条历史记录,可通过 helm.sh/history-max 注解修改
  2. 敏感信息:历史记录中可能包含values配置的敏感信息
  3. 时间格式:使用 helm get metadata 可查看原始时间戳
  4. 故障排查
    • 检查 failed 状态的修订版本
    • 对比相邻版本的变更(helm get values --revision N
  5. 性能影响:大量历史记录会影响 helm list 性能

helm rollback - 回滚 Release 到历史版本

命令简介

helm rollback 是 Helm 的重要运维命令,用于将指定的 Release 回退到之前的某个修订版本。该命令会创建一个新的修订版本来记录回滚操作,是故障恢复和版本管理的核心工具。

语法格式

bash
helm rollback RELEASE_NAME REVISION [flags]

基本参数

参数描述必需示例
RELEASE_NAME要回滚的 Release 名称my-app
REVISION目标修订版本号2

常用选项

选项描述示例
--dry-run模拟回滚操作(不实际执行)--dry-run
--no-hooks跳过 hook 的执行--no-hooks
--wait等待回滚完成--wait
--timeout设置等待超时时间--timeout 5m
--cleanup-on-fail失败时删除新创建的资源--cleanup-on-fail
--history-max限制保留的修订历史数量--history-max 10
--recreate-pods重新创建 Pod(Deployment 等资源)--recreate-pods

经典案例

bash
# 基本回滚到修订版本 3
helm rollback my-app 3

# 回滚并等待完成
helm rollback my-app 2 --wait --timeout 5m

# 模拟回滚操作
helm rollback --dry-run my-app 1

# 回滚并重新创建 Pod
helm rollback my-app 4 --recreate-pods

# 回滚并限制历史记录数量
helm rollback my-app 5 --history-max 5

# 回滚到上一个正常版本
LAST_GOOD_REV=$(helm history my-app | grep deployed | tail -1 | awk '{print $1}')
helm rollback my-app $LAST_GOOD_REV --wait

# 回滚后验证
helm status my-app
kubectl get pods -n <namespace>

回滚流程

  1. 检查目标修订版本是否存在
  2. 获取目标版本的 Chart 和 values
  3. 执行回滚前 hooks(除非使用 --no-hooks
  4. 应用目标版本的配置
  5. 创建新的修订记录
  6. 执行回滚后 hooks(除非使用 --no-hooks

注意事项

  1. 版本确认:回滚前先用 helm history 确认可用版本
  2. 状态检查:回滚后使用 helm status 验证状态
  3. 生产建议
    • 先使用 --dry-run 测试
    • 配合 --wait--timeout 确保完成
    • 考虑使用 --recreate-pods 解决配置缓存问题
  4. 数据风险
    • 不会自动回滚数据库等有状态数据
    • PVC 等资源默认会保留
  5. 记录保留:回滚操作会创建新的修订记录

helm uninstall - 卸载 Release 及相关资源

命令简介

helm uninstall 是 Helm 的核心管理命令,用于从 Kubernetes 集群中彻底移除指定的 Release 及其创建的资源。该命令会删除 Release 的部署记录,并根据策略清理相关 Kubernetes 资源。

语法格式

bash
helm uninstall RELEASE_NAME [flags]

基本参数

参数描述必需示例
RELEASE_NAME要卸载的 Release 名称my-app

常用选项

选项描述示例
--namespace指定命名空间--namespace staging
--dry-run模拟卸载(不实际执行)--dry-run
--no-hooks跳过 hook 的执行--no-hooks
--keep-history保留发布历史记录--keep-history
--wait等待资源完全删除--wait
--timeout设置等待超时时间--timeout 5m
--cascade删除策略(background/foreground/orphan)--cascade foreground

经典案例

bash
# 基本卸载(默认使用后台级联删除)
helm uninstall my-app

# 卸载并等待资源删除完成
helm uninstall my-app --wait --timeout 3m

# 卸载但保留历史记录
helm uninstall my-app --keep-history

# 跨命名空间卸载
helm uninstall my-app --namespace production

# 模拟卸载并显示将被删除的资源
helm uninstall --dry-run my-app

# 批量卸载所有测试环境的 Release
helm list -n test --short | xargs -I {} helm uninstall {} -n test

# 卸载后清理残留的 PVC
helm uninstall my-db && kubectl delete pvc -l app=mysql

卸载策略说明

  1. 资源保留规则

    • PVC 默认保留(需手动删除)
    • 通过 hook 创建的资源默认保留
    • 使用 annotation "helm.sh/resource-policy": keep 的资源会保留
  2. 级联删除选项

    • background(默认):立即返回,后台删除
    • foreground:等待依赖资源先删除
    • orphan:只删除主资源,保留依赖项

注意事项

  1. 不可逆操作:卸载后只能通过重新安装恢复
  2. 生产环境建议
    • 先执行 --dry-run 确认删除范围
    • 使用 --wait 确保关键资源已删除
    • 重要数据卷应提前备份
  3. 资源残留检查
    bash
    # 检查残留的 PVC
    kubectl get pvc -n <namespace>
    
    # 检查 hook 资源
    kubectl get all -l app.kubernetes.io/managed-by=Helm -n <namespace>
  4. 历史记录
    • 默认删除所有修订历史
    • --keep-history 会保留历史供审计

helm template - 渲染 Chart 模板而不安装

命令简介

helm template 是 Helm 的本地渲染命令,用于在本地生成 Kubernetes 清单文件而不实际安装到集群。该命令非常适合 CI/CD 流水线、调试模板和验证 Chart 输出。

语法格式

bash
helm template [NAME] [CHART] [flags]

基本参数

参数描述必需示例
NAME发布名称(用于模板中的引用)my-release
CHARTChart 路径/名称./mychartbitnami/nginx

核心选项

选项描述示例
--output-dir将渲染结果输出到目录--output-dir ./manifests
--values指定 values 文件--values prod-values.yaml
--set覆盖 values 配置--set replicaCount=3
--show-only只渲染指定模板文件--show-only templates/deployment.yaml
--validate验证生成的 YAML--validate
--api-versions指定 Kubernetes API 版本--api-versions v1
--kube-version指定 Kubernetes 版本--kube-version 1.23
--skip-tests跳过测试模板--skip-tests
--debug启用调试输出--debug

经典案例

bash
# 基本模板渲染(输出到 stdout)
helm template my-release ./mychart

# 使用自定义 values 文件
helm template my-release bitnami/nginx -f values.yaml

# 输出到指定目录
helm template my-release ./mychart --output-dir ./rendered-manifests

# 只渲染 Deployment 并验证
helm template my-release ./mychart \
  --show-only templates/deployment.yaml \
  --validate

# 模拟特定 K8s 版本环境
helm template my-release ./mychart \
  --kube-version 1.25 \
  --api-versions "apps/v1"

高级用法

  1. 多 values 文件合并
bash
helm template my-release ./mychart \
  -f base-values.yaml \
  -f env/prod.yaml \
  -f secrets/credentials.yaml
  1. 生成 Kustomize 输入
bash
helm template my-release ./mychart \
  --output-dir ./kustomize/base \
  --include-crds
  1. 调试特定值
bash
helm template my-release ./mychart \
  --set debug.enabled=true \
  --debug

注意事项

  1. 离线操作:完全在本地执行,不需要连接 Kubernetes 集群
  2. 验证限制--validate 只做基础 YAML 校验,不验证集群兼容性
  3. 敏感信息:渲染结果可能包含 values 中的敏感信息
  4. 版本差异:使用 --kube-version 避免集群版本不兼容问题
  5. CRD 处理:默认不包括 CRD,需使用 --include-crds

输出示例

yaml
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-release-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
...

helm get values - 查看 Release 的配置值

命令简介

helm get values 是 Helm 的重要诊断命令,用于查看已部署 Release 的当前配置参数。该命令可以显示通过 --set-f 指定的自定义值,以及与默认值的合并结果。

语法格式

bash
helm get values RELEASE_NAME [flags]

基本参数

参数描述必需示例
RELEASE_NAME要查询的 Release 名称my-app

常用选项

选项描述示例
--all显示所有值(包括默认值)--all
--revision查看历史修订版本的 values--revision 3
--output输出格式(json/yaml/table)--output json
--namespace指定命名空间--namespace prod

经典案例

bash
# 查看当前生效的自定义值(YAML 格式)
helm get values my-app

# 查看包括默认值的完整配置
helm get values my-app --all

# 获取特定修订版本的值(JSON 格式)
helm get values my-app --revision 2 --output json

# 比较两个版本的配置差异
diff <(helm get values my-app --revision 1) <(helm get values my-app --revision 3)

# 查找所有设置了 replicaCount 的 Release
for r in $(helm list -q); do 
  echo "$r: $(helm get values $r | grep replicaCount)"; 
done

# 生成 values 差异报告
helm get values my-app --revision 5 > v5.yaml
helm get values my-app --revision 8 > v8.yaml
diff -y v5.yaml v8.yaml | colordiff

输出内容说明

  1. 基础模式(默认):

    • 仅显示用户自定义的 values
    • 不包含 Chart 默认值
    • 格式与 values.yaml 文件相同
  2. --all 模式

    • 显示合并后的完整配置
    • 包含默认值和用户覆盖值
    • 敏感字段会原样显示(如密码)

注意事项

  1. 敏感信息:输出中可能包含密码等敏感数据
  2. 版本差异:不同修订版本可能有不同的 values
  3. 值合并规则
    • --set 参数值会覆盖 values.yaml
    • 数组会被完全替换而非合并
  4. 生产建议
    bash
    # 安全查看包含敏感字段的配置
    helm get values my-app | grep -v -E 'password|token|key'
    
    # 导出配置备份
    helm get values my-app > my-app-values-backup-$(date +%F).yaml

helm show values - 查看 Chart 的默认 values 文件内容

命令简介

helm show values 是 Helm 的 Chart 查看命令,用于显示 Chart 包中的默认 values.yaml 文件内容。该命令可以帮助用户了解 Chart 的可配置参数,是部署前准备和参数调优的重要工具。

语法格式

bash
helm show values [CHART] [flags]

基本参数

参数描述必需示例
CHARTChart 路径/名称/URL./mychartbitnami/nginx

常用选项

选项描述示例
--version指定 Chart 版本--version 13.2.1
--output输出格式(json/yaml)--output json
--repo指定仓库 URL--repo https://charts.bitnami.com/bitnami

经典案例

bash
# 查看本地 Chart 的默认 values
helm show values ./mychart

# 查看仓库 Chart 的默认 values
helm show values bitnami/nginx

# 查看特定版本的 values(JSON 格式)
helm show values bitnami/nginx --version 13.2.1 --output json

# 结合 grep 查找特定配置
helm show values bitnami/nginx | grep replicaCount

# 将默认 values 保存为文件
helm show values bitnami/nginx > nginx-values.yaml

# 比较本地修改与上游默认值的差异
diff <(helm show values bitnami/nginx) ./my-modified-values.yaml

# 生成 values 配置文档
helm show values bitnami/nginx | grep -E -v "^#|^$" > config-options.md

# 检查新版本的变化
diff <(helm show values bitnami/nginx --version 12.0.0) \
     <(helm show values bitnami/nginx --version 13.0.0)

输出内容说明

  1. 标准 YAML 格式

    • 包含所有可配置参数
    • 带有默认值和注释说明
    • 通常包含配置示例
  2. 典型结构

yaml
# 示例输出片段
replicaCount: 1
image:
  repository: nginx
  tag: latest
service:
  type: ClusterIP
  port: 80

注意事项

  1. helm get values 区别

    • show values:显示 Chart 默认值(未安装时查看)
    • get values:显示已安装 Release 的实际值
  2. 版本差异

    • 不同 Chart 版本可能有不同的可配置参数
    • 建议总是指定 --version 明确版本
  3. 使用建议

    bash
    # 1. 先查看默认值
    helm show values bitnami/nginx > values.yaml
    
    # 2. 复制并修改需要覆盖的值
    cp values.yaml custom-values.yaml
    vim custom-values.yaml
    
    # 3. 安装时使用自定义值
    helm install -f custom-values.yaml my-nginx bitnami/nginx

helm pull - 下载 Chart 到本地

命令简介

helm pull 是 Helm 的 Chart 下载命令,用于从仓库或 URL 获取 Chart 包到本地文件系统。该命令支持下载 .tgz 格式的 Chart 包,是离线部署和 Chart 分析的基础工具。

语法格式

bash
helm pull [REPOSITORY/]CHART [flags]

基本参数

参数描述必需示例
CHARTChart 名称或 URLbitnami/nginxhttps://example.com/charts/nginx-1.2.3.tgz

常用选项

选项描述示例
--version指定 Chart 版本--version 13.2.1
--destination指定下载目录--destination ./charts
--untar自动解压 Chart 包--untar
--verify验证签名--verify
--repo指定仓库 URL--repo https://charts.bitnami.com/bitnami
--username私有仓库用户名--username myuser
--password私有仓库密码--password mypass

经典案例

bash
# 从仓库下载 Chart 包
helm pull bitnami/nginx

# 下载特定版本到指定目录
helm pull bitnami/nginx --version 13.2.1 --destination ./my-charts

# 下载并自动解压
helm pull bitnami/nginx --untar --destination ./unpacked

# 从私有仓库下载
helm pull myrepo/internal-chart --username myuser --password mypass

# 从 URL 直接下载
helm pull https://charts.example.com/nginx-1.2.3.tgz

# 批量下载依赖 Charts
helm dependency update ./parent-chart && \
  find ./parent-chart/charts -name "*.tgz" -exec mv {} ./downloaded-charts \;

# 下载并检查内容
helm pull bitnami/nginx --untar && \
  tree nginx && \
  helm show values nginx

下载文件说明

  1. 标准输出

    • 默认下载到当前目录
    • 文件名格式:<chart名称>-<版本>.tgz
    • 示例:nginx-13.2.1.tgz
  2. 解压后内容

    bash
    nginx/
    ├── Chart.yaml
    ├── values.yaml
    ├── charts/
    ├── templates/
    └── README.md

注意事项

  1. 仓库配置

    • 需先通过 helm repo add 添加仓库
    • 或使用 --repo 临时指定
  2. 版本控制

    • 不指定 --version 时下载最新版
    • 可用版本通过 helm search repo 查看
  3. 离线使用

    bash
    # 下载后离线安装
    helm pull bitnami/nginx
    helm install my-nginx ./nginx-13.2.1.tgz
  4. 安全建议

    • 生产环境建议使用 --verify 验证签名
    • 敏感凭证建议通过环境变量传递

helm plugin - Helm 插件管理命令

命令简介

helm plugin 是 Helm 的插件管理系统,用于安装、管理和使用扩展功能。通过插件可以扩展 Helm 的核心功能,集成第三方工具和服务,是 Helm 生态的重要组成部分。

语法格式

bash
helm plugin [command] [flags]

子命令

子命令描述示例
install安装插件helm plugin install https://github.com/helm/helm-diff
list列出已安装插件helm plugin list
uninstall卸载插件helm plugin uninstall diff
update更新插件helm plugin update diff

常用 Flags

Flag描述示例
--version指定插件版本helm plugin install --version v3.1.3
--debug显示调试信息helm plugin install --debug

经典案例

bash
# 安装 helm-diff 插件(常用差异对比工具)
helm plugin install https://github.com/helm/helm-diff --version v3.6.0

# 列出所有已安装插件
helm plugin list

# 更新所有插件
helm plugin update --all

# 卸载不需要的插件
helm plugin uninstall diff

# 插件管理最佳实践
## 1. 备份插件列表
helm plugin list > helm-plugins-backup.txt

## 2. 批量安装常用插件
while read -r line; do
  name=$(echo $line | awk '{print $1}')
  url=$(echo $line | awk '{print $2}')
  helm plugin install $url --version $version
done < plugins-to-install.txt

常用插件推荐

  1. helm-diff:显示发布变更差异

    bash
    helm diff upgrade my-release ./mychart
  2. helm-secrets:管理加密的 values 文件

    bash
    helm secrets view secrets.yaml
  3. helm-git:从 Git 仓库安装 Charts

    bash
    helm git install https://github.com/helm/charts.git
  4. helm-s3:使用 S3 作为 Chart 仓库

    bash
    helm s3 init s3://my-bucket/charts

插件开发基础

  1. 插件结构

    myplugin/
    ├── plugin.yaml  # 元数据
    └── bin/         # 可执行文件
        └── helm-myplugin
  2. plugin.yaml 示例

    yaml
    name: "myplugin"
    version: "0.1.0"
    usage: "Description of my plugin"
    command: "$HELM_PLUGIN_DIR/bin/helm-myplugin"

注意事项

  1. 安装源:只从可信来源安装插件
  2. 权限管理:插件会继承 Helm 的权限
  3. 版本兼容:确保插件版本与 Helm 版本兼容
  4. 调试技巧
    bash
    # 查看插件环境变量
    helm env | grep PLUGIN