BoyChai's Blog - Chart https://blog.boychai.xyz/index.php/tag/Chart/ HELM-Kubernetes包管理工具(Chart包简单使用) https://blog.boychai.xyz/index.php/archives/57/ 2023-05-29T04:34:00+00:00 目录结构文档地址:https://helm.sh/zh/docs/topics/charts/通过下面命令创建一个chart,指定chart名:mychart[root@Kubernetes charts]# helm create mychart Creating mychart [root@Kubernetes charts]# tree mychart mychart ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── hpa.yaml │ ├── ingress.yaml │ ├── NOTES.txt │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests │ └── test-connection.yaml └── values.yaml 3 directories, 10 files目录介绍charts存放子chart的目录,目录里存放这个chart依赖的所有子chartChart.yaml保存chart的基本信息,包括名字、描述信息及版本等,这个变量文件都可以被template目录下文件所引用templates模板文件目录,目录里面存放所有yaml模板文件,包含了所有部署应用的yaml文件templates/deployment.yaml创建deployment对象的模板文件templates/_helpers.tpl_放置模板助手的文件,可以在整个chart中重复使用,是放一些templates目录下这些yaml都有可能会用的一些模板templates/hpa.yaml templates/ingress.yaml templates/NOTES.txt存放提示信息的文件,介绍chart帮助信息,helm install部署后展示给用户,如何使用chart等,是部署chart后给用户的提示信息templates/serviceaccount.yaml templates/service.yaml templates/tests用于测试的文件,测试完部署完chart后,如web,做一个连接,看看是否部署成功templates/tests/test-connection.yaml用于渲染模板的文件(变量文件,定义变量的值)定义templates目录下的yaml文件可能引用到的变量values.yamlvalues.yaml用于存储templates目录中模板文件中用到变量的值,这些变量定义都是为了让templates目录下yaml引用案例1需求编写一个chart,不引用内置对象的变量值(用HELM3发布创建一个ConfigMap,创建到K8s集群中,发布其他应用也一样,我们由浅入深进行学习)创建实例编写Chart:[root@Kubernetes charts]# helm create myConfigMapChart Creating myConfigMapChart [root@Kubernetes charts]# cd myConfigMapChart/templates/ [root@Kubernetes templates]# rm -rf ./* [root@Kubernetes templates]# vim configmap.yaml # 文件内容如下 apiVersion: v1 kind: ConfigMap metadata: name: my-cm-chart data: myValue: "Hello,World"创建release实例:[root@Kubernetes charts]# ls mychart myConfigMapChart [root@Kubernetes charts]# helm install mycm ./myConfigMapChart/ NAME: mycm LAST DEPLOYED: Thu May 11 00:26:16 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None查看release实例:[root@Kubernetes charts]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mycm default 1 2023-05-11 00:26:16.392817959 +0800 CST deployed myConfigMapChart-0.1.0 1.16.0 查看release的详细信息:[root@Kubernetes charts]# helm get manifest mycm --- # Source: myConfigMapChart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: my-cm-chart data: myValue: "Hello,World"删除release实例:[root@Kubernetes charts]# helm uninstall mycm release "mycm" uninstalled [root@Kubernetes charts]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION案例2需求案例1只是简单的创建一个configmap实际和直接apply没啥区别,案例2将引入变量进行创建chart,把configmap的名称改为变量的方式进行创建。创建实例修改Chart:[root@Kubernetes charts]# vim myConfigMapChart/templates/configmap.yaml [root@Kubernetes charts]# cat myConfigMapChart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: # name: my-cm-chart name: {{ .Release.Name }}-configmap data: # myValue: "Hello,World" myValue: {{ .Values.MY_VALUE }} [root@Kubernetes charts]# > myConfigMapChart/values.yaml [root@Kubernetes charts]# vim myConfigMapChart/values.yaml [root@Kubernetes charts]# cat !$ cat myConfigMapChart/values.yaml MY_VALUE: "Hello,World"创建实例:[root@Kubernetes charts]# helm install mycm2 ./myConfigMapChart/ NAME: mycm2 LAST DEPLOYED: Thu May 11 00:49:06 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None查看实例:[root@Kubernetes charts]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mycm2 default 1 2023-05-11 00:49:06.855993522 +0800 CST deployed myConfigMapChart-0.1.0 1.16.0 [root@Kubernetes charts]# kubectl get cm NAME DATA AGE kube-root-ca.crt 1 77d mycm2-configmap 1 87sYAML解释:apiVersion: v1 kind: ConfigMap metadata: # name: my-cm-chart name: {{ .Release.Name }}-configmap data: # myValue: "Hello,World" myValue: {{ .Values.MY_VALUE }}{{ .Release.Name }}-configmap 最前面的.从作用域最顶层命名空间开始,即:在顶层命名空间中开始寻找Release对象,再查找Name对象。这个就是通过内置对象获取内置对象的变量值(Release的名称)作为拼接成ConfigMap的名字。{{ .Values.MY_VALUE }} 这个是其他变量会去values.yaml文件中寻找对应的变量引用内置对象或其他变量的好处:如果metadata.name中色湖之的值就是一个固定值,这样的模板是无法在k8s中多次部署的,所以我们可以试着在每次安装chart时,都自动metadata.name的设置为release的名称,因为每次部署release的时候实例名称是不一样的,这样部署的时候里面的资源名也就可以作为一个分区,而可以进行重复部署。测试渲染HELM提供了一个用来渲染模板的命令,该命令可以将模板内容渲染出来,但是不会进行任何安装的操作。可以用该命令来测试模板渲染的内容是否正确。语法如下:helm install [release实例名] chart目录 --debug --dry-run例:[root@Kubernetes charts]# helm install mycm3 ./myConfigMapChart/ --debug --dry-run install.go:200: [debug] Original chart version: "" install.go:217: [debug] CHART PATH: /root/charts/myConfigMapChart NAME: mycm3 LAST DEPLOYED: Thu May 11 01:03:15 2023 NAMESPACE: default STATUS: pending-install REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: {} COMPUTED VALUES: MY_VALUE: Hello,World HOOKS: MANIFEST: --- # Source: myConfigMapChart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: # name: my-cm-chart name: mycm3-configmap data: # myValue: "Hello,World" myValue: Hello,World [root@Kubernetes charts]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION