PersistentVolume(PV) 數據持久卷
對存儲資源的建立與使用進行抽象,讓存儲能夠作爲集羣的資源進行管理html
PersistentVolumeClaim(PVC) 數據持久卷請求
讓用戶不須要關心具體的volume實現細節node
靜態PV的實現:nginx
首先配置PV:web
1 #在/ifs/kubernetes/目錄下建立pv01,pv02,pv03 2 [root@node2 ~]# cd /ifs/kubernetes/ 3 [root@node2 kubernetes]# mkdir pv01 4 [root@node2 kubernetes]# mkdir pv02 5 [root@node2 kubernetes]# mkdir pv03 6 7 #經過pv.yaml文件建立三個PV 8 #訪問模式: 9 #ReadWriteMany RWX 全部pod讀寫,應用場景:數據獨立,塊設備 10 #ReadWriteOnce RWO 單個Pod讀寫 11 #ReadOnlyMany ROX 全部pod只讀 應用場景:數據共享,文件系統 12 [root@master ~]# cat pv.yaml 13 apiVersion: v1 14 kind: PersistentVolume 15 metadata: 16 name: pv01 #PV的名字 17 spec: 18 capacity: #定義容量爲5G 19 storage: 5Gi 20 accessModes: #訪問模式爲ReadWriteMany 21 - ReadWriteMany 22 nfs: #卷的類型爲nfs 23 path: /ifs/kubernetes/pv01 #路徑爲/ifs/kubernetes/pv01 24 server: 192.168.1.63 #nfs的服務器爲:192.168.1.63 25 --- 26 apiVersion: v1 27 kind: PersistentVolume 28 metadata: 29 name: pv02 30 spec: 31 capacity: 32 storage: 10Gi 33 accessModes: 34 - ReadWriteMany 35 nfs: 36 path: /ifs/kubernetes/pv02 37 server: 192.168.1.63 38 --- 39 apiVersion: v1 40 kind: PersistentVolume 41 metadata: 42 name: pv03 43 spec: 44 capacity: 45 storage: 20Gi 46 accessModes: 47 - ReadWriteMany 48 nfs: 49 path: /ifs/kubernetes/pv03 50 server: 192.168.1.63 51 52 [root@master ~]# 53 [root@master ~]# kubectl apply -f pv.yaml 54 persistentvolume/pv01 created 55 persistentvolume/pv02 created 56 persistentvolume/pv03 created 57 [root@master ~]# kubectl get pv 58 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 59 pv01 5Gi RWX Retain Available 11s 60 pv02 10Gi RWX Retain Available 11s 61 pv03 20Gi RWX Retain Available 11s 62 [root@master ~]#
以deployment的方式使用靜態PVCapi
1 [root@master ~]# #經過deployment控制器啓動一個Pod,在這個Pod中數據 2 #持久化經過PVC來實現 3 #deployment和PVC經過name:my-pvc進行關聯 4 #兩個yaml文件一般是寫在一塊兒的 5 [root@master ~]# cat deployment2.yaml 6 apiVersion: apps/v1 7 kind: Deployment 8 metadata: 9 labels: 10 app: web 11 name: web 12 spec: 13 replicas: 1 14 selector: 15 matchLabels: 16 app: web 17 strategy: {} 18 template: 19 metadata: 20 labels: 21 app: web 22 spec: 23 containers: 24 - image: nginx 25 name: nginx 26 resources: {} 27 volumeMounts: 28 - name: data 29 mountPath: /usr/share/nginx/html 30 31 volumes: 32 - name: data 33 persistentVloumeClaim: 34 claimName: my-pvc 35 --- 36 apiVersion: v1 37 38 kind: PersistentVolumeClaim 39 metadata: 40 name: my-pvc 41 spec: 42 accessModes: 43 - ReadWriteMany 44 resources: 45 requests: 46 storage: 8Gi 47 [root@master ~]# 48 49 [root@master ~]# kubectl apply -f deployment2.yaml 50 deployment.apps/web created 51 persistentvolumeclaim/my-pvc created 52 [root@master ~]# kubectl get pod 53 NAME READY STATUS RESTARTS AGE 54 web-7d74df4646-fr88j 1/1 Running 0 15s 55 [root@master ~]# kubectl get pvc 56 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE 57 my-pvc Bound pv02 10Gi RWX 27s 58 [root@master ~]#
PVC與PV的關係服務器
PV與PVC是一一對應的,名爲my-pvc的PVC最終匹配的是PV02,一個PVC只可能匹配一個pv
PVC與PV之間的對應是由匹配條件決定的,PVC與PV的匹配條件是:app
1 容量
2 訪問模式
3 標籤spa
1 [root@master ~]# kubectl get pv 2 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 3 pv01 5Gi RWX Retain Available 67s 4 pv02 10Gi RWX Retain Bound default/my-pvc 67s 5 pv03 20Gi RWX Retain Available 67s 6 [root@master ~]# #PVX刪除了以後,對應的PV中的數據並不會刪除 7 #以下圖中的pv02,my-pvc刪除後,pv02中的數據仍是存在的能夠對 8 #pv02中的數據進行刪除或者備份 9 #同時pv02已不能夠再次使用,即它的狀態沒法再回到available 10 #若是肯定再也不使用pv02中的數據,能夠手動刪除pv02 11 #pv刪除以後對就的存儲是否刪除是由RECLAIM POLICY決定的: 12 #RECLAIM POLICY的狀態有 13 #Delete: 直接刪除PV+數據 (不推薦) 14 #Recycle: 清除數據,但保留PV(被廢棄) 15 #Retain: 保留PV&數據 (推薦) 16 17 [root@master ~]# kubectl delete -f deployment2.yaml 18 deployment.apps "web" deleted 19 persistentvolumeclaim "my-pvc" deleted 20 [root@master ~]# kubectl get pv,pvc 21 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 22 persistentvolume/pv01 5Gi RWX Retain Available 86m 23 persistentvolume/pv02 10Gi RWX Retain Released default/my-pvc 86m 24 persistentvolume/pv03 20Gi RWX Retain Available 86m 25 [root@master ~]# 26
Kubernetes支持持久卷的存儲插件: https://kubernetes.io/docs/concepts/storage/persistent-volumes/插件
動態PVC的實現:code
Dynamic Provisioning機制工做的核心在於StorageClass的API對象。StorageClass聲明存儲插件,用於自動建立PV。
Kubernetes支持動態供給的存儲插件:
https://kubernetes.io/docs/concepts/storage/storage-classes/