Helm版本支持策略如下链接,可根据k8s版本安装对应helm版本
https://helm.sh/zh/docs/topics/version_skew/
使用Apt (Debian/Ubuntu)
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
初始化
当已经安装好了Helm之后,需要添加一个chart 仓库。从 Artifact Hub中查找有效的Helm chart仓库,同样可以添加需要的chart 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
通过执行helm repo list可以获取添加的repo列表
root@k8smaster1:~# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
jumpserver https://jumpserver.github.io/helm-charts
安装Chart示例
可以通过helm install 命令安装chart。 Helm可以通过多种途径查找和安装chart, 但最简单的是安装官方的bitnami charts。
helm repo update # 确定我们可以拿到最新的charts列表
可以通过尝试安装验证
helm install bitnami/redis --generate-name
输出如下即正常
NAME: redis-1716445794
LAST DEPLOYED: Thu May 23 14:30:02 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 19.4.0
APP VERSION: 7.2.5
在上面的例子中,bitnami/redis这个chart被发布,名字是 redis-1716445794
可以通过执行 helm show chart bitnami/redis
命令简单的了解到这个chart的基本信息。 或者您可以执行 helm show all bitnami/redis
获取关于该chart的所有信息。
每当执行 helm install 的时候,都会创建一个新的发布版本。 所以一个chart在同一个集群里面可以被安装多次,每一个都可以被独立的管理和升级。
版本发布
通过Helm可以很容易看到哪些chart被发布
helm list
输出如下:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
redis-1716445794 default 1 2024-05-23 14:30:02.781226415 +0800 CST deployed redis-19.4.0 7.2.5
helm list (或 helm ls) 命令会列出所有可被部署的版本。
卸载一个版本
可以使用helm uninstall 命令卸载你的版本
helm uninstall redis-1716445794
release "redis-1716445794" uninstalled
该命令会从Kubernetes卸载redis-1716445794, 它将删除和该版本相关的所有相关资源(service、deployment、 pod等等
)甚至版本历史。
note:如果您在执行 helm uninstall 的时候提供 --keep-history
选项, Helm将会保存版本历史。 可以通过命令查看该版本的信息
root@k8smaster1:~# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
redis-1716446770 default 1 2024-05-23 14:46:19.244111696 +0800 CST deployed redis-19.4.0 7.2.5
root@k8smaster1:~# helm uninstall redis-1716446770 --keep-history
release "redis-1716446770" uninstalled
root@k8smaster1:~# helm history redis-1716446770
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu May 23 14:46:19 2024 uninstalled redis-19.4.0 7.2.5 Uninstallation complete
你可以使用 helm status
来追踪 release 的状态,或是重新读取配置信息:
$ helm status redis-1716448290
输出如下:
NAME: redis-1716448290
LAST DEPLOYED: Thu May 23 15:11:43 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 19.4.0
APP VERSION: 7.2.5
安装前自定义 chart
上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。
使用 helm show values
可以查看 chart 中的可配置选项
helm show values bitnami/redis
输出如下内容
root@k8smaster1:~# helm show values bitnami/redis
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0
## @section Global parameters
## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
##
## @param global.imageRegistry Global Docker image registry
## @param global.imagePullSecrets Global Docker registry secret names as an array
## @param global.storageClass Global StorageClass for Persistent Volume(s)
## @param global.redis.password Global Redis® password (overrides `auth.password`)
然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。
$ echo '{xxxxxxxxxx}' > values.yaml
$ helm install -f values.yaml bitnami/redis --generate-name
安装过程中有两种方式传递配置数据
:
- –values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
- –set:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在–set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values 来查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来清除 --set 中设置的值
拓展
set 的格式和限制
–set 选项使用0或多个 name/value 对。最简单的用法类似于:–set name=value
,等价于如下 YAML 格式:
name: value
多个值使用逗号分割,因此 --set a=b,c=d 的 YAML 表示是:
a: b
c: d
支持更复杂的表达式。例如,–set outer.inner=value 被转换成了:
outer:
inner: value
列表使用花括号({})来表示。例如,–set name={a, b, c} 被转换成了:
name:
- a
- b
- c
某些name/key可以设置为null或者空数组,例如 --set name=[],a=null 由
name:
- a
- b
- c
a: b
变成了
name: []
a: null
从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80 就变成了:
servers:
- port: 80
多个值也可以通过这种方式来设置。–set servers[0].port=80,servers[0].host=example 变成了:
servers:
- port: 80
host: example
如果需要在 --set 中使用特殊字符,你可以使用反斜线来进行转义;–set name=value1,value2 就变成了:
name: "value1,value2"
类似的,你也可以转义点序列(英文句号)。这可能会在 chart 使用 toYaml 函数来解析 annotations,labels,和 node selectors 时派上用场。--set nodeSelector."kubernetes\.io/role"=master
语法就变成了:
nodeSelector:
kubernetes.io/role: master
深层嵌套的数据结构可能会很难用 --set 表达。我们希望 Chart 的设计者们在设计 values.yaml 文件的格式时,考虑到 --set 的使用。