Helm 核心概念
在深入了解 Helm 命令之前,我们先来熟悉几个关键概念:
- Chart: Helm 的包格式,可以理解为 K8s 应用的安装包。一个 Chart 包含了一组 Kubernetes YAML 文件模板、默认配置(values)以及 Chart 的元数据。
- Release: Chart 在 Kubernetes 集群中的一个部署实例。每次通过 Helm 安装或升级 Chart 都会创建一个新的 Release。
- Repository (仓库): Helm Chart 的存储仓库,类似于 Docker Hub。官方仓库有
https://charts.helm.sh/stable
,你也可以自定义仓库。 - Values: Chart 的配置参数,以
values.yaml
文件形式存在。你可以通过修改 values 文件来定制 Chart 的部署行为。 - Revision: Release 的版本号。每次 Release 升级时都会创建一个新的 Revision,用于回滚。
Helm 安装与基本配置
Helm 客户端安装: 根据你的操作系统,从 Helm 官方网站下载并安装 Helm 客户端。
添加 Helm 仓库: 使用
helm repo add
命令添加 Chart 仓库:helm repo add <repo_name> <repo_url> helm repo update # 更新本地仓库索引
例如:添加官方
bitnami
仓库:helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update
Helm 常用命令详解
1. 版本查看:
helm version
: 查看 Helm 客户端版本信息。
2. Chart 管理:
helm show chart <chart_path_or_repo>
: 显示 Chart 的元数据信息。helm show values <chart_path_or_repo>
: 显示 Chart 的默认values.yaml
文件内容。helm pull <repo_name>/<chart_name> --version <version>
: 下载指定版本的 Chart 包到本地。helm search repo <chart_name>
: 在仓库中搜索 Chart。helm repo list
: 列出已添加的 Helm 仓库。
3. Release 管理:
helm install <release_name> <chart_path_or_repo> [flags]
: 安装 Chart 到 Kubernetes 集群中,创建一个 Release。helm upgrade <release_name> <chart_path_or_repo> [flags]
: 升级已存在的 Release。helm uninstall <release_name>
: 卸载 Release。helm list
: 列出当前命名空间下的所有 Release。helm status <release_name>
: 查看 Release 的状态。helm history <release_name>
: 查看 Release 的历史版本记录。helm rollback <release_name> <revision> [flags]
: 回滚 Release 到指定的版本。helm get values <release_name>
: 查看 Release 当前生效的 values。helm get all <release_name>
: 查看 Release 的所有信息 (包括 values 和 manifest)。helm template <release_name> <chart_path_or_repo> [flags]
: 渲染 Chart 模板,查看生成的 Kubernetes YAML 文件。
4. 自定义 Values:
使用
-f
/--values
指定 values 文件:helm install my-release my-chart -f my-values.yaml helm upgrade my-release my-chart --values custom-values.yaml
使用多个 values 文件进行覆盖:
helm install my-release my-chart -f base.yaml -f dev.yaml helm upgrade my-release my-chart --values base.yaml --values staging.yaml
使用
--set
参数覆盖值:helm install my-release my-chart -f my-values.yaml --set replicaCount=3 helm upgrade my-release my-chart -f my-values.yaml --set service.type=LoadBalancer
使用
--set-string
参数覆盖字符串值:helm install my-release my-chart -f my-values.yaml --set-string image.tag=v2.0.0
使用
--set-file
参数覆盖文件类型的值:helm install my-release my-chart -f my-values.yaml --set-file config.json=path/to/config.json
5. 常用 flags:
--dry-run
: 模拟执行,不实际部署。常用于测试配置文件。--debug
: 输出详细的调试信息。-n
/--namespace
: 指定命名空间。--create-namespace
: 如果命名空间不存在,则创建。--force
: 强制执行操作,包括回滚和升级(慎用)。--version
: 指定 Chart 版本。--repo
: 指定 Chart 仓库。--recreate-pods
: 在回滚时重新创建 Pod.
Helm 高级技巧与最佳实践
- 充分利用
helm show values
: 在部署前,先查看 Chart 的默认values.yaml
文件,了解所有可配置的参数及其默认值。 - 保持
values.yaml
文件整洁: 将所有需要的自定义配置都放在 values 文件中,避免过度使用--set
参数。 - 合理使用多个 values 文件: 使用一个基础的 values 文件,然后根据不同环境,使用额外的 values 文件进行覆盖。
- 利用
--dry-run
模拟部署: 在实际部署前,使用--dry-run
标志,可以确保你的配置没有问题。 - 使用
helm template
查看最终的 Kubernetes YAML 文件: 使用helm template
命令渲染 Chart,查看最终的 YAML 文件,确认配置和资源是否符合预期。 - 理解 Helm Secret 的存储: Helm Release 的信息存储在 Kubernetes 的 ConfigMap 或 Secret 中。 这些 Secret 中的数据经过 Gzip 压缩和 Base64 编码,需要使用
base64 -d | gzip -d
命令解码。 - 使用
helm registry login
进行私有仓库认证: 如果你的 chart 是从私有仓库拉取的,你需要使用helm registry login
进行认证,并配置 registry config 文件,才能正常拉取 chart。 - 注意 Chart 的兼容性: 定期检查 Chart 的更新,确保你的 Chart 与 Kubernetes 版本兼容。
Helm 代理配置
当你的 Helm 客户端需要通过代理访问网络时,可以通过以下方式进行配置:
环境变量: 设置
HTTP_PROXY
和HTTPS_PROXY
环境变量。export HTTP_PROXY=http://<proxy_address>:<proxy_port> export HTTPS_PROXY=https://<proxy_address>:<proxy_port>
helm
命令行选项: 使用--proxy <proxy_url>
选项。helm upgrade my-release my-chart --registry-config --registry-config-path ~/.config/helm/registry/config.json --proxy http://<proxy_address>:<proxy_port> helm upgrade my-release my-chart --registry-config --registry-config-path ~/.config/helm/registry/config.json --proxy https://<proxy_address>:<proxy_port>
总结
Helm 是一个非常强大的 Kubernetes 应用管理工具。合理地使用 Helm,可以极大地简化 K8s 应用的部署和管理,让你从繁琐的 YAML 配置中解放出来。