建議將Pod的數據放入某個持久卷中,以便即便Pod終止後也能夠使用這些數據。在Kubernetes(k8s)中,能夠在Pod中使用基於NFS的持久卷。在本文中,咱們將學習如何配置持久卷和持久卷聲明,而後咱們將討論如何經過k8s pod中的聲明名稱使用持久卷。html
我假設咱們有一個功能正常的k8s集羣和NFS Server。如下是實驗室設置的詳細信息:linux
注意: 確保能夠從worker節點訪問NFS服務器,並嘗試在每一個worker節點上安裝nfs共享以進行測試。nginx
在nfs共享中建立一個index.html文件,由於咱們將在本文後面的nginx pod中掛載該共享。vim
[kadmin@k8s-master ~]$ echo "Hello, NFS Storage NGINX" > /opt/k8s-pods/data/index.html
要在K8s中建立基於NFS的持久卷,請在主節點上使用如下內容建立yaml文件:api
[kadmin@k8s-master ~]$ vim nfs-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle storageClassName: nfs mountOptions: - hard - nfsvers=4.1 nfs: path: /opt/k8s-pods/data server: 192.168.1.40
保存並退出文件服務器
如今使用上面建立的yaml文件建立持久卷,運行:curl
[kadmin@k8s-master ~]$ kubectl create -f nfs-pv.yaml persistentvolume/nfs-pv created [kadmin@k8s-master ~]$
運行如下kubectl命令以驗證持久卷的狀態:ide
[kadmin@k8s-master ~]$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-pv 10Gi RWX Recycle Available nfs 20s [kadmin@k8s-master ~]$
以上輸出確認PV已成功建立而且可用。學習
要在Pod內掛載持久卷,咱們必須指定其持久卷聲明。所以,讓咱們使用如下YAML文件建立持久卷聲明:測試
[kadmin@k8s-master ~]$ vi nfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: storageClassName: nfs accessModes: - ReadWriteMany resources: requests: storage: 10Gi
保存並退出文件。
運行下面的kubectl命令以使用上面的yaml文件建立pvc:
[kadmin@k8s-master ~]$ kubectl create -f nfs-pvc.yaml persistentvolumeclaim/nfs-pvc created [kadmin@k8s-master ~]$
執行完上述操做後,控制平面將使用相同的存儲類名稱查找知足聲明要求的持久卷,而後將聲明綁定到持久卷,示例以下所示:
[kadmin@k8s-master ~]$ kubectl get pvc nfs-pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-pvc Bound nfs-pv 10Gi RWX nfs 3m54s [kadmin@k8s-master ~]$ [kadmin@k8s-master ~]$ kubectl get pv nfs-pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-pv 10Gi RWX Recycle Bound default/nfs-pvc nfs 18m [kadmin@k8s-master ~]$
以上輸出確認聲明(nfs-pvc)與持久卷(nfs-pv)綁定。
如今咱們準備在pod旁邊使用基於nfs的持久卷。
在yaml文件下面建立一個nginx pod,它將在/usr/share/nginx/html
上掛載持久卷聲明。
[kadmin@k8s-master ~]$ vi nfs-pv-pod apiVersion: v1 kind: Pod metadata: name: nginx-pv-pod spec: volumes: - name: nginx-pv-storage persistentVolumeClaim: claimName: nfs-pvc containers: - name: nginx image: nginx ports: - containerPort: 80 name: "nginx-server" volumeMounts: - mountPath: "/usr/share/nginx/html" name: nginx-pv-storage
保存並關閉文件。
如今使用上面的yaml文件建立pod,運行:
[kadmin@k8s-master ~]$ kubectl create -f nfs-pv-pod.yaml pod/nginx-pv-pod created [kadmin@k8s-master ~]$ [kadmin@k8s-master ~]$ kubectl get pod nginx-pv-pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-pv-pod 1/1 Running 0 66s 172.16.140.28 k8s-worker-2 <none> <none> [kadmin@k8s-master ~]$
注意:要獲取有關pod的更多詳細信息,可以使用 kubectl describe pod <pod-name>
命令。
以上命令輸出確認已成功建立容器。如今嘗試使用curl命令訪問nginx頁面:
[kadmin@k8s-master ~]$ curl http://172.16.140.28 Hello, NFS Storage NGINX [kadmin@k8s-master ~]$
完美,上面curl
命令的輸出確認了持久卷已正確掛載到pod中,由於咱們能夠獲取NFS共享上index.html
文件的內容。
做者:Pradeep Kumar 譯者:Yue Yong
原文來自:https://www.linuxtechi.com/configure-nfs-persistent-volume-kubernetes