的pod本身是無狀态的(stateless),生命周期通常比較短,隻要出現了異常,Kubernetes就會自動建立一個新的Pod來代替它。
而容器産生的資料,會随着Pod消亡而自動消失。
為了實作Pod内資料的存儲管理,Kubernetes引入了兩個API資源:Persistent Volume(持久卷,以下簡稱PV)和Persistent Volume Claim(持久卷申請,以下簡稱PVC)。
PV是Kubernetes叢集中的一種網絡存儲實作,跟Node一樣,也是屬于叢集的資源。
PV跟Docker裡的Volume(卷)類似,不過會有獨立于Pod的生命周期。
使用kubectl get pv檢視清單:

而PVC是使用者的一個請求,跟Pod類似。Pod消費Node的資源,PVC消費PV的資源。
Pod 能夠申請特定的資源(CPU和記憶體);PVC能夠申請特定的尺寸和通路模式,例如可以加載一個讀寫執行個體或者多個隻讀執行個體,(就是上圖kubectl get pvc傳回結果的Access Mode這一列的值RWO, ROX等等)而無須感覺這些執行個體背後具體的存儲實作。
我們來看一個具體的PVC執行個體,名稱為nginx-pvc:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-pvc spec: storageClassName: default accessModes: - ReadOnlyMany resources: requests: storage: 1Gi
使用指令kubectl create -f pvc.yaml建立這個yaml檔案定義的persistent volume claim:
然後定義一個pod,消費這個名為nginx-pvc的persistent volume claim:
使用kubectl describe pvc nginx-pvc檢視這個persistent volume claim對應生成的persistent volume:
現在我用指令kubectl cp train.jpg nginx-storage-pod:/usr/share/nginx/html将兩個檔案train.jpg和index.html檔案拷貝到pod内部檔案路徑/usr/share/nginx/html下面:
現在切換到nginx-storage-pod pod裡,在/usr/share/nginx/html目錄下果然發現了這兩個檔案:
接下來我定義了另一個pod,同樣适用nginx-pvc這個PVC:
建立完這個pod之後,then kubectl exec -ti another ash 進入pod内部/usr/share/nginx/html,同樣發現了index.html和train.jpg.
這個例子說明persistent volume claim能夠用于在多個pod間共享持久化資料。