1、概述
kubernetes對於有狀態的容器應用或者對數據需要持久化的應用,不僅需要將容器內的目錄掛載到宿主機的目錄或者emptyDir臨時存儲卷,而且需要更加可靠的存儲來保存應用產生的重要數據.
PV是對底層網絡共享存儲的對象,將共享存儲定義爲一種“資源”.
PVC是用戶對存儲資源的一個“申請”.PVC能夠消費PV資源.PVC可以申請特定的存儲空間和訪問模式.
1、PV詳解
PV作爲存儲資源,主要包括存儲能力,訪問模式,存儲類型,回收策略,後端存儲類型等關鍵信息的設置.
下面的例子聲明瞭PV的以下屬性:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
nfs:
path: /tmp
server: 172.17.0.2
1.2、PV生命週期的各個階段
某個PV在以下4個週期之一:
Available: 可用狀態,還未與某個PVC綁定
Bound: 已與某個PVC綁定
Released: 綁定的PVC已經刪除,資源已釋放.但沒有被集羣回收
Failed: 自動資源回收失敗
2、PVC詳解
pvc作爲用戶對存儲資源的需求申請,主要包括存儲空間請求,訪問模式,PV選擇條件和存儲類別等信息的設置.
下例聲明的PVC具有如下屬性:
申請8GiB的存儲空間,訪問模式爲ReadWriteOnce,PV選擇條件爲包含標籤“release=stable”並且包含條件爲“environment In [dev]”的標籤,存儲類別爲slow.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spce:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment,operator: In,values: [dev]}
PVC受限於namespace,Pod在引用PVC時同樣受Namespace的限制,只有相同Namespace中的PVC才能掛載到Pod內.
3、PV和PVC的生命週期
在靜態資源供應模式下,通過PV和PVC完成綁定,並供Pod使用的存儲管理機制
在動態資源供應模式下,通過StroageClass和PVC完成資源動態綁定,並供pod使用的存儲管理機制
2、StorageClass
StorageClass作爲對存儲資源的抽象定義,對用戶設置的PVC申請屏蔽後端存儲的細節,一方面減少了用戶對於存儲資源細節的關注,另一方面減輕了管理員手工管理PV的工作,有系統自動完成PV的創建和綁定,實現了動態的資源供應
下面定義了一個名爲standard的StorageClass,提供者爲aws-ebs.其參數設置了一個type,值爲gp2
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameter:
type: gp2
在使用動態存儲供應模式的情況下,相對於靜態模式的優勢有以下兩點:
1、管理員無需預先創建大量的PV作爲存儲資源
2、用戶在申請PVC時無法保證容量與預置PV的容量完全匹配,從k8s1.6版本開始,建議用戶優先考慮使用StorageClass的動態存儲供應模式進行存儲管理
欲瞭解更多的kubernetes的功能,請關注公衆號:架構師Plus
150講輕鬆搞定Python網絡爬蟲
Google開發專家帶你學 AI:入門到實戰(Keras/Tensorflow)(附源碼)