前文总结了emptyDir和hostpath两种从0开始搞K8S:存储卷,这篇了解一下nfs存储卷

在Kubernetes中直接将NFS存储卷使用在Pod中,可以通过定义Pod的YAML配置文件来实现。以下是一个详细的步骤和示例,帮助你了解如何在Pod中直接使用NFS存储卷:

配置NFS服务器

具体参考从0开始搞K8S:PV

在Kubernetes集群中配置NFS客户端

在k8s集群的所有node节点上安装nfs客户端,这是必须的,k8s并没有内置nfs挂载功能。

Ubuntu

sudo apt install -y nfs-common

CentOS

yum install -y nfs-utils

定义Pod的YAML配置文件

创建一个Pod的YAML配置文件,例如pod-with-nfs.yaml,并定义以下内容:

apiVersion: v1  
kind: Pod  
metadata:  
  name: pod-with-nfs  
spec:  
  containers:  
    - name: my-container  
      image: busybox
      command: ["/bin/sh", "-c", "sleep 600"]
      volumeMounts:  
        - name: nfs-volume  
          mountPath: /mnt/nfs  
  volumes:  
    - name: nfs-volume  
      nfs:  
        server: 192.168.0.190 # 替换为NFS服务器的IP地址  
        path: /opt/nfs/data # 替换为NFS服务器上共享的目录路径  
        readOnly: false # 根据需要设置只读或读写

在上面的配置中,volumeMounts部分定义了容器内部挂载NFS存储卷的目录(/mnt/nfs),而volumes部分则指定了NFS服务器的地址(server)和共享的目录路径(path)。

使用kubectl命令应用Pod的YAML配置文件,以创建Pod并挂载NFS存储卷:

kubectl apply -f pod-with-nfs.yaml

如果Pod创建成功,并且NFS存储卷已成功挂载到容器中,则你可以在容器内部通过/mnt/nfs目录访问NFS存储卷中的数据。

验证

在nfs上创建文件

date > /opt/nfs/data/now

查看pod内文件

kubectl exec pod-with-nfs -- cat /mnt/nfs/now

从0开始搞K8S:存储卷 nfs_数据卷


注意事项

  • 确保NFS服务器的IP地址和共享的目录路径在Pod的YAML配置文件中正确无误。
  • 如果NFS服务器需要身份验证,你可能需要在Pod的YAML配置文件中添加相应的身份验证信息。
  • NFS存储卷的内容在Pod被删除时不会被删除,而是被卸载。这意味着你可以预先在NFS服务器上填充数据,并在多个Pod之间共享这些数据。
  • NFS支持多个客户端同时挂载同一个共享目录,因此你可以创建多个Pod并挂载同一个NFS存储卷。但是,如果NFS服务器宕机,数据将会丢失,因此建议在使用NFS作为存储解决方案时考虑备份和容灾措施。