摘要:它的原理比较简单,在服务端创建目录A,然后在客户机上创建一个目录B,最后用A来挂载B,那么客户端再打开本地的B目录就相当于打开A目录,这样就实现了共享。对于服务端来说,就像是开了一个服务器,拓扑图如下:
它的原理比较简单,在服务端创建目录A,然后在客户机上创建一个目录B,最后用A来挂载B,那么客户端再打开本地的B目录就相当于打开A目录,这样就实现了共享。对于服务端来说,就像是开了一个服务器,拓扑图如下:
nfs的好处在于它是通过网络协议通信的,可以远程访问。
上一篇讲到hostPath,它也有缺点,就是绑定了机器,比如说Pod换个机器运行时,说不定就没有绑定的那个目录或文件了,可以认为是节点级别的,而nfs是统一的服务端,大家都可以从这个端挂载目录,就像我们都可以打开百度网页一样,属于集群级别的,因此区别一目了然,在实际工作中需要哪种模式可以看场景。
下面写下NFS安装和具体操作。
(1)在每台机器上都安装nfs-utils
yum install -y nfs-utilsnfs-utils包括客户端和服务端的工具软件。
(2)挑选一台机器充当服务端(我这里选择k8s的master节点),在上面执行命令
# 在master 执行以下命令 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports# 执行以下命令,启动 nfs 服务;创建共享目录mkdir -p /nfs/data# 在master执行systemctl enable rpcbindsystemctl enable nfs-serversystemctl start rpcbindsystemctl start nfs-server# 使配置生效exportfs -r#检查配置是否生效exportfs(3)在客户机上执行下面命令
#查看master的挂载目录showmount -e 192.168.234.100#创建本地目录mkdir -p /nfs/data#映射master的目录mount -t nfs \192.168.234.100:/nfs/data /nfs/data经过上面几步,就将服务端和客户端配置完成了。
需求:
我有一个nginx的Pod,想把它的主页目录映射到NFS的目录上,那么我这个nginx无论调度到哪台机器上,都可以从NFS中读取主页。
/nfs/data/nginx-pv是共享的NFS目录,/usr/share/nginx/html是Nginx默认网页的根目录,用/nfs/data/nginx-pv来挂载/usr/share/nginx/html,这样就可以从NFS中读取主页了。
#创建用于nginx映射的目录mkdir -p /nfs/data/nginx-pv#在此目录中创建一个index.html文件用于观察结果vim index.htmlhello nginx!!!
#配置文件名:nginx-deploy-nfs-test.ymlapiVersion: apps/v1kind: Deploymentmetadata:labels:app: nginx-pv-demoname: nginx-pv-demospec:replicas: 2selector:matchLabels:app: nginx-pv-demotemplate:metadata:labels:app: nginx-pv-demospec:containers:- image: nginxname: nginxports:- containerPort: 80volumeMounts:- name: html # 卷挂载名称,与下面 volumes 对应mountPath: /usr/share/nginx/html # Nginx 默认网页根目录volumes:- name: html # 卷名称nfs:server: 192.168.234.100 # NFS 服务器 IPpath: /nfs/data/nginx-pv # NFS 共享目录路径readOnly: false # 可读写(默认)k8s执行部署
kubectl apply -f nginx-deploy-nfs-test.yml(1)查看Pod地址
kubectl get pods -o wide#可以看到两个Pod的地址:10.244.36.11210.244.36.107(2)执行curl
curl 10.244.36.112#看到正确的结果:hello nginx!!!
#删除deploykubectl delete deploy nginx-pv-demo#删除部署文件rm -rf nginx-deploy-nfs-test.yml来源:恋爱脑一点号
