zoukankan      html  css  js  c++  java
  • Kubernetes-PersistentVolumeClaim(PVC)介绍

    1 PVC介绍

      PVC是用户层面,作为对存储资源的需求申请,主要包括了存储空间大小、访问模式、PV的选择条件、存储类别等信息的设置。

    2 PVC的参数详解

    2.1 PVC的yaml模板

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata: 
      name: test-pvc1
    spec: 
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs-stoarge
      selector:
      	matchLabels:
      	  pv: test-pv1
    

    2.2 PVC参数说明

    1. spec.accessModes:访问模式;描述用户应用对存储资源的访问权限。
    • RWO:ReadWriteOnce,仅允许单个节点挂载进行读写;
    • ROX:ReadOnlyMany,允许多个节点挂载且只读;
    • RWX:ReadWriteMany,允许多个节点挂载进行读写;
    1. spec.resources.requests.storage:资源请求的存储大小;
    2. spec.storageClassName:存储卷模式,指定一个StorageClass资源对象的名称,具有特定类别的PV只能与请求了该类别的PVC进行绑定;(动态存储);当然,也可以设置为spec.storageClassName=“”,未设置特定类型的PV只能与不请求任何类型的PVC进行绑定(静态存储)。
    3. spec.selector.matchLabels: PV的选择条件,可以通过标签匹配进行PV绑定;也可以通过spec.selector.matchExpressions进行条件标签描述;

    3 PVC的生命周期

    $ kubectl get pvc
    PVC生命周期
    PVC一共也有4个生命周期阶段:Available/Bound/Released/Failed

    • Available: 可用状态,无PV绑定;
    • Bound:绑定状态,已经和某个PV绑定;
    • Released:释放状态,被绑定的PV已删除,资源释放,但没有被集群回收;
    • Failed:失败状态,自动资源回收失败;

    4 PVC的常用命令

    1. 创建(yaml的方式)
      $ kubectl create -f pvc.yaml
    2. 删除
      $ kubectl delete pvc pvc_name
    3. 查看所有PVC
      $ kubectl get pvc
    4. 查看某个PVC
      $ kubectl get pvc pvc_name
    5. 查看详情
      $ kubectl describe pvc pvc_name
      注意: 若在某个命名空间下,以上命令可以加上-n ns_name

    5 PVC和PV的绑定

    5.1 PV和PVC的生命周期

    生命周期

    by 《k8s 权威指南》

    其实,使用共享存储就几步:
    Pod(Deployment等配置好PVC)—>PVC—>PV—>存储资源。

    1. 资源供应
      PVC使用存储资源可以通过静态绑定或者动态绑定,静态模式就是集权管理员预先创建对应的PV对存储特性进行设置;动态模式就是集权管理员预先创建好StorageClass资源对后端存储进行描述,PVC创建时对存储类型进行声明,PVC创建后,k8s会自动创建合适的PV与PVC进行绑定。

    2. 资源绑定
      创建好PVC后,PVC会在已存在的PV中选择合适的PV进行绑定(可以通过标签进行特定绑定,也可以不通过标签,系统会自动选择合适(容量大小等参数)的PV进行绑定。),绑定成功,状态变成Bound,且该PV被对应的PVC独占绑定,不可以再被其他PVC绑定,除非该PVC释放。若在k8s系统中没有找到合适的PV,则PVC一直处于Pending状态。

    3. 资源使用
      在Deployment等资源中,通过spec.template.spec.volumes:进行PVC挂载路径设置。

    spec:
      tempeate:
        spec:
          containers:
            - name: container1
              image: image1
              volumeMounts:
                - name: volume1
                  mountPath: /data/dir1
          volumes:
          - name: volume1
            persistentVolumeClaim:
              claimName: pvc1
    
    1. 资源释放
      删除PVC,与该PVC绑定的PV状态就会变成“Released”,该PVC在存储设备上的数据删除后,对应的PV才能与其他的PVC进行绑定。

    2. 资源回收
      PV中可以通过spec.persistentVolumeReclaimPolicy设置回收策略,这个主要用于绑定的PVC删除后,资源释放后如何处理该PVC在存储设备上写入的数据。

    • Retain:保留,删除PVC后,PV保留数据;
    • Recycle:回收空间,删除PVC后,简单的清除文件;(NFS和HostPath存储支持)
    • Delete:删除,删除PVC后,与PV相连接的后端存储会删除数据;(AWS EBS、Azure Disk、Cinder volumes、GCE PD支持)

    5.2 手动创建pv进行绑定

      我们可以通过标签的方式,将pvc绑定到特定的pv上。需要做两步,一个是pv的yaml标签,另一步是pvc的标签匹配。

    静态模式

    by 《k8s权威指南》

    举例

    1. pv的yaml需要有metadata.labels进行标签标记;
      如:
    [root@k8s /pv_test]#  vim test_pv1.yaml 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: test-pv1
      labels:
        pv: test-pv1
    spec:
      capacity:
        storage: 2Mi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /date-nfs/k8s
        server: 10.139.12.14
    
    1. pvc的yaml里需要有spec.selector.matchLabels进行标签匹配。
    [root@k8s /pvc_test]#  vim test_pvc1.yaml 
    #persistent Volume Claim
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pvc1
      namespace: t1
    spec:
      #storageClassName: managed-nfs-storage
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Mi
      selector:
        matchLabels:
          pv: test-pv1
    
    • 创建pv和pvc
      $ kubectl create -f test_pv.yaml
      $ kubectl create -f test_pvc.yaml

    • 查看pv
      $ kubectl get pv test-pv1
      在这里插入图片描述

    • 查看pvc
      $ kubectl get pvc test-pvc1
      在这里插入图片描述
      我们可以看出test-pvc1持久卷声明绑定到了test-pv1这个持久卷上了。

    5.3 动态卷配置StorageClass

    除了pvc绑定手动创建pv的方式,我们还可以通过动态卷配置StorageClass跳过手动pv的方式。

    动态模式

    by 《k8s权威指南》

    1. 我们先要创建一个StorageClass资源。
    [root@k8s /sc_test]#  vim test_storageclass1.yaml 
    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: course-nfs-storage
    provisioner: fuseim.pri/ifs
    
    
    1. 然后在pvc的yaml中增加spec.storageClassName进行配置。
    [root@k8s /pvc_test]#  vim test_pvc_sc.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pvc
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: course-nfs-storage
      resources:
        requests:
          storage: 1Mi
    
    • 创建StorageClass和PVC资源
      $ kubectl create -f test_storageclass1.yaml
      $ kubectl create -f test_pv_sc.yaml

    • 查看SC
      $ kubectl get sc course-nfs-storage
      在这里插入图片描述

    • 查看SC详情
      $ kubectl describe sc course-nfs-storage
      在这里插入图片描述

    • 查看PVC
      $ kubectl get pvc test-pvc
      在这里插入图片描述

    • 查看PV
      $ kubectl get pv
      在这里插入图片描述
      可以看到一个自动创建的pv,它的策略是Delete,即pvc删除后会自动删除。

  • 相关阅读:
    君のことが好きだよ。
    [拓展Bsgs] Clever
    同余方程笔记
    [HAOI2008] 糖果传递
    [USACO10DEC] Treasure Chest
    [APIO2007] 风铃
    Luogu_2015 二叉苹果树
    关于高精度
    关于博弈论
    关于DP和背包
  • 原文地址:https://www.cnblogs.com/Andya/p/12443849.html
Copyright © 2011-2022 走看看