官方文档: Helm 文档
Helm 介绍
Helm 是 Kubernetes 的包管理,是一个由 CNCF 孵化和管理的项目,用于对需要再 k8s 上部署的复杂应用进行定义,安装和更新。Helm 以 Chart 的方式对应用软件进行描述,可以方便地创建,版本化,共享和发布复杂的应用软件。
三大概念
使用 Helm 会涉及以下几个术语:
Chart: 一个 Helm 包,其中包含了运行一个应用所需要的工具和资源定义,还可能包含 Kubernetes 集群中的服务定义,类似于 Homebrew 中的 formula,apt 中的 dpkg 或者 yum 中的 rpm 文件。
Release: 在 k8s 集群上运行的一个 Chart 实例。在同一个集群上,一个 Chart 可以安装多次。每一次安装都会创建一个新的 release。以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。
Repository: 是用来存放和共享 charts 的地方。
简单来说,Helm 的任务就是在仓库中查找需要的 Chart,然后将 Chart 以 Release 的形式安装到 K8S 集群中。
Helm 常用的命令
可以使用
helm --help
命令查看 Helm 的帮助信息1
2
3
4
5
6
7
8
9
10
11# helm --help
The Kubernetes package manager
Common actions for Helm:
- helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts
... 省略 N 行 ...Helm 常用的基础命令有:
- helm search: 查找一个包
- helm pull: 下载一个包
- helm create: 创建一个包
- helm install: 安装一个包
- helm status: 查看 release 状态
- helm get values: 查看 release 安装参数
- helm list: 查看已安装的 release
- helm upgrade: 更新 release
- helm uninstall: 删除 release
Helm 添加仓库
- 添加 bitnami 仓库:
1
helm repo add bitnami https://charts.bitnami.com/bitnami
- 添加 helm 官方仓库:
1
helm repo add stable https://charts.helm.sh/stable
Helm 安装 release
安装过程中有两种方式传递配置数据:
--values
(或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。--set
:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set
中的值会被合并到 --values
中,但是 --set
中的值优先级更高。在 --set
中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name>
来查看指定 release 中 --set
设置的值。也可以通过运行 helm upgrade
并指定 --reset-values
字段来清除 --set
中设置的值。
可以使用以下命令查看 chart 的可选配置选项
1
helm show values bitnami/wordpress
安以下是 Helm 安装 Chart 的示例:
- 先下载 chart,修改
values.yaml
文件后,执行以下命令安装,如: 安装 ingress-nginx 到 ingress-nginx 命名空间中
1
2# 直接进入解压的目录安装
helm install ingress-nginx -n ingress-nginx .注意后面的
.
不能省略,代表使用当前目录下的 values.yaml 文件渲染模板1
2# 或者使用以下方式安装
helm install ingress-nginx -n ingress-nginx /path/to/ingress-nginx- 直接在线安装,如下所示,可以使用 –set 参数覆盖 values.yaml 中的配置
1
2
3
4
5
6helm install kafka bitnami/kafka \
--set zookeeper.enabled=false \
--set replicaCount=3 \
--set externalZookeeper.servers=zookeeper \
--set persistence.enabled=false \
-n public-service使用这种方式安装的 chart,可以通过
helm get values
命令获取安装参数1
2
3
4
5
6
7
8
9# helm get values -n public-service kafka
USER-SUPPLIED VALUES:
externalZookeeper:
servers: zookeeper
persistence:
enabled: false
replicaCount: 3
zookeeper:
enabled: false- 使用 helm 安装本地的 chart 压缩包
1
helm install foo foo-0.1.1.tgz
- 使用完整的 URL 安装
1
helm install foo https://example.com/charts/foo-1.2.3.tgz
- 先下载 chart,修改
Helm 升级和回滚
helm upgrade
和 helm rollback
: 升级 release 和失败时恢复
可以使用 helm upgrade 命令对已安装的 chart 进行更新或修改,由于 Kubernetes 的 chart 可能会很大而且很复杂,Helm 会尝试执行最小侵入式升级。即它只会更新自上次发布以来发生了更改的内容。
例如: happy-panda 这个 release 使用相同的 chart 进行升级,但是使用了一个新的 YAML 文件
1
helm upgrade -f panda.yaml happy-panda bitnami/wordpress
假如在一次发布过程中,发生了不符合预期的事情,也很容易通过
helm rollback [RELEASE] [REVISION]
命令回滚到之前的发布版本。1
helm rollback happy-panda 1
上面这条命令将我们的 happy-panda 回滚到了它最初的版本。release 版本其实是一个增量修订(revision)。每当发生了一次安装、升级或回滚操作,revision 的值就会加 1。第一次 revision 的值永远是1。我们可以使用
helm history [RELEASE]
命令来查看一个特定 release 的修订版本号。
Helm 卸载 release
可以使用
helm uninstall
命令从集群中卸载一个 release,例如1
helm uninstall happy-panda
在上一个 Helm 版本中,当一个 release 被删除,会保留一条删除记录。而在 Helm 3 中,删除也会移除 release 的记录。如果你想保留删除记录,使用
helm uninstall --keep-history
。使用helm list --uninstalled
只会展示使用了--keep-history
删除的 release。使用
helm list --all
可以查看 Helm 所有指定了--keep-history
的 release 记录,包括失败或删除的条目()1
helm list --all
注意,因为现在默认会删除 release,所以你不再能够回滚一个已经被卸载的资源了。
Helm 管理 repo
Helm 3 不再附带一个默认的 chart 仓库。helm repo 提供了一组命令用于添加、列出和移除仓库。
使用
helm repo list
可以查看配置的仓库1
2
3
4
5
6# helm repo list
NAME URL
ingress-nginx https://kubernetes.github.io/ingress-nginx
bitnami https://charts.bitnami.com/bitnami
stable https://charts.helm.sh/stable
brigade https://brigadecore.github.io/charts使用
helm repo add
可以添加新的仓库1
helm repo add dev https://example.com/dev-charts
使用
helm repo update
命令可以更新仓库1
helm repo update
使用
helm repo remove
移除仓库1
helm repo remove brigade