1.showmount -e在存储节点上查看挂载情况。kubectl apply -f pv-demo.yaml 在管理节点上通过pv资源文件声明资源。kubectl get pv获取pv资源信息。
[root@storage1 volumes]# showmount -e
Export list for storage1.example.com:
/data/volumes/v5 172.20.0.0/16
/data/volumes/v4 172.20.0.0/16
/data/volumes/v3 172.20.0.0/16
/data/volumes/v2 172.20.0.0/16
/data/volumes/v1 172.20.0.0/16
[root@master volumes]# kubectl apply -f pv-demo.yaml
persistentvolume/pv001 created
persistentvolume/pv002 created
persistentvolume/pv003 created
persistentvolume/pv004 created
persistentvolume/pv005 created
[root@master volumes]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 2Gi RWO,RWX Retain Available 5s
pv002 2Gi RWO Retain Available 5s
pv003 2Gi RWO,RWX Retain Available 5s
pv004 4Gi RWO,RWX Retain Available 5s
pv005 4Gi RWO,RWX Retain Available 5s
2.vim stateful-demo.yaml编辑StatefulSet资源文件,这里要特别注意在volumeClaimTemplates:中storageClassName:的指定,必须与pv中的STORAGECLASS相对应,否则会出现 " pod has unbound PersistentVolumeClaims " 问题 。
[root@master manifests]# vim stateful-demo.yaml
[root@master manifests]# cat stateful-demo.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp
labels:
app: myapp
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myapp
spec:
serviceName: myapp
replicas: 3
selector:
matchLabels:
app: myapp-pod
template:
metadata:
labels:
app: myapp-pod
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- containerPort: 80
name: web
volumeMounts:
- name: myappdata
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: myappdata
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: ""
resources:
requests:
storage: 2Gi
3.kubectl apply -f stateful-demo.yaml 声明资源。kubectl get svc -o wide查看服务资源信息。kubectl get sts -o wide查看StatefulSet资源信息。kubectl get pvc -o wide查看pvc资源信息。kubectl get pv -o wide查看pv资源信息。kubectl get pod -o wide查看pod资源信息。
[root@master manifests]# kubectl apply -f stateful-demo.yaml
service/myapp created
statefulset.apps/myapp created
[root@master manifests]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d <none>
myapp ClusterIP None <none> 80/TCP 1m app=myapp-pod
[root@master manifests]# kubectl get sts -o wide
NAME DESIRED CURRENT AGE CONTAINERS IMAGES
myapp 3 3 2m myapp ikubernetes/myapp:v1
[root@master manifests]# kubectl get pvc -o wide
NAME STATUS