Helm常用命令


Helm的三大概念

  • Chart: chart代表一个helm的包,这个包里会包含一切在k8s 上运行某个应用、工具、服务所需要的资源定义。你可以认为这个chart就是home brew的formula,或者apt的dpkg,再或者是yum的rpm文件。
  • Repository:资料库嘛,估计愿意看这篇文章的同学也熟,就是在远端存chart的地方。
  • Release:release代表一个正运行在k8s 上的chart实例,一个chart可以在集群上安装多次,每安装一次,便会产生一个release。比如一个MySQL chart,你要是想在你集群上跑俩MySQL ,你就安两遍,产生两个release。

明白了以上这三个概念,咱现在就可以这么理解helm的用途:helm可以往k8s 集群安装chart,每次安装完就会产生一个新的release。你要是想找新的chart装,就去helm的chart repository里搜。

找chart:helm search

helm 的搜索指令很好用,可以用来搜两种不同类型的源:

helm search hub:会去helm hub上搜一些其他大佬们共享出来的chart。

helm search repo:会搜那些你已经通过 helm repo add添加到本地helm client的repository,这个搜索完全在搜本地数据,无需联外网。

来,让我们来试试 helm search hub:

$ helm search hub wordpress
URL                                                 CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/bitnami/wordpress        7.6.7         5.2.4       Web publishing platform for building blogs and ...
https://hub.helm.sh/charts/presslabs/wordpress-...  v0.6.3        v0.6.3      Presslabs WordPress Operator Helm Chart
https://hub.helm.sh/charts/presslabs/wordpress-...  v0.7.1        v0.7.1      A Helm chart for deploying a WordPress site on ...

这个搜索返回了所有在 Helm Hub上的带WordPress的chart,不带filter的话helm search hub 会给你所有可用的 charts.

使用 helm search repo, 你可以找到那些你已经添加到本地的chart,比如

$ helm repo add brigade https://brigadecore.github.io/charts
"brigade" has been added to your repositories
$ helm search repo brigade
NAME                          CHART VERSION APP VERSION DESCRIPTION
brigade/brigade               1.3.2         v1.2.1      Brigade provides event-driven scripting of Kube...
brigade/brigade-github-app    0.4.1         v0.2.1      The Brigade GitHub App, an advanced gateway for...
brigade/brigade-github-oauth  0.2.0         v0.20.0     The legacy OAuth GitHub Gateway for Brigade
brigade/brigade-k8s-gateway   0.1.0                     A Helm chart for Kubernetes
brigade/brigade-project       1.0.0         v1.0.0      Create a Brigade project
brigade/kashti                0.4.0         v0.4.0      A Helm chart for Kubernetes

Helm search 使用了模糊匹配,所以打一半词儿也是可以搜的:

$ helm search repo kash
NAME            CHART VERSION APP VERSION DESCRIPTION
brigade/kashti  0.4.0         v0.4.0      A Helm chart for Kubernetes

搜索是发现包的方式,当你搜到想用的包,就用helm install来安装吧。

安装一个包: helm install

运行这个install时候,最少要传俩参数,你要定一个release name,以及你要装的chart是啥。

$ helm install happy-panda stable/mariadb
WARNING: This chart is deprecated
NAME: happy-panda
LAST DEPLOYED: Fri May  8 17:46:49 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
This Helm chart is deprecated

...

Services:

  echo Master: happy-panda-mariadb.default.svc.cluster.local:3306
  echo Slave:  happy-panda-mariadb-slave.default.svc.cluster.local:3306

