环境准备:

一  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

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!