K8s系列之:Persistent Volume

K8s系列之:Persistent Volume

Volume是定义在Pod上的,属于计算资源的一部分,实际上,网络存储是相对独立于计算资源存在的一种实体资源。比如在使用虚拟机的情况下,通常会先定义一个网络存储,然后从中划出一个网盘并挂接到虚拟机上。

Persistent Volume(PV)和与之相关联的Persistent Volume Claim(PVC)起到了类似的作用。

PV可以理解成K8s集群中的某个网络存储中对应的一块存储,与Volume很类似,但有以下区别:

  • PV只能是网络存储,不属于任何Node,但可以在每个Node上访问
  • PV并不是定义在Pod上的,而是独立于Pod之外定义
  • PV目前支持的类型包括:gcePersistentDisk、awsElasticBlockStore、AzureFile、AzureDisk、FC(Fibre Channel)、Flocker、NFS、iSCSI、RBD(Rados Block Device)、CephFS、Cinder、GlusterFS、VsphereVolume、

示例:给出NFS类型PV的一个yaml定义文件,声明了需要5Gi的存储空间

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: /somepath
    server: 172.17.0.2

比较重要的是PV的accessModes属性,目前有以下类型:

  • ReadWriteOnce:读写权限,并且只能被单个Node挂载
  • ReadOnlyMany:只读权限,允许被多个Node挂载
  • ReadWriteMany:读写权限,允许被多个Node挂载

某个Pod想申请某种类型的PV,则首先需要定义一个PersistentVolumeClaim(PVC)对象:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi

然后在Pod的Volume定义中引用上述PVC即可:

volumes:
  - name: mypd
    persistentVolumeClaim:
      claimName: myclaim

PV是有状态的对象,有以下几种状态:

  • Available:空闲状态
  • Bound:已经绑定到某个PVC上
  • Released:对应的PVC已经删除,但资源还没有被集群收回
  • Failed:PV自动回收失败

你可能感兴趣的:(日常分享专栏,K8s系列,Persistent,Volume)