PVC 的全稱是:PersistentVolumeClaim(持久化卷聲明),PVC 是用戶存儲的一種聲明,PVC 和 Pod 比較類似,
Pod 消耗的是節點,PVC 消耗的是 PV 資源,Pod 可以請求 CPU 和內存,而 PVC 可以請求特定的存儲空間和訪問模式。對於真正使用存儲的用戶不需要關心底層的存儲實現細節,只需要直接使用 PVC 即可。
1、將各個節點像上一節一樣部署nfs客戶端
2、部署PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl apply -f pvc-demo.yaml
[root@k8s-node1 k8s]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 1Gi RWO Recycle Bound default/www-web-1 5d
pv002 1Gi RWO Recycle Bound default/www-web-0 5d
pv1 1Gi RWO Recycle Bound default/pvc-1 56m
pv的狀態已經是Bound
[root@k8s-node1 k8s]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-1 Bound pv1 1Gi RWO 80s
www-web-0 Bound pv002 1Gi RWO 5d
www-web-1 Bound pv001 1Gi RWO 5d
3、測試使用pvc
構建一個deployment,將nginx的usr/share/nginx/html指向nfs的共享存儲路徑/data/k8s
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: use-pvc-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: use-pvc-deployment
spec:
containers:
- name: nginx
image: 172.16.10.190:8008/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: use-pvc-web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
persistentVolumeClaim:
claimName: pvc-1
---
apiVersion: v1
kind: Service
metadata:
name: nfs-pvc
labels:
app: nfs-pvc
spec:
type: NodePort
ports:
- port: 80
targetPort: use-pvc-web
nodePort: 32112
selector:
app: use-pvc-deployment
kubectl apply -f use-pvc.yaml
這時訪問http://192.168.100.87:32112/報403錯誤
在/data/k8s創建index.html
<html>
Hello This is Nginx in K8S
</html>
再次訪問http://192.168.100.87:32112/ 成功了