Helm 是一个 Kubernetes 应用的包管理工具,用来管理 chart——预先配置好的安装包资源,有点类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。

Helm chart 是用来封装 Kubernetes 原生应用程序的 YAML 文件,可以在你部署应用的时候自定义应用程序的一些 metadata,便与应用程序的分发。

Helm 和 chart 的主要作用是:

  • 应用程序封装
  • 版本管理
  • 依赖检查
  • 便于应用程序分发
Helm 架构图(来自 IBM Developer Blog)
Helm 架构图

Helm 可以安装本地或者远程的 chart,当 chart 安装到 Kubernetes 中后就会创建一个 release,每次更新该 chart 的配置并执行 helm upgrade, release 的版本数就会加 1。同一个 chart 可以部署多次。

安装 Helm

wget https://get.helm.sh/helm-v3.4.0-rc.1-linux-amd64.tar.gz
tar -zxvf helm-v3.4.0-rc.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

验证版本

helm version

Chart 说明

chart目录结构

mychart
├── Chart.yaml # 必须:一个包含chart的名称、版本和启用条件信息等的YAML文件
├── charts # 该目录保存其他依赖的 chart(子 chart)
├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
│ ├── NOTES.txt # 用户运行 helm install 时候的提示信息
│ ├── _helpers.tpl # 用于创建模板时的帮助类
│ ├── deployment.yaml # Kubernetes deployment 配置
│ ├── ingress.yaml # Kubernetes ingress 配置
│ ├── service.yaml # Kubernetes service 配置
│ ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖

以上仅为 helm 为我们自动创建的目录结构,我们还可以在 templates 目录加其他 Kubernetes 对象的配置,比如 ConfigMap、DaemonSet 等。

使用 Helm

Helm 常用命令如下:

helm create:在本地创建新的 chart;

helm dependency:管理 chart 依赖;

helm intall:安装 chart;

helm lint:检查 chart 配置是否有误;

helm list:列出所有 release;

helm package:打包本地 chart;

helm repo:列出、增加、更新、删除 chart 仓库;

helm rollback:回滚 release 到历史版本;

helm pull:拉取远程 chart 到本地;

helm search:使用关键词搜索 chart;

helm uninstall:卸载 release;

helm upgrade:升级 release;

安装chart

安装本地 chart
helm install -f myvalues.yaml myredis ./redis
指定变量
helm install --set name=prod myredis ./redis
指定变量的值为 string 类型
helm install --set-string long_int=1234567890 myredis ./redis
指定引用的文件地址
helm install --set-file my_script=dothings.sh myredis ./redis
同时指定多个变量
helm install --set foo=bar --set foo=newbar myredis ./redis

myvalues.yaml:自定义变量配置文件;
myredis:release 名称;
./redis:本地的 chart 目录