环境准备:
一 nfs软件的安装
master,node1,node2上安装 nfs-utils
yum -y install nfs-utils
systemctl start nfs
systemctl enable nfs
二 nfs的配置
通过/etc/exports文件来配置nfs共享出去的目录
1 #/etc/exports 文件的第一行代表一个共享目录,如果需要多个目录可以配置多行 2 #/ifs/kubernetes 表示要共享出去的目录 3 #* 代表对所有网络的主机共享 4 #rw 对共享目录的权限 5 #no_root_squash 表示共享目录的使用者如果是以root登陆的话对该共享目录有root权限 6 #root_squash 表示共享目录的使用者如果是以root登陆的话对该共享目录的权限仍然是noboday 7 [root@node2 ~]# cat /etc/exports 8 /ifs/kubernetes *(rw,no_root_squash) 9 [root@node2 ~]# 10 [root@node2 ~]# mkdir -p /ifs/kubernetes 11 [root@node2 ~]# systemctl restart nfs
在k8s环境中使用nfs之间,要先验证一下普通模式的nfs功能是正常的
1 [root@node2 ~]# showmount -e 2 Export list for node2: 3 /ifs/kubernetes * 4 [root@node2 ~]# #master节点把nfs的共享目录/ifs/kubernetes 挂载到本地的/mnt下 5 #目前已实现master与node2之间文件的共享 6 [root@master ~]# mount -t nfs 192.168.1.63:/ifs/kubernetes /mnt 7 [root@master ~]# umount /mnt
配置步骤:
1 #使用指令从nginx镜像中生成一个deployment文件删除deployment.yaml文件中的时间戳,并添加volumes 2 [root@master ~]# kubectl create deploy web --image=nginx --dry-run -o yaml >deployment.yaml 3 [root@master ~]# vim deployment.yaml 4 apiVersion: apps/v1 5 kind: Deployment 6 metadata: 7 creationTimestamp: null 8 apiVersion: apps/v1 9 kind: Deployment 10 metadata: 11 labels: 12 app: web 13 name: web 14 spec: 15 replicas: 1 16 selector: 17 matchLabels: 18 app: web 19 strategy: {} 20 template: 21 metadata: 22 labels: 23 app: web 24 spec: 25 containers: 26 - image: nginx 27 name: nginx 28 resources: {} 29 volumeMounts: #在nginx容器中定义一个卷 30 - name: data #卷的名字是 data,与vloumes中的name要保持一致 31 mountPath: /usr/share/nginx/html #定义共享卷需要挂载到该容器的哪个目录 32 33 volumes: #定义一个卷 34 - name: data #卷的名字是data 35 nfs: #卷的类型是nfs 36 server: 192.168.1.63 #nfs的server端地址是192.168.1.63 37 path: /ifs/kubernetes #卷的物理目录是/ifs/kubernetes 38 39 #创建这个应用并进入到容器中查看nfs共享是否成功 40 [root@master ~]# kubectl apply -f deployment.yaml 41 deployment.apps/web created 42 [root@master ~]# 43 [root@master ~]# kubectl get pods 44 45 [root@master ~]# kubectl get pods 46 NAME READY STATUS RESTARTS AGE 47 web-5446c4bc6-fn2rx 1/1 Running 0 53s 48 [root@master ~]# #进入到容器中查看nfs的共享目录是否成功 49 [root@master ~]# kubectl exec -it web-5446c4bc6-fn2rx -- bash 50 root@web-5446c4bc6-fn2rx:/# ls /usr/share/nginx/html/ 51 a.txt 52 root@web-5446c4bc6-fn2rx:/# exit 53 #为该pod中创建3个副本这三个pod中可以实现数据共享 54 #进入到这三个容器中的任何一个,在/usr/share/nginx/html 55 #下都可以看到nfs服务器共享的数据a.txt 56 [root@master ~]# kubectl scale deploy web --replicas=3 57 [root@master ~]# kubectl get pods 58 NAME READY STATUS RESTARTS AGE 59 web-5446c4bc6-fn2rx 1/1 Running 0 16m 60 web-5446c4bc6-k5bpt 1/1 Running 0 19s 61 web-5446c4bc6-wxgjn 1/1 Running 0 19s 62 [root@master ~]# #进入任意一个容器创建网站首页目录文件 63 [root@master ~]# kubectl exec -it web-5446c4bc6-wxgjn -- bash 64 root@web-5446c4bc6-wxgjn:/# cd /usr/share/nginx/html/ 65 root@web-5446c4bc6-wxgjn:/usr/share/nginx/html# echo "<h1>hello NFS<h1>" > index.html 66 root@web-5446c4bc6-wxgjn:/usr/share/nginx/html# 67 68 #把该pod的服务端口暴露出去以web应用的方式验证数据共享 69 [root@master ~]# kubectl expose deploy web --port=80 --target-port=80 --type=NodePort 70 service/web exposed 71 [root@master ~]# #查看控制器web是否与这三个Pod关联 72 [root@master ~]# kubectl get ep 73 NAME ENDPOINTS AGE 74 kubernetes 192.168.1.61:6443 90d 75 web 10.244.1.100:80,10.244.1.99:80,10.244.2.108:80 34s 76 [root@master ~]# 77 78 [root@master ~]# kubectl get svc 79 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 80 kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 90d 81 web NodePort 10.109.22.164 <none> 80:32477/TCP 2m49s 82 [root@master ~]#
浏览器中访问任意node节点IP+32477即可以看到web返回的helo NFS
原文:https://www.cnblogs.com/sven-pro/p/14407147.html