Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包。Helm 由客户端组件 helm 和服务端组件 Tiller 组成, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。
官网链接
mychart/ # chart 包名称
├── charts # 存放子chart的目录,目录存放这个chart依赖的所有子chart
├── Chart.yaml # 保存chart的基本信息,包括名字、描述信息及版本等,这个变量文件都可以被templates目录下文件引用
├── templates # 模板文件目录,存放所有yaml文件,包含了所有部署应用的yaml文件
│ ├── deployment.yaml #创建deployment对象的模板文件
│ ├── _helpers.tpl #模板助手文件,在整个chart中重复使用。templates目录下这些yaml文件可能会用的一些模板
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt #存放提示信息文件,加上chart帮助信息。helm install 部署后展示(提示)用户
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml #用于渲染模板的文件(变量文件、定义变量的值)定义templates目录下yaml文件可能引用到的变量
#values.yaml 用于存储templates目录中模板中用到的变量的值,这些变量定义都是为了让templates目录下yaml引用
3 directories, 10 files
编写一个chart,不引用内置对象的变量值,用helm3发布一个创建一个configmap,创建的k8s集群中。(其他应用也一样)
1)创建一个默认chart 包,创建的模板文件文件可根据实际情况进行删除
helm create mychart
#删除templates下文件
cd /mychart/templates && rm -rf ./*
2)编写一个自己需要的模板文件
[root@k8s-master templates]# cat configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "hello world"
3)创建一个release实例:
helm install myconfigmap ../mychart
NAME: myconfigmap
LAST DEPLOYED: Wed Feb 15 23:13:46 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
4)查看创建后的相关信息和验证是否已经在k8s集群中创建了configmap
#1. 安装成功后,此命令可以查看已经发布到k8s中的release信息
helm get manifest myconfigmap
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "hello world"
#2.list 列出创建的release实例名
helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myconfigmap default 1 2023-02-15 23:13:46.970693341 +0800 CST deployed mychart-0.1.0 1.16.0
#3.查看使用helm发布后创建的configmap
kubectl get configmap |grep mychart-configmap
mychart-configmap 1 9m38s
#4. 删除release实例
helm uninstall myconfigmap
release "myconfigmap" uninstalled
helm list|grep myconfigmap
空
通过变量调用,可以对yaml文件成为一个通用模板。
1)修改上面创建的configmap
[root@k8s-master mychart]# cat templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap #最前面的,从作用域最顶层命令空间开始,即:在顶层命名空间中开始查找Release对象,再查找Name对象
data:
myvalue: {{ .Values.MY_VALUE }} #上面就是通过内置对象和获取内置对象的变量值(Release的名称)作为拼接成configmap的名字,通过调用values.yaml文件获取变量值
2)修改values.yaml 文件
[root@k8s-master mychart]# > values.yaml
[root@k8s-master mychart]# echo "MY_VALUE": "hello world" > values.yaml
3)创建一个release 实例
[root@k8s-master mychart]# helm install myconfigmap2 ../mychart
NAME: myconfigmap2
LAST DEPLOYED: Wed Feb 15 23:40:04 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@k8s-master mychart]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 2d1h
myconfigmap2-configmap 1 12s
4)删除实例
[root@k8s-master mychart]# helm uninstall myconfigmap2
release "myconfigmap2" uninstalled
[root@k8s-master mychart]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 2d1h
5)helm测试渲染命令
不真正执行,只是试运行看是否能运行,用来测试模板内容是否正确
[root@k8s-master mychart]# helm install myconfigmap3 ../mychart/ --debug --dry-run
install.go:159: [debug] Original chart version: ""
install.go:176: [debug] CHART PATH: /data/mychart
NAME: myconfigmap3
LAST DEPLOYED: Wed Feb 15 23:45:53 2023
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
MY_VALUE: hello world
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap3-configmap #最前面的,从作用域最顶层命令空间开始,即:在顶层命名空间中开始查找Release对象,再查找Name对象
data:
myvalue: hello world #上面就是通过内置对象和获取内置对象的变量值(Release的名称)作为拼接成configmap的名字
[root@k8s-master mychart]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 2d1h
helm version // 查看helm版本
helm create xxx // 创建一个xxx charts
helm lint ./xxx // 检查包的格式或信息是否有问题
helm install xxx1 ./xxx // 部署安装xxx,设置名称为xxx1
helm list // 列出已经部署的charts
helm history // 发布历史
helm upgrade // 更新版本
helm rollback // 回滚版本
helm package ./xxx // 打包charts
helm repo add --username admin --password password myharbor xxx // 增加repo
helm uninstall xxx1 // 卸载删除xxx1
helm pull // 拉取chart包
helm cm-push // 推送chart包
helm repo update // 更新仓库资源
helm search hub // 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库
helm search repo // 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网
#获取发布历史记录
helm -n base history xxx
helm -n be rollback xxx 版本号
#检查helm 文件中可能存在的问题
helm lint .
#helm 升级
helm upgrade baseline-middleware "/nfs/8build/middleware-chart" -i -f /nfs/8build/middleware-chart/baseline-middleware.values.yaml --set imageTag="20230215-1138" --set nameSpace=be -n be
发布时
-i 参数 等同install ,如果此名称的版本不存在,请运行安装
-f 参数,最后(最右边)指定的文件优先级最高。比如如果baseline-middleware.values.yaml和values.yaml同时包含了名为 'Test'的key,values.yaml中的设置会优先使用:
--set 参数,在命令行上变量值(可以用逗号指定多个或单独的值:key1=val1,key2=val2),若设置值一样,右边优先级高。此处设置的变量值会覆盖xxx.yaml文件中的变量