• k8s--基础--18.4--存储卷--类型--NFS


    k8s–基础–18.4–存储卷–类型–NFS


    1、介绍

    1.1、 NFS概念

    1. NFS是一种基于TCP/IP传输的网络文件系统协议。
    2. 通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源

    1.2、 注意

    1. nfs支持多个客户端挂载,可以在多创建几个pod,挂载同一个nfs服务器
    2. nfs如果宕机了,数据也就丢失了,需要使用分布式存储,常见的分布式存储有glusterfs和cephfs。

    2、搭建NFS服务端

    在master1上操作
    参考资料

    https://blog.csdn.net/zhou920786312/article/details/124919461
    
    • 1

    2.1、安装软件包

    # 查看是否安装了 nfs-utils和rpcbind 软件包
    rpm -q rpcbind nfs-utils                  
    
    # 没有则用yum安装
    yum install -y rpcbind nfs-utils  		
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2、设置共享目录

    2.2.1、创建共享目录

    # 创建目录
    mkdir /nfs/share -p
    
    # 给与权限
    chmod 777 /nfs/share
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2.2、编辑配置文件

    # vim /etc/exports	
    /nfs/share 192.168.187.0/24(rw,no_root_squash)
    
    • 1
    • 2

    说明

    1. /nfs/share 允许192.168.187.0/24的客户端访问。
    2. rw:表示允许读写,ro表示为只读;
    3. no_root_squash:表示当客户机以root身份访问时赋予本地root权限

    2.3、启动NFS服务程序

    # 启动
    systemctl start rpcbind.service
    systemctl start nfs
    
    
    
    # 开机自启动
    systemctl enable rpcbind.service
    # 开机自启动
    systemctl enable nfs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4、查看rpcbind是否开启和本机发布的NFS共享目录

    # 查看rpcbind是否开启,rpcbind服务默认使用111端口
    netstat -anpt | grep rpcbind   
    
    # 宣告共享目录
    exportfs -arv
    
    # 查看本机发布的NFS共享目录
    showmount -e 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    3、搭建NFS 客户端

    1. 在node1上操作
    2. 这里是为了测试,可以不做
    3. pod本质就是NFS客户端,这里搭建NFS客户端只是为了验证NFS服务端有没有搭建成功
    https://blog.csdn.net/zhou920786312/article/details/124919461
    
    • 1

    3.1、安装软件包

    # 查看是否安装rpcbind,nfs-utils 
    rpm -q rpcbind nfs-utils  
    # 未安装可以使用yum进行安装                  
    yum install -y rpcbind nfs-utils 
     			
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.2、启动客户端

     
    # 开启 rpcbind服务            
    systemctl start rpcbind			
    # 设置开机自启			
    systemctl enable rpcbind					
    		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.3、手动挂载并查看是否成功

    # 创建目录
    mkdir  /nfs-client-share
    # 手动挂载
    mount 192.168.187.154:/nfs/share /nfs-client-share
    # 查看是否成功
    df -Th | grep /nfs-client-share
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    4、创建有存储卷的pod

    1. 如果原先pod-nginx-volume.yaml已经被使用,需要先删除
    2. 在master1节点上操作
    kubectl delete -f /root/test2/pod-nginx-volume.yaml  
    
    • 1

    4.1、查看字段定义

    # 其他字段不懂通过explain来查看
    kubectl explain pods.spec.volumes.nfs
    
    • 1
    • 2

    4.2、创建脚本

    vi /root/test2/pod-nginx-volume.yaml
    
    • 1

    内容

    apiVersion: v1
    kind: Pod
    metadata:
      # pod的名称
      name: pod-nginx-volume
    spec: 
      containers:
      - name: c-nginx
        image: nginx:1.14
        # 容器挂载存储卷
        volumeMounts:
        # 容器存储卷目录
        - mountPath: /usr/share/nginx/html
          # 引入名称为nginx-volume的存储定义
          name: nginx-volume
      # 设置存储卷定义
      volumes:
        # 存储卷类型
        - nfs: 
            # nfs共享目录
            path: /nfs/share
            # nfs服务端地址
            server: 192.168.187.154
          # 存储卷名称
          name: nginx-volume   
     
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4.3、执行

    kubectl apply -f /root/test2/pod-nginx-volume.yaml 
    
    
    • 1
    • 2

    5、验证

    5.1、查看pod在哪个节点上

    kubectl get pods pod-nginx-volume -o wide
    
    • 1

    在这里插入图片描述

    可以看到pod在node1上。

    5.2、在容器存储卷目录 创建文件

    kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
    cd /usr/share/nginx/html
    echo 'hello' > index.html
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    5.3、可以看到,nfs客户端和服务端都出现了index.html

    在这里插入图片描述

    5.3、访问pod

    在这里插入图片描述

    上面说明挂载nfs存储卷成功了

    6、一个pod多个存储卷

    6.1、nfs服务端配置修改

    在这里插入图片描述

    6.2、重启nfs服务端

    # 重启
    systemctl restart rpcbind.service
    systemctl restart nfs
    # 宣告共享目录
    exportfs -arv
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    6.3、修改pod

    apiVersion: v1
    kind: Pod
    metadata:
      # pod的名称
      name: pod-nginx-volume
    spec: 
      containers:
      - name: c-nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
          protocol: TCP
        # 容器挂载存储卷
        volumeMounts:
        # 容器存储卷目录
        - mountPath: /usr/share/nginx/html
          # 引入名称为nginx-volume的存储定义
          name: nginx-volume
      - name: c-tomcat
        image: tomcat:8.5-jre8-alpine
        ports:
        - containerPort: 8080
          protocol: TCP
        # 容器挂载存储卷
        volumeMounts:
        # 容器存储卷目录
        - mountPath: /tomcat
          # 引入名称为nginx-volume2的存储定义
          name: nginx-volume2   
          
      # 设置存储卷定义
      volumes:
        # 存储卷类型
        - nfs: 
            # nfs共享目录
            path: /nfs/share
            # nfs服务端地址
            server: 192.168.187.154
          # 存储卷名称
          name: nginx-volume   
        # 存储卷类型
        - nfs: 
            # nfs共享目录
            path: /nfs/share2
            # nfs服务端地址
            server: 192.168.187.154
          # 存储卷名称
          name: nginx-volume2   
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    在这里插入图片描述

    6.4、在容器c-nginx,c-tomcat的存储卷目录 创建文件

    kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
    cd /usr/share/nginx/html
    echo 'hello1' > index.html
    
    
    kubectl -it exec  pod-nginx-volume -c c-tomcat -- /bin/sh
    cd /tomcat
    echo 'hello2' > index.html
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6.5、在nfs服务端查看

    在这里插入图片描述

  • 相关阅读:
    Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?
    【Mark】Android intent-filter 中的 action name 允许使用冒号
    Python之文件处理-JSON文件
    Powershell 一键安装 virtio_qemu_agent
    Vue中methods实现原理
    金仓数据库KingbaseES客户端应用参考手册--19. vacuumlo
    聊聊arthas的spring-boot-starter
    Thread的常用方法
    Leetcode: 63. 不同路径 II(动态规划)
    将“万词王”离线转化为“文络之心“插件之一:复现 wantwords Python/Pytorch 开源项目
  • 原文地址:https://blog.csdn.net/zhou920786312/article/details/126232824