環境準備:
一 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.uj5u.com/qita/260248.html
標籤:其他
