環境準備:html
一 nfs軟件的安裝
master,node1,node2上安裝 nfs-utils
yum -y install nfs-utils
systemctl start nfs
systemctl enable nfsnode
二 nfs的配置nginx
經過/etc/exports文件來配置nfs共享出去的目錄web
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功能是正常的vim
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
配置步驟:api
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瀏覽器