PV:
? 由管理員在集群中提供的存儲
PVC:
? 用戶對存儲的請求
PV 和 PVC 的交換過程
? 供應(Provisioning):創建PV
? 綁定(Binding):將PV分配給PVC
? 使用(Using):Pod通過PVC使用該PV
? 釋放(Releasing):Pod釋放Volume并刪除PVC,刪除后根據策略進行PVC的數據處理
? 回收(Reclaiming):回收PV,可以保留PV以便下次使用,也可以直接從云存儲中刪除,策略包括保留、回收、刪除
??? 保留(Retained):此策略允許手工回收,PVC刪除,PV將仍然存儲,存儲卷被認為處于已釋放狀態,但對于其他PVC是不可用的,因為之前數據???? 仍然保留在數據卷中,可通過以下步驟手工回收存儲卷
??? 1)刪除PV:在PV被刪除后,在外部設施中相關的存儲資產仍然存在;
??? 2)手工刪除遺留在外部存儲中的數據;
??? 循環(Recycled):此策略未來會被遺棄,建議后續使用動態供應的模式
?????????????? 循環回收會在存儲卷上執行基本擦除命令:rm -rf /thevolume/*, 使數據對于新的PVC可用
??? 刪除(Deleted):即從kubernetes中移除PV,也會從相關外部設施中刪除存儲資產.
存儲卷狀態
? Available:可用狀態,表示PV已經準備就緒,可以被PVC使用
? Bound:綁定狀態,表明PV已被分配給了PVC
? Released:釋放狀態,表明PVC解綁PV,但還未執行回收策略
? Failed:錯誤狀態,表明PV發生錯誤
示例:
NFS服務器
? IP :172.17.66.208
? 目錄: /data/mysql_slave_pv
NFS服務器配置完成后檢查沒有問題進行PV、PVC和pod使用PVC操作
創建PV
# cat mysql-slave-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
? name: mysql-slave-pv
? namespace: codeus?????????????? #PV和PVC的命名空間不同可能無法綁定
? labels:
? ? release: stable?????????????????????? ###標簽,下面的pvc也需要指定此標簽
spec:
? capacity:
? ? storage: 5Gi???????????????????????? ###空間5個G
? accessModes:
? - ReadWriteOnce????????????????? ###權限,可讀可寫
? persistentVolumeReclaimPolicy: Recycle?????????? ###持久卷回收策略
? nfs:?????????????? ###nfs信息
? ? path: /data/mysql_slave_pv
? ? server: 172.17.66.208
創建PVC
# cat mysql-slave-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
? name: mysql-slave-pvc
? namespace: codeus
spec:
? accessModes:
? - ReadWriteOnce
? resources:
? ? requests:
? ? ? storage: 5Gi
? selector:
? ? matchLabels:
? ? ? release: stable??? ###指定PV標簽
Pod使用PVC
# cat mysql-slave-rc.yaml
............中間省略
volumeMounts:
? ? ? ? - mountPath: "/var/lib/mysql/"
? ? ? ? ? name: data
? ? ? volumes:
? ? ? - name: data
? ? ? ? persistentVolumeClaim:
? ? ? ? ? claimName: myclaim-1
查看PV、PVC狀態
# kubectl -n codeus get pv,pvc????? ##可以看到狀態都是Bound綁定狀態