• k8s--基础--18.6--存储卷--类型--PVC实践


    k8s–基础–18.6–存储卷–类型–PVC实践


    1、创建pv

    master1节点操作

    1.1、在nfs中创建多个存储目录,在nfs服务器上操作

    # 创建目录
    mkdir /nfs/share3/v{1,2,3,4} -p 
    
    # 设置共享文件配置
    cat >> /etc/exports <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    1.2、怎么把上面存储目录做成pv

    # 查看pv的创建方法
    kubectl explain pv 
    # 查看怎么把nfs定义成pv
    kubectl explain pv.spec.nfs 
    
    • 1
    • 2
    • 3
    • 4

    1.3、创建pv

    pv是集群级别的资源,不需要定义namespace

    1.3.1、脚本

    vi /root/test2/pv.yaml  
    
    
    • 1
    • 2

    内容

    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  v1
    spec:
      capacity:
        # pv的存储空间容量
        storage: 100Mi
        # 访问模板
      accessModes: ["ReadWriteOnce"]
      nfs:
        # 把nfs的存储空间创建成pv
        path: /nfs/share3/v1
        server: 192.168.187.154
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  v2
    spec:
      capacity:
          storage: 200Mi
      accessModes: ["ReadWriteMany"]
      nfs:
        path: /nfs/share3/v2
        server: 192.168.187.154
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  v3
    spec:
      capacity:
          storage: 300Mi
      accessModes: ["ReadOnlyMany"]
      nfs:
        path: /nfs/share3/v3
        server: 192.168.187.154
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  v4
    spec:
      capacity:
          storage: 400Mi
      accessModes: ["ReadWriteOnce","ReadWriteMany"]
      nfs:
        path: /nfs/share3/v4
        server: 192.168.187.154
    
    
    • 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
    • 51
    • 52

    1.3.1.1、accessModes字段说明

    kubectl explain pv.spec.accessModes
    
    
    • 1
    • 2

    在这里插入图片描述

    1.3.2、执行

    kubectl  apply  -f /root/test2/pv.yaml  
    # 查看
    kubectl   get pv   
    
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2、创建pvc

    master1节点操作

    2.1、查看字段定义

    # 其他字段不懂通过explain来查看
    kubectl explain pvc
    
    • 1
    • 2

    2.2、创建脚本

    vi /root/test2/pvc-v1.yaml
    
    • 1

    内容

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # pvc名称
      name: pvc-v1
    spec:
      # 访问模式
      accessModes: ["ReadWriteMany"]
      resources:
        requests:
          # pvC的存储空间容量
          storage: 190Mi
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.3、执行

    kubectl apply -f /root/test2/pvc-v1.yaml
    
    # 查看pv
    kubectl   get pv   
    # 查看pvc
    kubectl   get pvc   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    pvc从pv中选择一个 accessModes包含ReadWriteMany,且容量>=190M的pv。
    上面选择了v2

    3、创建pod

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

    3.1、创建脚本

    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: 
        # 存储卷类型
        - persistentVolumeClaim:
            # pvc名称
            claimName: pvc-v1
          # 存储卷名称
          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

    3.2、执行

    kubectl apply -f /root/test2/pod-nginx-volume.yaml 
    kubectl get pods pod-nginx-volume -o wide
    
    • 1
    • 2

    在这里插入图片描述

    4、测试

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

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

    在这里插入图片描述

    4.2、验证回收策略retain

    pvc和pv绑定,如果使用默认的回收策略retain,那么删除pvc之后,pv会处于released状态

    # 先删除Pod
    kubectl delete -f /root/test2/pod-nginx-volume.yaml  
    
    # 再删除pvc
    kubectl delete -f /root/test2/pvc-v1.yaml 
    # 查看
    kubectl get pv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    我们想要继续使用这个pv,需要手动删除pv,删除pv,不会删除pv里的数据,删除后,在创建pv

    kubectl delete pv v2
    # 查看
    kubectl get pv
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

    删除后,在创建pv

    
    kubectl  apply  -f /root/test2/pv.yaml  
    # 查看
    kubectl get pv
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    当我们重新创建pvc时还会和这个最匹配的pv绑定,数据还是原来数据,不会丢失。

    # 创建pvc
    kubectl apply -f /root/test2/pvc-v1.yaml
    # 查看
    kubectl   get pvc   
    # 进入容器,查看数据是否存在
    kubectl apply -f /root/test2/pod-nginx-volume.yaml 
    kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
    cd /usr/share/nginx/html
    cat index.html
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

  • 相关阅读:
    【接口测试】Jmeter接口实战-Dubbo接口+造10W数据测试(详细)
    【Mybatis编程:统计相册表中的数据的数量】
    iOS开发Swift-5-自动布局AutoLayout-摇骰子App
    【IPC 通信】信号处理接口 Signal API(5)
    游戏动画技术简介
    VideoPipe可视化视频结构化框架新增功能详解(2022-11-4)
    从0到1搭建一个vue项目
    关于椭球的一点形象的解说
    boot-admin整合Liquibase实现数据库版本管理
    Spring之AOP原理及总结
  • 原文地址:https://blog.csdn.net/zhou920786312/article/details/126232889