如何在Kubernetes中配置基於NFS的持久卷

建議將Pod的數據放入某個持久卷中,以便即便Pod終止後也能夠使用這些數據。在Kubernetes(k8s)中,能夠在Pod中使用基於NFS的持久卷。在本文中,咱們將學習如何配置持久卷和持久卷聲明,而後咱們將討論如何經過k8s pod中的聲明名稱使用持久卷。html

如何在Kubernetes中配置基於NFS的持久卷

我假設咱們有一個功能正常的k8s集羣和NFS Server。如下是實驗室設置的詳細信息:linux

  • NFS服務器IP = 192.168.1.40
  • NFS共享目錄 = /opt/k8s-pods/data
  • K8s羣集 = 一個主節點和兩個工做節點

注意: 確保能夠從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

配置基於NFS的PV(永久卷)

要在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

保存並退出文件服務器

如何在Kubernetes中配置基於NFS的持久卷

如今使用上面建立的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

保存並退出文件。

如何在Kubernetes中配置基於NFS的持久卷

運行下面的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的持久卷。

在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

保存並關閉文件。

如何在Kubernetes中配置基於NFS的持久卷

如今使用上面的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 &lt;pod-name&gt;命令。

以上命令輸出確認已成功建立容器。如今嘗試使用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

相關文章
相關標籤/搜索