1.我们重新创建一个新的模板 helm create <应用名称>
[root@master01 hpro]# helm create mychart Creating mychart
2.我们接着看文件
# 查看文件 [root@master01 mychart]# ls charts Chart.yaml templates values.yaml # 我们进入 templates [root@master01 templates]# ls deployment.yaml _helpers.tpl hpa.yaml ingress.yaml NOTES.txt serviceaccount.yaml service.yaml tests # 我们随便查看一个yaml [root@master01 templates]# vim service.yaml # 这个是一个 helm创建的模板 apiVersion: v1 kind: Service metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "mychart.selectorLabels" . | nindent 4 }}
3.模板取值格式
# 取参数的格式 # {{ .Values.变量名称 }} # {{ .Release.Name }}
4.修改 values.yaml
[root@master01 mychart]# ls charts Chart.yaml templates values.yaml # 把里面所有清空 [root@master01 mychart]# vim values.yaml # 写入以下内容 # 定义副本数 replicas: 1 # 镜像 image: nginx # 版本 tag: 1.16 # 标签 label: nginx # 端口 port: 80
5. 修改 templates 文件夹中的deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: {{.Values.label }} name: {{ .Release.Name}}-deploy spec: replicas: 1 selector: matchLabels: app: {{.Values.label }} strategy: {} template: metadata: creationTimestamp: null labels: app: {{.Values.label }} spec: containers: - image: {{.Values.image }} name: {{.Values.image }} resources: {} status: {}
6. 修改 templates 文件夹中的 service.yaml
apiVersion: v1 kind: Service metadata: labels: app: web-test name: {{ .Release.Name}}-svc spec: ports: - port: {{ .Values.port}} protocol: TCP targetPort: 80 selector: app: {{ .Values.label}} type: NodePort
7.这是创建的模板文件
[root@master01 templates]# ls deploy.yaml service.yaml
8.测试模板文件 helm install --dry-run <应用名称> <模板文件夹>
命令的解释如下:
helm install
: 这是 Helm 的安装命令,用于安装一个 chart。--dry-run
: 这个选项表示在执行安装命令时只进行模拟操作,不实际安装 chart。web2
: 这是要安装的 release 的名称。mychart/
: 这是要安装的 chart 的路径。
helm install --dry-run web2 mychart/
这个命令将模拟安装位于 mychart/
的 chart,不会实际执行任何操作。可以通过这个命令来检查安装过程中可能出现的问题或验证 chart 的配置是否正确。
1. # 正常打印表示文件没有问题 2. [root@master01 hpro]# helm install --dry-run web2 mychart/ 3. NAME: web2 4. LAST DEPLOYED: Sun Jan 14 02:49:27 2024 5. NAMESPACE: default 6. STATUS: pending-install 7. REVISION: 1 8. TEST SUITE: None 9. HOOKS: 10. MANIFEST: 11. --- 12. . 13. . 14. .
9.我们看一下打印的内容,填充的内容都已经填充上了
1. # 取参数的格式 2. # {{ .Values.变量名称 }} 3. # {{ .Release.Name }} 4. 5. # 这下明白怎么取值了吧 6. 7. .Values 取得是 values.yaml 文件中的属性 8. 9. .Release 取得是 install 中定义的名字
1. [root@master01 hpro]# helm install --dry-run web2 mychart/ 2. NAME: web2 3. LAST DEPLOYED: Sun Jan 14 02:49:27 2024 4. NAMESPACE: default 5. STATUS: pending-install 6. REVISION: 1 7. TEST SUITE: None 8. HOOKS: 9. MANIFEST: 10. --- 11. # Source: mychart/templates/service.yaml 12. apiVersion: v1 13. kind: Service 14. metadata: 15. labels: 16. app: web-test 17. name: web2-svc 18. spec: 19. ports: 20. - port: 80 21. protocol: TCP 22. targetPort: 80 23. selector: 24. app: nginx 25. type: NodePort 26. --- 27. # Source: mychart/templates/deploy.yaml 28. apiVersion: apps/v1 29. kind: Deployment 30. metadata: 31. creationTimestamp: null 32. labels: 33. app: nginx 34. name: web2-deploy 35. spec: 36. replicas: 1 37. selector: 38. matchLabels: 39. app: nginx 40. strategy: {} 41. template: 42. metadata: 43. creationTimestamp: null 44. labels: 45. app: nginx 46. spec: 47. containers: 48. - image: nginx 49. name: nginx 50. resources: {} 51. status: {}
10.安装自定义应用
1. [root@master01 hpro]# helm install web2 mychart/ 2. NAME: web2 3. LAST DEPLOYED: Sun Jan 14 02:58:44 2024 4. NAMESPACE: default 5. STATUS: deployed 6. REVISION: 1 7. TEST SUITE: None 8. [root@master01 hpro]# helm list 9. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION 10. web2 default 1 2024-01-14 02:58:44.222147967 -0800 PST deployed mychart-0.1.0 1.16.0 11. [root@master01 hpro]# kubectl get pod 12. NAME READY STATUS RESTARTS AGE 13. web2-deploy-f89759699-rqc6m 1/1 Running 0 21s 14. [root@master01 hpro]# kubectl get svc 15. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 16. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28d 17. web2-svc NodePort 10.108.230.159 <none> 80:31223/TCP 25s
总结:本章学习怎么定义模板,怎么取值运行。