Administrator credentials:

  Username: root
  Password : $(kubectl get secret --namespace default happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run happy-panda-mariadb-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.3.22-debian-10-r27 --namespace default --command -- bash

  2. To connect to master service (read/write):

      mysql -h happy-panda-mariadb.default.svc.cluster.local -uroot -p my_database

  3. To connect to slave service (read-only):

      mysql -h happy-panda-mariadb-slave.default.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'rootUser.password' parameter as shown below:

      ROOT_PASSWORD=$(kubectl get secret --namespace default happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
      helm upgrade happy-panda stable/mariadb --set rootUser.password=$ROOT_PASSWORD

现在,这个mariadb的chart被安好了,你应该看到了安装这个chart时也创建了一个新的release对象,release name是happy-panda。(如果你觉得自己是起名儿废,想让helm自动生成名字,那就别传名字参数了,加个 --generate-name 让helm自动生成名字。

安装时,helm client会打印一些有用的信息给你,比如创建了哪些资源,这个release目前状态是什么,是不是要有一些什么别的配置步骤。

helm不会等待所有资源都处于运行状态后才退出。很多chart可能都需要docker镜像,有些镜像体积很大,完全安装完可能要等很久。

使用helm status来查看release的状态,也可以看到配置信息。

$ helm status happy-panda                
NAME: happy-panda
LAST DEPLOYED: Fri May  8 17:46:49 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
This Helm chart is deprecated

...

Services:

  echo Master: happy-panda-mariadb.default.svc.cluster.local:3306
  echo Slave:  happy-panda-mariadb-slave.default.svc.cluster.local:3306

Administrator credentials:

  Username: root
  Password : $(kubectl get secret --namespace default happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run happy-panda-mariadb-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.3.22-debian-10-r27 --namespace default --command -- bash

  2. To connect to master service (read/write):

      mysql -h happy-panda-mariadb.default.svc.cluster.local -uroot -p my_database

  3. To connect to slave service (read-only):

      mysql -h happy-panda-mariadb-slave.default.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'rootUser.password' parameter as shown below:

      ROOT_PASSWORD=$(kubectl get secret --namespace default happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
      helm upgrade happy-panda stable/mariadb --set rootUser.password=$ROOT_PASSWORD

在安装前做一些自定义操作

前面的安装都是走默认配置,有时候你可能会想做些自定义配置。

使用helm show values查看这个chart都支持哪些可配置项

$ helm show values stable/mariadb
Fetched stable/mariadb-0.3.0.tgz to /Users/mattbutcher/Code/Go/src/helm.sh/helm/mariadb-0.3.0.tgz
## Bitnami MariaDB image version
## ref: https://hub.docker.com/r/bitnami/mariadb/tags/
##
## Default: none
imageTag: 10.1.14-r3

## Specify a imagePullPolicy
## Default to 'Always' if imageTag is 'latest', else set to 'IfNotPresent'
## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images
##
# imagePullPolicy:

## Specify password for root user
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run
##
# mariadbRootPassword:

## Create a database user
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run
##
# mariadbUser:
# mariadbPassword:

## Create a database
## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run
##
# mariadbDatabase:
# ...

以上这个方法会给Maria db创建一个叫user0 的用户,同时创建一个新db叫user0db ,并给user0赋予操作这个db的权限,除了这两个配置之外,其他配置依旧走默认值。

有两种方式在安装时传配置数据:

  • --values (or -f): 指定一个yaml文件,这个参数可以传递多个,写指令时,越靠右的拥有越高的优先级。
  • --set: 直接覆盖配置。

如果都用的话,set的值会被合并到value里,并且拥有更高优先级。

使用set复写的配置会被持久化到config map中,同时可以使用helm get values <release-name>获取那些通过set设置进来的值,想清除通过set进来的值可以在运行helm upgrade 时带上 --reset-values

--set 的格式与限制

--set 选项可以不指定参数,也可以指定多个name/value 对, 最简单的写法一般是: --set name=value. YAML的等价写法:

多个值用 , 分割。 所以 --set a=b,c=d yaml这里就变成了:

也有一些更复杂的形式,比如 --set outer.inner=value 会被识别成:

列表可用 {}包裹。 比如, --set name={a, b, c} 对应的是:

到了 Helm 2.5.0,可以使用数组索引的方式去访问列表元素。比如 --set servers[0].port=80 就代表:

多值可以这样设置。 --set servers[0].port=80,servers[0].host=example 代表:

servers:
  - port: 80
    host: example

有时你可能需要在 --set 里使用一些特殊字符。你可以用 \去做转义,比如 --set name=value1\,value2 的意思是:

类似的,你也可以给点儿做转义,这样写的 --set nodeSelector."kubernetes\.io/role"=master 会被理解成:

nodeSelector:
  kubernetes.io/role: master

深层嵌套的结构如果用 --set写起来可能会很复杂,所以Chart的编写者在设计变量时也要考虑其他使用者在使用 --set 进行赋值时书写的复杂度。

其他的安装方法

helm install 可以从多种源进行安装:

  • Chart 的 repository (如上所述)
  • 本地的Chart archive (helm install foo foo-0.1.1.tgz)
  • 一个未打包的Chart 路径 (helm install foo path/to/foo)
  • 一个完整的 URL (helm install foo https://example.com/charts/foo-1.2.3.tgz)


adouk 2023年1月13日 09:25 收藏文档