zoukankan      html  css  js  c++  java
  • pod的数据持久化2 NFS

    环境准备:

    一  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

  • 相关阅读:
    Oracle进程
    Oracle 内存管理
    oracle 数据文件管理
    Oracle表空间
    EM配置问题
    Oracle 常用命令
    Oracle体系结构
    Orcale 数据加载
    Oracle学习笔记(1)
    设计模式-23种参考模式
  • 原文地址:https://www.cnblogs.com/sven-pro/p/14407147.html
Copyright © 2011-2022 走看看