pd的數據持久化之2 NFS

環境準備: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瀏覽器

相關文章
相關標籤/搜索