如何在Kubernetes中配置基于NFS的持久卷
建议将Pod的数据放入某个持久卷中,以便即使Pod终止后也可以使用这些数据。 在Kubernetes(k8s)中,可以在Pod中使用基于NFS的持久卷。 在本文中,我们将学习如何配置持久卷和持久卷声明,然后我们将讨论如何通过k8s pod中的声明名称使用持久卷。
我假设我们有一个功能正常的k8s集群和NFS服务器。 以下是实验室设置的详细信息,
- NFS服务器IP = 192.168.1.40
- NFS共享= / opt / k8s-pods / data
- K8s群集=一个主节点和两个工作节点
注意: 确保可以从工作程序节点访问NFS服务器,并尝试在每个工作程序上安装nfs共享一次以进行测试。
在nfs共享中创建一个Index.html文件,因为我们将在本文后面的nginx pod中安装此共享。
[[email protected] ~]$ echo "Hello, NFS Storage NGINX" > /opt/k8s-pods/data/index.html
配置基于NFS的PV(永久卷)
要在K8s中创建基于NFS的持久卷,请在主节点上使用以下内容创建yaml文件,
[[email protected] ~]$ 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文件创建持久卷,运行
[[email protected] ~]$ kubectl create -f nfs-pv.yaml persistentvolume/nfs-pv created [[email protected] ~]$
运行以下kubectl命令以验证持久卷的状态
[[email protected] ~]$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-pv 10Gi RWX Recycle Available nfs 20s [[email protected] ~]$
以上输出确认PV已成功创建并且可用。
配置持久卷声明
要在容器中安装持久性卷,我们必须指定其持久性卷声明。 因此,让我们使用以下yaml文件创建持久卷声明
[[email protected] ~]$ vi nfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: storageClassName: nfs accessModes: - ReadWriteMany resources: requests: storage: 10Gi
保存并退出文件。
运行下面的kubectl命令以使用上面的yaml文件创建pvc,
[[email protected] ~]$ kubectl create -f nfs-pvc.yaml persistentvolumeclaim/nfs-pvc created [[email protected] ~]$
执行完上述操作后,控制平面将使用相同的存储类名称查找满足声明要求的持久卷,然后将声明绑定到持久卷,示例如下所示:
[[email protected] ~]$ kubectl get pvc nfs-pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-pvc Bound nfs-pv 10Gi RWX nfs 3m54s [[email protected] ~]$ [[email protected] ~]$ 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 [[email protected] ~]$
上面的输出确认声明(nfs-pvc)与持久卷(nfs-pv)绑定。
现在我们准备在pod旁边使用基于nfs的持久卷。
在Pod中使用基于NFS的持久卷
在yaml文件下面创建一个nginx pod,它将在’/ usr / share / nginx / html’上挂载持久卷声明
[[email protected] ~]$ 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,运行
[[email protected] ~]$ kubectl create -f nfs-pv-pod.yaml pod/nginx-pv-pod created [[email protected] ~]$ [[email protected] ~]$ 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> [[email protected] ~]$
注意: 要获取有关pod的更多详细信息,kubectl描述pod
以上命令输出确认已成功创建容器。 现在尝试使用curl命令访问nginx页面
[[email protected] ~]$ curl http://172.16.140.28 Hello, NFS Storage NGINX [[email protected] ~]$
完美的是,上面curl命令的输出确认了持久卷已正确安装在pod中,因为我们正在获取NFS共享上存在的index.html文件的内容。
到此结束本文,我相信你们对如何在Kubernetes容器内配置和使用基于NFS的持久卷有了一些基本的想法。
另请阅读 : 如何使用Kubeadm设置高可用性Kubernetes集群