Kubernetes-Helm包管理器
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管理仓库索引。
工作流程
- Chart 准备:开发者创建或从仓库获取 Chart,定制
values.yaml。 - 安装/升级:
- Helm 客户端合并 Chart 模板与配置,生成 Kubernetes 资源清单。
- 直接通过 kubeconfig 向 API 服务器提交资源请求。
- 状态管理:
- Release 状态存储在 Kubernetes Secrets 中。
- 支持实时查询(
helm status)和版本对比。
Helm 安装
二进制安装
# 下载对应架构的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使用脚本安装
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
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 helmRHEL(dnf/yum)
dnf -y install helm使用 pkg (FreeBSD)
pkg install helm源码编译
# 您必须有可用的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 应用模板。
语法格式
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 |
经典案例
# 搜索所有包含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注意事项
- 使用前需要确保已添加远程仓库(如
helm repo add bitnami https://charts.bitnami.com/bitnami) helm search hub需要访问网络,会搜索Artifact Hub上的公共charts- 搜索结果中的APP VERSION表示打包的应用版本,CHART VERSION表示chart本身的版本
- 对于生产环境,建议明确指定chart版本而不是使用最新版
helm repo - 仓库管理
命令简介
helm repo 是 Helm 包管理工具的子命令,用于管理 Helm 仓库(Chart 仓库)。通过该命令可以添加、删除、更新和列出 Helm 仓库,这些仓库包含了可供安装的 Helm Charts。
语法格式
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-file | CA证书文件路径 | 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 |
经典案例
# 添加 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注意事项
- 网络连接:
helm repo update需要网络连接来获取最新的 Chart 索引。 - 仓库认证:某些私有仓库可能需要认证,可以通过
--username和--password参数提供凭据。 - 缓存问题:Helm 会缓存仓库索引,如果遇到问题,可以尝试删除
~/.cache/helm目录后重新更新。 - 仓库格式:确保添加的仓库 URL 是正确的 Helm 仓库格式(通常以
index.yaml结尾)。 - 删除仓库:删除仓库不会删除已安装的 Charts,只会移除仓库的配置信息。
helm create - 创建Chart
命令简介
helm create 是 Helm 包管理工具的子命令,用于快速生成一个新的 Helm Chart 目录结构。该命令会创建一个包含所有必要文件和目录的标准 Helm Chart 模板,用户可以基于此模板进行自定义开发。
语法格式
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 |
经典案例
# 创建一个名为 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 # 忽略文件规则注意事项
- 命名规范:Chart 名称应遵循 DNS 命名规则(小写字母、数字和连字符)
- 版本控制:建议将生成的 Chart 纳入版本控制系统(如 Git)
- 模板定制:创建后需要根据实际需求修改 templates/ 下的模板文件
- 依赖管理:如需添加依赖,需编辑 Chart.yaml 中的 dependencies 部分
- 测试验证:创建后应使用
helm lint检查 Chart 格式,使用helm install --dry-run测试模板渲染
helm dependency - Chart 依赖管理命令
命令简介
helm dependency 是 Helm 的子命令,用于管理 Chart 的依赖关系。它允许你更新、构建和列出 Chart 的依赖项,这些依赖项通常定义在 Chart.yaml 文件的 dependencies 部分。
语法格式
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 |
经典案例
# 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工作流程
- 在 Chart.yaml 中定义依赖:
dependencies:
- name: mysql
version: "8.8.2"
repository: "https://charts.bitnami.com/bitnami"- 更新依赖:
helm dependency update- 这会生成:
charts/目录(包含下载的依赖)Chart.lock文件(锁定具体版本)
注意事项
- 依赖解析:Helm 会递归处理所有依赖关系
- 版本锁定:
Chart.lock确保团队使用相同版本的依赖 - 离线使用:构建后的
charts/目录可以打包用于离线安装 - 仓库配置:确保依赖的仓库已通过
helm repo add添加 - 清理依赖:删除
charts/目录和Chart.lock文件可以重置依赖状态
helm lint - Chart 语法和配置检查命令
命令简介
helm lint 是 Helm 的重要验证工具,用于检查 Chart 的语法正确性、文件结构和配置问题。它会验证 Chart 是否符合最佳实践,帮助开发者在部署前发现潜在问题。
语法格式
helm lint PATH [flags]选项
| 选项 | 描述 | 示例 |
|---|---|---|
--strict | 启用严格检查模式 | helm lint --strict ./mychart |
--quiet | 只显示错误信息 | helm lint --quiet ./mychart |
--with-subcharts | 同时检查子 Chart | helm lint --with-subcharts ./mychart |
--kube-version | 指定目标 Kubernetes 版本 | helm lint --kube-version 1.22 ./mychart |
--debug | 显示调试信息 | helm lint --debug ./mychart |
经典案例
# 基本检查
helm lint ./mychart
# 严格模式检查(包含警告)
helm lint --strict ./mychart
# 检查包含子 Chart
helm lint --with-subcharts ./mychart
# 针对特定 K8s 版本检查
helm lint --kube-version 1.24 ./mychart检查内容
文件结构验证:
- 必需的 Chart.yaml 文件
- 正确的 templates/ 目录结构
- 有效的 .helmignore 文件
模板语法检查:
- 模板变量引用是否正确
- 函数调用是否有效
- 控制结构是否完整
值文件验证:
- values.yaml 格式是否正确
- 默认值是否合理
Kubernetes 资源验证:
- API 版本兼容性
- 必需字段是否设置
输出示例
[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"注意事项
- 开发阶段:建议在每次修改后都运行 lint 检查
- CI/CD 集成:应在 CI 流水线中加入 lint 检查步骤
- 错误分级:注意区分 ERROR(必须修复)和 WARNING(建议修复)
- 版本兼容:使用 --kube-version 确保与目标集群版本兼容
- 子 Chart 检查:复杂项目应启用 --with-subcharts 选项
helm package - Chart 打包命令
命令简介
helm package 是 Helm 的核心命令,用于将 Chart 目录打包成可发布的 .tgz 归档文件。该命令会验证 Chart 内容并生成一个版本化的打包文件,便于分发和部署。
语法格式
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 |
经典案例
# 基本打包(生成 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打包流程
- 读取并验证 Chart.yaml
- 检查依赖关系(如果使用 --dependency-update)
- 生成临时目录并复制必要文件
- 创建 .tgz 压缩包
- (可选)使用 GPG 签名
- 输出打包文件到目标目录
输出文件命名规则
<chart名称>-<版本号>.tgz
例如:redis-cluster-1.2.3.tgz
注意事项
- 版本控制:打包前确保 Chart.yaml 中的 version 字段已更新
- 依赖管理:建议使用 --dependency-update 确保依赖最新
- 签名安全:生产环境建议启用 --sign 选项
- 目录结构:Chart 必须符合标准目录结构
- 文件包含:.helmignore 文件会影响打包内容
- CI/CD 集成:适合在发布流水线中自动执行
验证打包结果
# 查看打包内容
tar -ztvf mychart-0.1.0.tgz
# 验证签名
helm verify mychart-0.1.0.tgzhelm install - 部署 Chart 到 Kubernetes 集群
命令简介
helm install 是 Helm 最核心的命令,用于将打包好的 Chart 部署到 Kubernetes 集群。该命令会读取 Chart 定义,渲染 Kubernetes 资源模板,并将这些资源提交到集群。
语法格式
helm install [NAME] [CHART] [flags]基本参数
| 参数 | 描述 | 必需 | 示例 |
|---|---|---|---|
NAME | 发布名称 | 是 | my-release |
CHART | Chart 路径/名称 | 是 | ./mychart 或 bitnami/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 |
经典案例
# 从仓库安装 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安装流程
- 检查 Chart 依赖
- 渲染模板文件
- 验证 Kubernetes 清单
- 提交到 Kubernetes API
- 记录发布信息
注意事项
- 命名唯一性:同一命名空间内发布名称必须唯一
- values 优先级:命令行
--set会覆盖 values 文件中的设置 - 生产环境建议:
- 使用
--atomic和--wait选项 - 明确设置
--timeout - 通过
--dry-run预先测试
- 使用
- 故障排查:
- 使用
helm get manifest RELEASE_NAME查看实际部署的资源 - 使用
helm status RELEASE_NAME查看发布状态
- 使用
- 版本控制:建议明确指定 Chart 版本(
--version)
安装后验证
# 查看发布状态
helm status my-release
# 列出所有发布
helm list
# 查看生成的资源
kubectl get all -n <namespace>通过 helm install --help 可以获取更详细的帮助信息。
helm upgrade - 更新已部署的 Release
命令简介
helm upgrade 是 Helm 的核心命令之一,用于更新已部署的 Release 到新版本或修改其配置。该命令允许您无缝升级应用程序,同时保持现有 Kubernetes 资源的完整性。
语法格式
helm upgrade [RELEASE] [CHART] [flags]基本参数
| 参数 | 描述 | 必需 | 示例 |
|---|---|---|---|
RELEASE | 要升级的 Release 名称 | 是 | my-app |
CHART | Chart 路径/名称 | 是 | ./mychart 或 bitnami/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 |
经典案例
# 基本升级
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升级策略
- 滚动更新:默认策略,逐步替换 Pod
- 重新创建:设置
strategy.type: Recreate - 蓝绿部署:通过 labels 和 selectors 实现
注意事项
- 兼容性检查:升级前检查 Chart 的变更日志
- values 继承:默认会保留上次安装时的 values
- 资源保留:PVC 等资源默认不会被删除
- 回滚准备:建议先执行
helm rollback测试 - 生产环境建议:
- 使用
--atomic和--wait选项 - 在非生产环境先测试升级
- 考虑使用
--dry-run预先检查
- 使用
升级后验证
# 检查发布状态
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 名称、状态、版本等关键信息,是日常运维中最常用的命令之一。
语法格式
helm list [flags]常用选项
| 选项 | 描述 | 示例 |
|---|---|---|
--all | 显示所有 Releases(包括失败/已删除的) | helm list --all |
--all-namespaces | 查看所有命名空间的 Releases | helm list --all-namespaces |
--namespace | 指定命名空间查询 | helm list --namespace prod |
--output | 指定输出格式(json/yaml/table) | helm list --output json |
--filter | 按名称过滤 Releases | helm list --filter '^web-' |
--date | 按日期格式显示(默认 RFC3339) | helm list --date "2006-01-02" |
--reverse | 反向排序(默认按安装时间升序) | helm list --reverse |
--max | 限制显示数量 | helm list --max 10 |
--deployed | 只显示已部署的 Releases | helm list --deployed |
--failed | 只显示失败的 Releases | helm list --failed |
--pending | 只显示待处理的 Releases | helm list --pending |
经典案例
# 查看当前命名空间的 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")'输出字段说明
| 字段 | 描述 |
|---|---|
| NAME | Release 名称 |
| NAMESPACE | 所在命名空间 |
| REVISION | 修订版本号 |
| UPDATED | 最后更新时间 |
| STATUS | 当前状态(deployed/failed/pending等) |
| CHART | Chart 名称及版本 |
| APP VERSION | 应用版本 |
注意事项
- 权限要求:需要集群读取权限
- 状态说明:
deployed: 成功部署failed: 部署失败pending: 安装/升级中uninstalled: 已卸载但保留记录
- 历史记录:默认只保留 256 条历史,可通过
helm history查看详情 - 性能优化:在大规模集群中使用
--max限制查询数量 - 时间格式:使用
--date可自定义时间显示格式
helm status - 查看 Release 的详细状态
命令简介
helm status 是 Helm 的重要诊断命令,用于查看已部署 Release 的详细状态信息。该命令提供 Release 的配置、资源状态和部署历史等关键信息,是故障排查和日常运维的核心工具。
语法格式
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 |
经典案例
# 查看基本状态信息
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输出内容详解
基本信息:
- Release 名称和命名空间
- 当前状态(deployed/failed/pending)
- Chart 版本和应用版本
- 最后更新时间
资源配置:
- 生成的 Kubernetes 资源列表
- 资源状态(Ready/Not Ready)
值配置:
- 当前生效的 values 配置
- 用户自定义的 set 参数
附加信息:
- NOTES.txt 内容(如有)
- 相关 Service 的访问端点
注意事项
- 权限要求:需要集群读取权限
- 资源状态延迟:新建 Release 可能需要等待才能显示完整状态
- 敏感信息:输出中可能包含密码等敏感信息(使用
--output json | jq过滤) - 历史版本:默认显示当前版本,使用
--revision查看历史版本 - 状态解释:
pending-install/pending-upgrade:操作进行中failed:检查helm get hooks和事件日志
helm history - 查看 Release 的修订历史
命令简介
helm history 是 Helm 的版本控制命令,用于查看 Release 的完整修订历史记录。该命令显示每次安装、升级、回滚或删除操作的详细信息,是版本管理和故障恢复的重要工具。
语法格式
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 |
经典案例
# 查看完整的修订历史
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 | 已卸载 |
注意事项
- 历史保留:默认保留256条历史记录,可通过
helm.sh/history-max注解修改 - 敏感信息:历史记录中可能包含values配置的敏感信息
- 时间格式:使用
helm get metadata可查看原始时间戳 - 故障排查:
- 检查
failed状态的修订版本 - 对比相邻版本的变更(
helm get values --revision N)
- 检查
- 性能影响:大量历史记录会影响
helm list性能
helm rollback - 回滚 Release 到历史版本
命令简介
helm rollback 是 Helm 的重要运维命令,用于将指定的 Release 回退到之前的某个修订版本。该命令会创建一个新的修订版本来记录回滚操作,是故障恢复和版本管理的核心工具。
语法格式
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 |
经典案例
# 基本回滚到修订版本 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>回滚流程
- 检查目标修订版本是否存在
- 获取目标版本的 Chart 和 values
- 执行回滚前 hooks(除非使用
--no-hooks) - 应用目标版本的配置
- 创建新的修订记录
- 执行回滚后 hooks(除非使用
--no-hooks)
注意事项
- 版本确认:回滚前先用
helm history确认可用版本 - 状态检查:回滚后使用
helm status验证状态 - 生产建议:
- 先使用
--dry-run测试 - 配合
--wait和--timeout确保完成 - 考虑使用
--recreate-pods解决配置缓存问题
- 先使用
- 数据风险:
- 不会自动回滚数据库等有状态数据
- PVC 等资源默认会保留
- 记录保留:回滚操作会创建新的修订记录
helm uninstall - 卸载 Release 及相关资源
命令简介
helm uninstall 是 Helm 的核心管理命令,用于从 Kubernetes 集群中彻底移除指定的 Release 及其创建的资源。该命令会删除 Release 的部署记录,并根据策略清理相关 Kubernetes 资源。
语法格式
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 |
经典案例
# 基本卸载(默认使用后台级联删除)
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卸载策略说明
资源保留规则:
- PVC 默认保留(需手动删除)
- 通过
hook创建的资源默认保留 - 使用
annotation "helm.sh/resource-policy": keep的资源会保留
级联删除选项:
background(默认):立即返回,后台删除foreground:等待依赖资源先删除orphan:只删除主资源,保留依赖项
注意事项
- 不可逆操作:卸载后只能通过重新安装恢复
- 生产环境建议:
- 先执行
--dry-run确认删除范围 - 使用
--wait确保关键资源已删除 - 重要数据卷应提前备份
- 先执行
- 资源残留检查:bash
# 检查残留的 PVC kubectl get pvc -n <namespace> # 检查 hook 资源 kubectl get all -l app.kubernetes.io/managed-by=Helm -n <namespace> - 历史记录:
- 默认删除所有修订历史
--keep-history会保留历史供审计
helm template - 渲染 Chart 模板而不安装
命令简介
helm template 是 Helm 的本地渲染命令,用于在本地生成 Kubernetes 清单文件而不实际安装到集群。该命令非常适合 CI/CD 流水线、调试模板和验证 Chart 输出。
语法格式
helm template [NAME] [CHART] [flags]基本参数
| 参数 | 描述 | 必需 | 示例 |
|---|---|---|---|
NAME | 发布名称(用于模板中的引用) | 否 | my-release |
CHART | Chart 路径/名称 | 是 | ./mychart 或 bitnami/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 |
经典案例
# 基本模板渲染(输出到 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"高级用法
- 多 values 文件合并:
helm template my-release ./mychart \
-f base-values.yaml \
-f env/prod.yaml \
-f secrets/credentials.yaml- 生成 Kustomize 输入:
helm template my-release ./mychart \
--output-dir ./kustomize/base \
--include-crds- 调试特定值:
helm template my-release ./mychart \
--set debug.enabled=true \
--debug注意事项
- 离线操作:完全在本地执行,不需要连接 Kubernetes 集群
- 验证限制:
--validate只做基础 YAML 校验,不验证集群兼容性 - 敏感信息:渲染结果可能包含 values 中的敏感信息
- 版本差异:使用
--kube-version避免集群版本不兼容问题 - CRD 处理:默认不包括 CRD,需使用
--include-crds
输出示例
# 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 指定的自定义值,以及与默认值的合并结果。
语法格式
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 |
经典案例
# 查看当前生效的自定义值(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输出内容说明
基础模式(默认):
- 仅显示用户自定义的 values
- 不包含 Chart 默认值
- 格式与 values.yaml 文件相同
--all 模式:
- 显示合并后的完整配置
- 包含默认值和用户覆盖值
- 敏感字段会原样显示(如密码)
注意事项
- 敏感信息:输出中可能包含密码等敏感数据
- 版本差异:不同修订版本可能有不同的 values
- 值合并规则:
--set参数值会覆盖 values.yaml- 数组会被完全替换而非合并
- 生产建议: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 的可配置参数,是部署前准备和参数调优的重要工具。
语法格式
helm show values [CHART] [flags]基本参数
| 参数 | 描述 | 必需 | 示例 |
|---|---|---|---|
CHART | Chart 路径/名称/URL | 是 | ./mychart 或 bitnami/nginx |
常用选项
| 选项 | 描述 | 示例 |
|---|---|---|
--version | 指定 Chart 版本 | --version 13.2.1 |
--output | 输出格式(json/yaml) | --output json |
--repo | 指定仓库 URL | --repo https://charts.bitnami.com/bitnami |
经典案例
# 查看本地 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)输出内容说明
标准 YAML 格式:
- 包含所有可配置参数
- 带有默认值和注释说明
- 通常包含配置示例
典型结构:
# 示例输出片段
replicaCount: 1
image:
repository: nginx
tag: latest
service:
type: ClusterIP
port: 80注意事项
与
helm get values区别:show values:显示 Chart 默认值(未安装时查看)get values:显示已安装 Release 的实际值
版本差异:
- 不同 Chart 版本可能有不同的可配置参数
- 建议总是指定
--version明确版本
使用建议:
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 分析的基础工具。
语法格式
helm pull [REPOSITORY/]CHART [flags]基本参数
| 参数 | 描述 | 必需 | 示例 |
|---|---|---|---|
CHART | Chart 名称或 URL | 是 | bitnami/nginx 或 https://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 |
经典案例
# 从仓库下载 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下载文件说明
标准输出:
- 默认下载到当前目录
- 文件名格式:
<chart名称>-<版本>.tgz - 示例:
nginx-13.2.1.tgz
解压后内容:
bashnginx/ ├── Chart.yaml ├── values.yaml ├── charts/ ├── templates/ └── README.md
注意事项
仓库配置:
- 需先通过
helm repo add添加仓库 - 或使用
--repo临时指定
- 需先通过
版本控制:
- 不指定
--version时下载最新版 - 可用版本通过
helm search repo查看
- 不指定
离线使用:
bash# 下载后离线安装 helm pull bitnami/nginx helm install my-nginx ./nginx-13.2.1.tgz安全建议:
- 生产环境建议使用
--verify验证签名 - 敏感凭证建议通过环境变量传递
- 生产环境建议使用
helm plugin - Helm 插件管理命令
命令简介
helm plugin 是 Helm 的插件管理系统,用于安装、管理和使用扩展功能。通过插件可以扩展 Helm 的核心功能,集成第三方工具和服务,是 Helm 生态的重要组成部分。
语法格式
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 |
经典案例
# 安装 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常用插件推荐
helm-diff:显示发布变更差异
bashhelm diff upgrade my-release ./mycharthelm-secrets:管理加密的 values 文件
bashhelm secrets view secrets.yamlhelm-git:从 Git 仓库安装 Charts
bashhelm git install https://github.com/helm/charts.githelm-s3:使用 S3 作为 Chart 仓库
bashhelm s3 init s3://my-bucket/charts
插件开发基础
插件结构:
myplugin/ ├── plugin.yaml # 元数据 └── bin/ # 可执行文件 └── helm-mypluginplugin.yaml 示例:
yamlname: "myplugin" version: "0.1.0" usage: "Description of my plugin" command: "$HELM_PLUGIN_DIR/bin/helm-myplugin"
注意事项
- 安装源:只从可信来源安装插件
- 权限管理:插件会继承 Helm 的权限
- 版本兼容:确保插件版本与 Helm 版本兼容
- 调试技巧:bash
# 查看插件环境变量 helm env | grep PLUGIN
