(1)创建完一个chart:mychart
[root@k8s-master helm]# helm create mychart
Creating mychart
[root@k8s-master mychart]# ls
charts Chart.yaml templates values.yaml
mychart - chart 包目录名
├── charts - 依赖的子包目录,里面可以包含多个依赖的chart包
├── Chart.yaml - chart定义,可以定义chart的名字,版本号信息。
├── templates - k8s配置模版目录, 我们编写的k8s配置都在这个目录, 除了NOTES.txt和下划线开头命名的文件,其他文件可以随意命名。
│ ├── deployment.yaml
│ ├── _helpers.tpl - 下划线开头的文件,helm视为公共库定义文件,主要用于定义通用的子模版、函数等,helm不会将这些公共库文件的渲染结果提交给k8s处理。
│ ├── ingress.yaml
│ ├── NOTES.txt - chart包的帮助信息文件,执行helm install命令安装成功后会输出这个文件的内容。
│ └── service.yaml
└── values.yaml - chart包的参数配置文件,模版可以引用这里参数。
(2)新增变量,修改变量文件values.yaml
[root@k8s-master mychart]# vim values.yaml
在对底部添加
#自定义变量
replicas: 2
image: nginx
tag: 1.16
label: nginx
port: 80
(3)修改pod的yaml文件,在template目录下
指定参数格式: {{ }}
{{ .Release.Name }} pod应用名
{{ .Values.变量名称 }} 变量名称是根据mychart/values.yaml文件新增的参数
[root@k8s-master templates]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: {{ .Release.Name }}-nginx #pod的名字
spec:
replicas: {{ .Values.replicas }} #pod的副本数
selector:
matchLabels:
app: {{ .Values.label }} #pod标签选择器
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: {{ .Values.label }} #设置此模板的标签
spec:
containers:
- image: {{ .Values.image }}
name: nginx
resources: {}
status: {}
[root@k8s-master templates]# cat service.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: {{ .Release.Name }}-svc
name: {{ .Release.Name }}-svc
spec:
ports:
- port: {{ .Values.port }}
protocol: TCP
targetPort: 80
selector:
app: {{ .Values.label }}
type: NodePort
status:
loadBalancer: {}
(4)创建自定义参数pod
[root@k8s-master helm]# helm install web7 mychart
NAME: web7
LAST DEPLOYED: Fri Nov 13 20:09:20 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
(5)验证
[root@k8s-master helm]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 51d
ui-weave-scope NodePort 10.102.105.28 <none> 80:32448/TCP 16d
web NodePort 10.98.105.180 <none> 80:31375/TCP 25h
web7-svc NodePort 10.111.115.9 <none> 80:31687/TCP 103m 与预期一致,端口号80
[root@k8s-master helm]# kubectl get pod
NAME READY STATUS RESTARTS AGE
weave-scope-agent-ui-655pp 1/1 Running 3 16d
weave-scope-agent-ui-bzttt 1/1 Running 2 16d
weave-scope-agent-ui-hkxfz 1/1 Running 1 16d
weave-scope-cluster-agent-ui-5d4d6c97bf-5xpqf 1/1 Terminating 0 9d
weave-scope-cluster-agent-ui-5d4d6c97bf-f528k 1/1 Running 1 8d
weave-scope-frontend-ui-757c6668c5-vqpdj 1/1 Running 1 8d
weave-scope-frontend-ui-757c6668c5-zhlzp 1/1 Terminating 0 9d
web-d86c95cc9-vzmnd 1/1 Running 0 25h
web7-nginx-86c57db685-f86b8 1/1 Running 0 105m
web7-nginx-86c57db685-hd2b7 1/1 Running 0 105m #与预期一致,副本数2
浏览器访问http://ip:31687

完成