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

10/27 16:03
阅读数 25

建议将Pod的数据放入某个持久卷中,以便即使Pod终止后也可以使用这些数据。在Kubernetes(k8s)中,可以在Pod中使用基于NFS的持久卷。在本文中,我们将学习如何配置持久卷和持久卷声明,然后我们将讨论如何通过k8s pod中的声明名称使用持久卷。

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

我假设我们有一个功能正常的k8s集群和NFS Server。以下是实验室设置的详细信息:

  • NFS服务器IP = 192.168.1.40
  • NFS共享目录 = /opt/k8s-pods/data
  • K8s群集 = 一个主节点和两个工作节点

注意: 确保可以从worker节点访问NFS服务器,并尝试在每个worker节点上安装nfs共享以进行测试。

在nfs共享中创建一个index.html文件,因为我们将在本文后面的nginx pod中挂载该共享。

[kadmin@k8s-master ~]$ echo "Hello, NFS Storage NGINX" > /opt/k8s-pods/data/index.html

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

要在K8s中创建基于NFS的持久卷,请在主节点上使用以下内容创建yaml文件:

[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文件创建持久卷,运行:

[kadmin@k8s-master ~]$ kubectl create -f nfs-pv.yaml
persistentvolume/nfs-pv created
[kadmin@k8s-master ~]$

运行以下kubectl命令以验证持久卷的状态:

[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

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部