$ helm create aminglinux
2)自定义templates模板文件
删除掉默认的模板文件
$ cd aminglinux
$ rm -rf templates/*
生成一个deployment模板
$ kubectl create deployment aminglinux --image=nginx:1.21.6 -o yaml --dry-run=client > templates/deployment.yaml
修改deployment.yaml
$ cd aminglinux
$ vi templates/deployment.yaml #改成如下内容
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Values.appname }} #将values.yaml中的appname对应的变量值渲染在这里
name: aminglinux
spec:
replicas: {{ .Values.replicas }} #将values.yaml中的replicas对应的变量值渲染在这里
selector:
matchLabels:
app: {{ .Values.appname }} #标签可以和资源名称一样,因此也可以直接调用appname变量
template:
metadata:
labels:
app: {{ .Values.appname }} #标签可以和资源名称一样,因此也可以直接调用appname变量
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.imageTag }} #将values.yaml中的image、imageTag对应的变量值渲染在这里,表示镜像的版本号
name: {{ .Values.appname }} #容器的名称也和资源的名称保持一致即可
command: [ "/bin/sh","-c","/data/init.sh" ]
ports:
- name: web
containerPort: 80
protocol: TCP
volumeMounts:
- name: code
mountPath: /data/code/aminglinux
- name: config
mountPath: /data/nginx/conf/conf.d/
volumes:
- name: config
configMap:
name: {{ .Values.appname }}-cm #confimap的名字也可以使用程序名称的变量加上-cm
- name : code
persistentVolumeClaim:
claimName: {{ .Values.appname }}-pvc #pvc的名字也可以使用程序名称的变量加上-pvc
readOnly: false
编辑svc模板
$ cd aminglinux
$ vi templates/service.yaml ##写入如下内容
apiVersion: v1
kind: Service
metadata:
labels:
app: {{ .Values.appname }} #service要管理deployment的pod资源,因此这里的标签要和pod资源的标签对应上,直接调用appname这个变量
name: {{ .Values.appname }}-svc #service资源的名称,也可以直接调用appname这个变量,后面加一个-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: {{ .Values.appname }} #标签选择器还是调用appname这个变量
type: NodePort
编辑configmap模板
$ cd aminglinux
$ vi templates/configmap.yaml ##写入如下内容
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.appname }}-cm #引入appname变量加上-cm作为cm资源的名称
data:
test.aminglinux.com.conf: |
server {
listen 80;
server_name test.aminglinux.com;
location / {
root /data/code/aminglinux;
index index.html;
}
}
编辑pv/pvc模板
$ cd aminglinux
$ vi templates/pv-pvc.yaml #内容如下
apiVersion: v1
kind: PersistentVolume
metadata:
name: {{ .Values.appname }}-pv #引入appname变量加上-pv作为pv资源的名称
labels:
pv: {{ .Values.appname }}-pv #标签也可以使用和pv名称一样的名字
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: {{ .Values.nfsPath }} #这里会引入nfsPath变量的值
server: {{ .Values.nfsServer }} #这里会引入nfsServer变量的值
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Values.appname }}-pvc #引入appname变量加上-pvc作为pvc资源的名称
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
pv: {{ .Values.appname }}-pv #指定pv的标签
定义values.yaml
$ vi values.yaml #内容如下
appname: aminglinux
replicas: 2
image: aminglinux/helm-custom-chart ##这是一个测试的镜像
imageTag: v0
nfsPath: /data/nfs/aminglinux ##这个目录需要提前创建好
nfsServer: 192.168.1.34

3)参考8.3 NFS存储安装nfs机器,并创建/data/nfs/aminglinux目录
$ mkdir -p /data/nfs/aminglinux
4)安装chart
$ helm install aminglinux-release .
5)查看svc
$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aminglinux-svc NodePort 10.0.38.79 <none> 80:31047/TCP 23m
查看pv
$ k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
aminglinux-pv 2Gi RWX Retain Bound default/aminglinux-pvc 77s
查看pvc
$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
aminglinux-pvc Bound aminglinux-pv 2Gi RWX 23s
6)到NFS服务器上创建一个测试页
$ echo "This is a test site." > /data/nfs/aminglinux/index.html
7)等pod起来后进行测试
$ curl 10.0.38.79
This is a test site.
8)恢复
$ helm uninstall aminglinux-release