美文网首页
2019-12-11 Kubernetes Persistent

2019-12-11 Kubernetes Persistent

作者: 布衣码农 | 来源:发表于2019-12-11 17:51 被阅读0次

    定义

    PV 作为存储资源,主要包括的设置

    • 存储能力
    • 访问模式
    • 存储类型
    • 回收策略
    • 后端存储类型

    PV(Persistent Volume)定义了以后是供PVC(Persistent Volume Claim)使用的

    例子

    #pv
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv1
    spec:
      #容量
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      storageClassName: slow
      nfs:
        path: /tmp
        server: 172.17.0.2
    

    属性包括以下几条

    • 5GiB存储空间
    • 访问模式 ReadWriteOnce
    • 存储类型 slow (要求在系统中已经存在名为slow的StorageClass)
    • 回收策略 Recycle
    • 后端存储类型为nfs

    PV类型支持

    Kubernetes支持的PV类型

    • AWSElasticBlockStore:AWS公有云提供的ElasticBlockStore
    • AzureFile:Azure公有云提供的File
    • AzureDisk:Azure共有云提供的Disk
    • CephFS:一种开源共享存储系统
    • FC(Fibre Channel):光线存储设备
    • Flex Volume:一种插件式的存储机制
    • Flocker:一种开源共享存储系统
    • GCEPersistentDisk:GCE公有云提供的PersistentDisk
    • Glusterfs: 一种开源共享存储系统
    • HostPath:宿主机目录,仅用于单机测试
    • iSCSI:iSCSI存储设备
    • Local:本地存储设备,从Kubernetes 1.7版本引入,到1.14版本更新为稳定版,目前可以通过制定(Block) 设置提供Local PV,或者通过社区开发sig-storage-local-static-provisioner插件来管理Local PV的声明周期
    • NFS:网络文件系统
    • Portworx Volumes:Portworx提供的存储服务
    • Quobyte Volumes:Quabyte提供的存储服务
    • RBD(Ceph Block Device):Ceph块存储
    • ScaleIO Volumes:DellEMC的存储设备
    • StorageOS:StorageOS提供的存储服务
    • VsphereVolume: VMWare提供的存储服务
      每种存储类型都有各自的特性,使用时需要根据他们各自的参数进行设置

    PV的关键配置参数

    1. 存储能力(Capacity)
      描述存储设备具备的能力,目前仅支持对存储空间的设置(storage=xx),未来可能加入IOPS、吞吐率等指标的设置
    2. 存储卷模式 (Volume Mode
      Kubernetes从1.13版本开始引入存储卷类型的设置(volumeMode=xxx),可选项包括Filesystem(文件系统)和Block(块设备),默认为 Filesystem
      目前PV类型支持块设备类型:
    • AWSElasticBlockStore
    • AzureDisk
    • FC
    • GCEPersistenDisk
    • iSCSI
    • Local Volume
    • RBD(Ceph Block Device)
    • VsphereVolume(alpha)

    使用块定义的例子

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: block-pv
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      # --- 以下是块定义 --- #
      volumeMode: Block
      fc:
        targetWWNs: ["xxxx"]
        lun: 0
        readOnly: false
    

    访问模式

    对PV进行访问模式的设置,用于描述用户的应用对存储资源访问权限。

    • ReadWriteOnce(RWO):读写权限,并且只能被单个Node挂载
    • ReadOnlyMany(ROX):只读权限,允许被多个Node挂载
    • ReadWriteMany(RWX):读写权限,允许被多个Node挂载
      某些PV可能支持多种访问模式,但PV挂载是只能使用一种访问模式,多种访问模式不能同时生效。

    以下为不同存储提供者支持的访问模式

    image.png image.png

    存储类别 (Class)

    PV可以设定其存储的类型,通过storageClassName参数指定一个StorageClass资源对象的名称。具有特定类型的PV只能与请求了改类型的PVC进行绑定。未设定别的PV则只能与不请求任务类别的PVC进行绑定

    回收策略(Reclaim Policy

    通过PV定义中的persistentVolumeReclaimPolicy字段进行设置,选项如下

    • 保留:保留数据,需要手工处理
    • 回收空间:简单清楚文件的操作(rm -rf /thevolume/*命令)
    • 删除:与PV相连的后端存储完成Volume的删除操作(如AWS、EBS、GCE PD、Azure Disk、OpenStack Cinder等设备的内部Volume清理)。

    目前只有NFSHostPath两种类型的存储支持Recycle策略;Aws、EBS、GCEPD、Azure Disk和Cinder volumes支持Delete策略。

    挂载参数

    在将PV挂载到一个Node上时,根据后端存储的特点,可能需要设置额外的挂载参数,可以根据PV定义中的MountOptions字段进行设置。

    挂载参数例子

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gce-disk-1
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      # --- 挂载参数 --- #
      mountOptions:
        - hard
        - nolock
        - nfsvers=3
      gcePersistentDisk:
        fsType: ext4
        pdName: gce-disk-1
    

    目前、PV类型支持的挂载参数

    • AWSElasticBlockStore
    • AzureDisk
    • AzureFile
    • CephFS
    • Cinder(OpenStack block storage)
    • GCEPersistentDisk
    • Glusterfs
    • NFS
    • Quobyta Volumes
    • RBD(Ceph Block Device)
    • StorageOS
    • VsphereVolume
    • iSCSI

    节点亲和性 (Node Affinity)

    PV可以设置节点亲和性来限制那些Node可以访问Volume,可以在PV定义中设置nodeAffinity,使符合条件的Volume Pod 被调度到满足条件的Node上

    例子

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-local-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage
      local:
        path: /mnt/disks/ssd1
      # --- 节点亲和 --- #
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - my-node
    

    共有云提供存储卷(如AWS EBS、GCE PD、Azure Disk等)都由公有云自动完成节点亲和性设置,无需用户手动设置。

    PV生命周期的各个阶段

    某个PV在生命周期中可能处于以下4个阶段(Phaes)之一

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

    PV(Persistent Volume)定义了以后是供PVC(Persistent Volume Claim)使用的

    相关文章

      网友评论

          本文标题:2019-12-11 Kubernetes Persistent

          本文链接:https://www.haomeiwen.com/subject/tjgogctx.html