經過一個例子學習Kubernetes裏的PersistentVolumeClaim的用法

Kubernetes的pod自己是無狀態的(stateless),生命週期一般比較短,只要出現了異常,Kubernetes就會自動建立一個新的Pod來代替它。html

而容器產生的數據,會隨着Pod消亡而自動消失。nginx

爲了實現Pod內數據的存儲管理,Kubernetes引入了兩個API資源:Persistent Volume(持久卷,如下簡稱PV)和Persistent Volume Claim(持久卷申請,如下簡稱PVC)。api

PV是Kubernetes集羣中的一種網絡存儲實現,跟Node同樣,也是屬於集羣的資源。網絡

PV跟Docker裏的Volume(卷)相似,不過會有獨立於Pod的生命週期。less

使用kubectl get pv查看列表:htm

而PVC是用戶的一個請求,跟Pod相似。Pod消費Node的資源,PVC消費PV的資源。blog

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間共享持久化數據。 要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":

相關文章
相關標籤/搜索