pv pvc storageclass

PV

持久化存储数据卷。这个API对象主要定义的是一个持久化存储在宿主机上的目录

PVC

Pod所希望使用的持久化存储的属性,如,Volume存储的大小,可读写权限等等

PV与PVC绑定的条件

  1. PV和PVC的spec字段,比如:PV的存储大小,就必须满足PVC的要求
  2. PV和PVC的storageClassName字段必须一样

Volume Controller

PersistentVolumeController

  • 不断查看当前每一个PVC,是不是已经处于Bound状态,如果不是,那它就会遍历所有的、可用的PV,并尝试将其与这个“单身”的PVC进行绑定
  • PV和PVC绑定,就是将这个PV对象的名字,填在PVC对象的spec.volumeName字段上

准备持久化宿主机目录的过程

  • 当一个Pod调度到一个节点上后,kubelet负责为这个pod创建它的Volume目录。
  • 如果是远程块存储
    • kubelet需要调用Google Cloud的API,将提供的Persistent Disk挂载到Pod所在的宿主机上(Attach)
    • 格式化磁盘设备,将它挂载到宿主机指定的挂载点(Mount)
  • 通过CRI接口Mount

Kubernetes如何定义和区分这两个阶段

通过参数控制,1. Attach通过nodeName来控制 2.Mount通过dir参数控制

PV、PVC这样的用法,是不是有“过度设计”的嫌疑

解耦,扩展性

Local Persistent Volume

如何把本地磁盘抽象成PV

绝不应该把一个宿主机上的目录当作PV使用

  • 本地目录的存储行为完全不可控,所在的磁盘随时都可能被应用写满,甚至造成整个宿主机宕机
  • 不同的本地目录之间也缺乏哪怕最基础的I/O隔离机制

一个PV一块盘

调度器如何保证 Pod 始终能被正确地调度到它所请求的 Local Persistent Volume 所在的节点上呢?

调度器就必须能够知道所有节点与 Local Persistent Volume 对应的磁盘的关联关系,称为“在调度的时候考虑Volume分布”。VolumeBindingChecker的过滤条件专门负责这个事情

延迟绑定(volumeBindingMode=WaitForFirstConsumer)

  1. 一般情况下,声明PV和PVC及StrorageClass会被Kubernetes直接进行绑定
  2. 当PV和PVC直接绑定之后,而Pod设置的调度规则有可能不满足PV所在节点,则调度失败
  3. 但如果PV和PVC的绑定是根据Pod的调度规则之后在绑定,就会减少调度失败的可能
# k8s  

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×