Helm

Helm 是 Kubernetes 的包管理器,在 Kubernetes 下能够非常方便的完成应用的安装、卸载、升级等,是查看、分享和使用软件构建 Kubernetes 的最优方式,被广泛的使用。

背景

在 Kubernetes 环境中部署一个应用,需要 Kubernetes 原生资源 YAML 文件,如 Deployment、Service 或 Pod 等。对于一个应用而言,这些 Kubernetes 资源 YAML 文件都是十分分散的,不方便进行管理,通常直接通过 kubectl 命令来管理一个应用,你会发现这十分繁琐。

面对一个复杂的应用,会有很多类似的资源 YAML 文件,如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源 YAML 文件,且由于缺少对发布过的应用版本管理和控制,使 Kubernetes 上的应用维护和更新等面临诸多的挑战,而 Helm 的出现可以帮助我们解决这些问题:

  • 如何统一管理、配置和更新这些分散的 Kubernetes 的资源 YAML 文件
  • 如何分发和复用一套应用模板
  • 如何将应用的一系列资源 YAML 文件当做一个软件包管理

安装

通过脚本安装

1
2
3
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

通过apt安装

1
2
3
4
5
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

基本命令

添加chart存储库

1
helm repo add bitnami https://charts.bitnami.com/bitnami

查看helm安装的存储库

1
helm repo list

搜索chart存储库

1
helm search repo bitnami

–versions

默认只展示最新的chart,可以使用--versions参数查看所有版本:

1
helm search repo bitnami --versions

安装程序包

1
helm install mysite bitnami/drupal

安装时需要指定installation名和chart名。该代码将创建bitnami/drupal chart的一个实例,并将该实例命名为mysite。

–namespace

通过—namespace来指定chart安装的命名空间:

1
helm install mysite bitnami/drupal --namespace first

–values

通过--values标志,指向具有覆盖值的YAML文件:

1
helm install mysite bitnami/drupal --values values.yaml

–set

--set标志直接接收一个或多个值。他们不需要存储在YAML文件中:

1
helm install mysite bitnami/drupal --set drupalUsername=admin

列出安装

默认命名空间的安装:

1
helm list

列出所有命名空间的安装:

1
helm list --all-namespaces

刷新存储库中的软件包

1
helm repo update

升级安装

–version

升级到某个特定的版本

1
helm upgrade mysite bitnami/drupal --version 6.2.22

使用配置文件升级

1
helm upgrade mysite bitnami/drupal --values values.yaml

卸载安装

删除某个helm安装

1
helm uninstall mysite

提供—namespace标志来指定要从特定命名空间中删除安装:

1
helm uninstall mysite --namespace first

–dry-run试运行

helm install和helm upgrade等命令提供了一个名为--dry-run的标志。helm在命令行中输出渲染之后的模板,而不是发送到Kubernetes中。

1
helm install mysite bitnami/drupal --dry-run

helm template命令

--dry-run不同,template命令不联系远程的Kubernetes服务器,需要联系Kubernetes服务器的模板函数和指令返回默认数据。

1
helm template mysite bitnami/drupal

–generate-name和–name-template标志

使用–generate-name标志,不再需要提供名称作为helm install的第一个参数,helm根据chart名称和时间戳的组合生成名称。

1
helm install bitnami/wordpress --generate-name

使用--name-template将使用helm模板引擎生成一个名称。

1
helm install bitnami/wordpress --generate-name --name-template "foo-{{ randAlpha 9 | lower }}"

–create-namespace标志

--create-namespace标志向helm表明在安装前创建一个namespace

1
helm install drupal bitnami/drupal --namespace mynamespace --create-namespace

安装或升级

helm upgrade --install命令将安装一个尚不存在的版本,或者升级一个以该名称命名的版本。

1
helm update --install wordpress bitnami/wordpress

–wait和–atomic标志

使用--wait进行安装时,helm将一直跟踪下发到kubernetes中的对象,直到它们创建的pod被标记为由Kubernetes运行为止。使用--wait标志时可以使用--timeout

--atomic标志在安装失败时,将自动回滚到最后一个成功的版本,而不是将该版本标记为失败并退出。

–force和–cleanup-on-fail标志

--force标志将删除并重新创建Deployment,而不是修改Deployment。这迫使Kubernetes删除旧Pod并创建新的Pod。

--cleanup-on-fail标志,如果升级失败,将请求删除升级期间新创建的每个对象。

创建chart

1
helm create anvil

创建一个名为anvil的新chart作为当前目录的子目录。

可以通过以下命令来安装这个新创建的chart:

1
helm install myapp anvil

最后一个anvil参数是chart所在的目录。

打包chart

1
helm package anvil

anvil是anvil chart源所在位置的路径。

校验chart代码

1
helm lint anvil

更新chart的依赖项

在指定范围内解析依赖项的最新版本并检索它:

1
helm dependency update .