很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序
我们可以将Helm看作Kubernetes下的apt-get/yum
Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能
Helm 包含两个组件,分别是 helm 客户端 和 Tiller 服务器:
方式一:使用官方提供的脚本一键安装
$ 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
方式二:手动下载安装
#从官网下载最新版本的二进制安装包到本地:https://github.com/kubernetes/helm/releases
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz # 解压压缩包
# 把 helm 指令放到bin目录下
mv linux-amd64/helm /usr/local/bin/helm
helm help # 验证
root@k8s1:~# helm version
version.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"clean", GoVersion:"go1.15.11"}
注意:helm 3版本,没有Tiller,也就不用安装Tiller
若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误手动更换stable 存储库为阿里云的存储库
# 查看仓库
helm repo list
# 移除原先的仓库
helm repo remove stable
# 添加新的仓库地址
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 更新仓库
helm repo update
helm search hub
从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库helm search repo
从你添加(使用 helm repo add
)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。root@k8s1:~# helm search repo mongo
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/mongodb 0.4.27 3.7.1 NoSQL document-oriented database that stores JS...
aliyun/mongodb-replicaset 2.3.1 3.6 NoSQL document-oriented database that stores JS...
$ helm search hub wordpress
含义:
使用 helm install
命令来安装一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。
$ helm install mymongodb bitnami-azure/mongodb
现在mongodb
chart 已经安装。注意安装chart时创建了一个新的 release 对象。上述发布被命名为 mymongodb
。 (如果想让Helm生成一个名称,删除发布名称并使用--generate-name
。)
root@k8s1:~# helm status mymongodb
NAME: mymongodb
LAST DEPLOYED: Thu Feb 24 06:35:10 2022
NAMESPACE: onecloud
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mongodb
CHART VERSION: 11.0.3
APP VERSION: 4.4.12
** Please be patient while the chart is being deployed **
MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:
mymongodb.onecloud.svc.cluster.local
To get the root password run:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace onecloud mymongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
To connect to your database, create a MongoDB® client container:
kubectl run --namespace onecloud mymongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image marketplace.azurecr.io/bitnami/mongodb:4.4.12-debian-10-r12 --command -- bash
Then, run the following command:
mongo admin --host "mymongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
To connect to your database from outside the cluster execute the following commands:
kubectl port-forward --namespace onecloud svc/mymongodb 27017:27017 &
mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
查看我安装mongodb的密码:
方式一:
root@k8s1:~# echo $(kubectl get secret --namespace onecloud mymongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
方式二:
helm list -n [命名空间名称]
例如:
helm list -n default
不加命名空间就是helm进行安装的时候安装在默认的命名空间中
上述安装方式只会使用chart的默认配置选项,很多时候,我们需要自定义 chart 来指定我们想要的配置
# 查看 chart 中的可配置选项
$ helm show values bitnami/wordpress
然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件
$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
$ helm install -f values.yaml bitnami/wordpress --generate-name
上述命令将为 MariaDB 创建一个名称为 user0
的默认用户,并且授予该用户访问新建的 user0db
数据库的权限。chart 中的其他默认配置保持不变。
安装过程中有两种方式传递配置数据
--values
(或 -f
):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件--set
:通过命令行的方式对指定项进行覆盖如果同时使用两种方式,则 --set
中的值会被合并到 --values
中,但是 --set
中的值优先级更高。在--set
中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name>
来查看指定 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
从 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"
mariadb:
auth:
password: zYWQ1WTJVT
rootPassword: 6WtGXOkPlp
username: user1
wordpressPassword: 93sTSYPuT4
helm upgrade
$ helm upgrade -f panda.yaml happy-panda bitnami/wordpress
helm get values
root@k8s1:~/huanglei/helm# helm get values mywordpress
USER-SUPPLIED VALUES:
mariadb:
auth:
password: zYWQ1WTJVT
rootPassword: 6WtGXOkPlp
username: user1
wordpressPassword: 93sTSYPuT4
格式:helm rollback [RELEASE] [REVISION]
$ helm rollback mywordpress 1
上面这条命令将我们的 mywordpress
回滚到了它最初的版本。release 版本其实是一个增量修订(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值永远是1。我们可以使用 helm history [RELEASE]
命令来查看一个特定 release 的修订版本号
$ helm history mywordpress
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Feb 24 07:41:57 2022 superseded wordpress-13.0.11 5.9.0 Install complete
2 Thu Feb 24 08:01:52 2022 superseded wordpress-13.0.11 5.9.0 Upgrade complete
3 Thu Feb 24 08:07:25 2022 deployed wordpress-13.0.11 5.9.0 Rollback to 1
查看回滚结果:
root@k8s1:~/huanglei/helm# helm get values mywordpress
USER-SUPPLIED VALUES:
null
格式:helm uninstall 名称
$ helm uninstall mywordpress
校验:
root@k8s1:~/huanglei/helm# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
注意:
helm uninstall --keep-history
。使用 helm list --uninstalled
只会展示使用了 --keep-history
删除的 release要查看所有参数的说明,请执行 helm <command> --help
命令。
--timeout
:一个 Go duration类型的值, 用来表示等待 Kubernetes 命令完成的超时时间,默认值为 5m0s
。--wait
:表示必须要等到所有的 Pods 都处于 ready 状态,PVC 都被绑定,Deployments 都至少拥有最小 ready 状态 Pods 个数(Desired
减去 maxUnavailable
),并且 Services 都具有 IP 地址(如果是LoadBalancer
, 则为 Ingress),才会标记该 release 为成功。最长等待时间由 --timeout
值指定。如果达到超时时间,release 将被标记为 FAILED
。注意:当 Deployment 的 replicas
被设置为1,但其滚动升级策略中的 maxUnavailable
没有被设置为0时,--wait
将返回就绪,因为已经满足了最小 ready Pod 数。--no-hooks
:不运行当前命令的钩子--recreate-pods
(仅适用于 upgrade
和 rollback
):这个参数会导致重建所有的 Pod(deployment中的Pod 除外)。(在 Helm 3 中已被废弃)$ helm create deis-workflow
Creating deis-workflow
现在,./deis-workflow
目录下已经有一个 chart 了。你可以编辑它并创建你自己的模版。
在编辑 chart 时,可以通过 helm lint
验证格式是否正确。
当准备将 chart 打包分发时,你可以运行 helm package
命令:
$ helm package deis-workflow
deis-workflow-0.1.0.tgz
然后这个 chart 就可以很轻松的通过 helm install
命令安装:
$ helm install deis-workflow ./deis-workflow-0.1.0.tgz
打包好的 chart 可以上传到 chart 仓库中
helm push chart.tgz repoName 上传chart到chart仓库
例:helm push demo.tgz harbor-10.30.12.211 --username=admin --password=Harbor12345
helm install mymongodb bitnami-azure/mongodb
)helm install foo foo-0.1.1.tgz
)helm install foo path/to/foo
)helm install foo https://example.com/charts/foo-1.2.3.tgz
)版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43296313/article/details/123115218
内容来源于网络,如有侵权,请联系作者删除!