上一節我們介紹了 PV 和 PVC,本節通過 NFS 實踐。
作為准備工作,我們已經在 k8s-master 節點上搭建了一個 NFS 服務器,目錄為 /nfsdata:

下面創建一個 PV mypv1,配置文件 nfs-pv1.yml 如下:

① capacity 指定 PV 的容量為 1G。
② accessModes 指定訪問模式為 ReadWriteOnce,支持的訪問模式有:
ReadWriteOnce – PV 能以 read-write 模式 mount 到單個節點。
ReadOnlyMany – PV 能以 read-only 模式 mount 到多個節點。
ReadWriteMany – PV 能以 read-write 模式 mount 到多個節點。
③ persistentVolumeReclaimPolicy 指定當 PV 的回收策略為 Recycle,支持的策略有:
Retain – 需要管理員手工回收。
Recycle – 清除 PV 中的數據,效果相當於執行 rm -rf /thevolume/*。
Delete – 刪除 Storage Provider 上的對應存儲資源,例如 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。
④ storageClassName 指定 PV 的 class 為 nfs。相當於為 PV 設置了一個分類,PVC 可以指定 class 申請相應 class 的 PV。
⑤ 指定 PV 在 NFS 服務器上對應的目錄。
創建 mypv1:

STATUS 為 Available,表示 mypv1 就緒,可以被 PVC 申請。
接下來創建 PVC mypvc1,配置文件 nfs-pvc1.yml 如下:

PVC 就很簡單了,只需要指定 PV 的容量,訪問模式和 class。
創建 mypvc1:

從 kubectl get pvc 和 kubectl get pv 的輸出可以看到 mypvc1 已經 Bound 到 mypv1,申請成功。
接下來就可以在 Pod 中使用存儲了,Pod 配置文件 pod1.yml 如下:

與使用普通 Volume 的格式類似,在 volumes 中通過 persistentVolumeClaim 指定使用 mypvc1 申請的 Volume。
創建 mypod1:

驗證 PV 是否可用:

可見,在 Pod 中創建的文件 /mydata/hello 確實已經保存到了 NFS 服務器目錄 /nfsdata/pv1 中。
如果不再需要使用 PV,可用刪除 PVC 回收 PV,下節我們詳細討論。
書籍:
1.《每天5分鍾玩轉Kubernetes》
https://item.jd.com/26225745440.html
2.《每天5分鍾玩轉Docker容器技術》
https://item.jd.com/16936307278.html
3.《每天5分鍾玩轉OpenStack》
https://item.jd.com/12086376.html
