zoukankan      html  css  js  c++  java
  • Kubernetes Pv & Pvc

    Kubernetes PV & pvc


    介绍

    PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节。管理员关注于如何通过pv提供存储功能而无需
    关注用户如何使用,同样的用户只需要挂载pvc到容器中而不需要关注存储卷采用何种技术实现。
    pvc和pv的关系与pod和node关系类似,前者消耗后者的资源。pvc可以向pv申请指定大小的存储资源并设置访问模式,这就可以通过Provision -> Claim 的方式,来对存储资源进行控制。

    生命周期

    pv和pvc遵循以下生命周期:

    • 供应准备。通过集群外的存储系统或者云平台来提供存储持久化支持。
      - 静态提供:管理员手动创建多个PV,供PVC使用。
      - 动态提供:动态创建PVC特定的PV,并绑定。

    • 绑定。用户创建pvc并指定需要的资源和访问模式。在找到可用pv之前,pvc会保持未绑定状态。

    • 使用。用户可在pod中像volume一样使用pvc。

    • 释放。用户删除pvc来回收存储资源,pv将变成“released”状态。由于还保留着之前的数据,这些数据需要根据不同的策略来处理,否则这些存储资源无法被其他pvc使用。

    • 回收(Reclaiming)。pv可以设置三种回收策略:保留(Retain),回收(Recycle)和删除(Delete)。
      - 保留策略:允许人工处理保留的数据。
      - 删除策略:将删除pv和外部关联的存储资源,需要插件支持。
      - 回收策略:将执行清除操作,之后可以被新的pvc使用,需要插件支持。

        目前只有NFS和HostPath类型卷支持回收策略,AWS EBS,GCE PD,Azure Disk和Cinder支持删除(Delete)策略。
      

    Provisioning

    两种方式提供的PV资源供给:

    • static

        通过集群管理者创建多个PV,为集群“使用者”提供存储能力而隐藏真实存储的细节。并且存在于kubenretes api中,可被直接使用。
      
    • dynamic

        动态卷供给是kubernetes独有的功能,这一功能允许按需创建存储建。在此之前,集群管理员需要事先在集群外由存储提供者或者云提供商创建
      

    存储卷,成功之后再创建PersistentVolume对象,才能够在kubernetes中使用。动态卷供给能让集群管理员不必进行预先创建存储卷,而是随着用户需求
    进行创建。在1.5版本提高了动态卷的弹性和可用性。

        在此前1.4版本中加入了一个 新的 API 对象 StorageClass,可以定义多个 StorageClass 对象,并可以分别指定存储插件、设置参数,用于提
    

    供不同的存储卷。这样的设计让集群管理员能够在同一个集群内,定义和提供不同类型的、不同参数的卷(相同或者不同的存储系统)。这样的设计还确
    保了最终用户在无需了解太多的情况下,有能力选择不同的存储选项。

    PV类型

    pv支持以下类型:

    • GCEPersistentDisk
    • AWSElasticBlockStore
    • NFS
    • iSCSI
    • RBD (Ceph Block Device)
    • Glusterfs
    • AzureFile
    • AzureDisk
    • CephFS
    • cinder
    • FC
    • FlexVolume
    • Flocker
    • PhotonPersistentDisk
    • Quobyte
    • VsphereVolume
    • HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)

    PV属性:

    • 访问模式,与pv的语义相同。在请求资源时使用特定模式。
    • 资源,申请的存储资源数额。

    PV卷阶段状态:

    • Available – 资源尚未被claim使用
    • Bound – 卷已经被绑定到claim了
    • Released – claim被删除,卷处于释放状态,但未被集群回收。
    • Failed – 卷自动回收失败

    AwsElasticBlockServer 静态PV示例

    需要满足以下条件方可使用EBS:

    • Pod运行的节点必须为AWS EC2实例
    • 这些示例需要和EBS在同一个区域和可用区域
    • EBS只支持一个EC2挂载一个卷
    • RC或者Deployment 副本集只能为1。

    1. 创建PV(Persistent Volume)

    $ vim ebs-pv.yaml

        apiVersion: v1
        kind: PersistentVolume
        metadata:
          name: ebs-pv
          labels:
            type: amazonEBS
        spec:
          capacity:
            storage: 5Gi
          accessModes:
            - ReadWriteOnce
          awsElasticBlockStore:
            volumeID: vol-079c492115a7be6e1
            fsType: ext4
    

    $ kubectl create -f ebs-pv.yaml

        persistentvolume "ebs-pv" created
    

    2. 创建PVC(Persistent Volume Claim)

    $ vim nginx-pvc.yaml

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata:
          name: nginx-pvc
          labels:
            type: amazonEBS
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 5Gi
    

    $ kubectl create -f nginx-pvc.yaml

        persistentvolumeclaim "nginx-pvc" created
    

    3.创建deployment服务使用pvc资源

    $ vim nginx-with-pvc.yaml

        apiVersion: extensions/v1beta1
        kind: Deployment
        metadata:
          name: nginx-with-pvc
        spec:
          replicas: 1
          template:
            metadata:
              labels:
                service: nginx
                app: test
            spec:
              containers:
              - image: nginx
                name: nginx-with-pvc
                volumeMounts:
                - mountPath: /test-ebs
                  name: my-pvc
              volumes:
              - name: my-pvc
                persistentVolumeClaim:
                  claimName: nginx-pvc
    

    kubectl create -f nginx-with-pvc.yaml

        Deployment "nfs-web" created
    

    注意事项

        - 由于aws ebs限制一个ebs只能同时挂载一个ec2,在使用基于pvc的pod时,建议使用replicas=1来创建一个部署集。StatefulSet可解决数据库集群问题。
        - pod迁移,pvc迁移(卸载旧实例/挂载新实例)默认35秒。
        - 通过deployemnt部署,删除deployment之后,可重新挂载原有pvc到新的pod里面。
        - 当pod被删除,同时删除依赖的pvc,pv状态变更为release。此时不能被其他pvc使用,aws ebs需要delete pv重建。目前不支持通过手动回收
    


    - 已经被pvc绑定的pv可以被删除,删除后对应的pvc仍为Bound状态。如有pod正在使用此pvc则仍可使用。如无pod使用,则创建pod挂载此pvc时
    会出现失败。
    - pv可以在绑定后被编辑(如访问模式,容量),导致信息与对应的pvc不一致




    链接:https://www.jianshu.com/p/fda9de00ba5f

  • 相关阅读:
    正则表达式
    小弟新从csdn搬迁到博客园,欢迎大家关注
    做完牛腩新闻发布系统之后的收获(牛腩总结)
    ValidateRequest="false" 无效
    sql server小技巧-自动添加时间与主键自增长
    css初接触
    Spark的Rpct模块的学习
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/10023750.html
Copyright © 2011-2022 走看看