在Kubernetes中,如果 Pod 需要保存資料,就不能只依賴容器本身的儲存空間。
因為Pod被刪除或重新建立後,原本容器內的資料可能會消失,所以Kubernetes提供了PV和PVC來管理持久化儲存。
PV(PersistentVolume)是Kubernetes中實際提供給 Pod 使用的持久化儲存空間。
PV可以對應到不同的儲存來源,例如:本機目錄,雲端硬碟等。
下面會建立一個容量為1Gi的PV,並使用Node上的/data/demo 作為儲存位置。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/demo
PVC(PersistentVolumeClaim)是Pod對儲存空間提出的需求。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
我們可以使用kubectl get pv和kubectl get pvc來取得狀態
當PVC發出後會尋找Kubernetes中符合條件且可用的PV之後進行一對一綁定。

有看到PVC的STATUS為Bound則代表它已經有和PV綁定了,在Kubernetes中PV和PVC是只能夠一對一綁定的,至於為何會需要PV和PVC而不是讓Pod直接使用儲存空間,是為了能夠避免 Pod 直接依賴特定的儲存空間。
Pod只需要透過PVC提出「需要多少容量」、「需要什麼存取模式」等需求,而不用知道實際的儲存空間位於哪裡。至於實際要使用哪一個PV,則交由Kubernetes根據PVC的需求進行配對。