k8s PV和PVC以及StorageClass

本地盘和云磁盘区别

本地盘不支持跨物理机迁移,云磁盘支持跨物理机迁移。

本地目录生命周期

emptyDir、downwardAPI、configMap、secret:kubelet创建本地目录,该目录会随着Pod的消亡而删除。
hostPath:本地目录一直存在。

PVC、PV和StorageClass关系

PVC是持久卷定义,PV是持久卷即磁盘,StorageClass是创建持久卷的模板。其中,StorageClass中,provisioner字段指定使用哪种存储插件,volumeBindingMode字段值WaitForFirstConsumer表示PVController延迟绑定PV和PVC,直到Pod调度期间;Immediate表示PVController立即绑定PVC和PV。
Pod中persistentVolumeClaim关联PVC,PVC spec中accessModes和requests分别与PV spec里面accessModes和capacity对应,PVC metadata.annotations.storage-class与PV metadata.annotations.storage-class值相同,与StorageClass metadata.name一致。
Deployment中定义volumeClaimTemplate后PVC需要手动创建。
StatefulSet中定义volumeClaimTemplate后PVC由StatefulSet控制器自动创建。

挂PV流程

create pvc-->csi controller 
--create pv by storage system--> pv controller
--bind pvc and pv-->pod create and schedule 
-->csi plugin--attach and mount-->pod running

provision(创建磁盘)->attach(挂载磁盘到宿主机)->mount(磁盘格式化并挂载到kubelet pv目录)
PVController根据PV模板StorageClass来创建PV,绑定PVC和PV是填写PVC中的spec.volumeName字段。
针对flexVolume,kubelet调用该二进制文件(无法通过守护进程方式长期运行);针对csi,kubelet调用csi插件。

PVC和PV生命周期

PVC - PV - Volume是一个整体。
即使删除StatefulSet,不会删除PVC,需要手动删除PVC。
如果不删除Pod,那么无法删除PVC,因为PVC被Pod所使用了。
如果删除了Pod,那么PVC不会自动删除,因为PVC的生命周期独立于Pod。
如果删除了PVC,无论PV回收策略是Retain还是Delete,都需要手动删除。只有删除PVC,才能完成PVC和PV的解绑。

posted on 2024-04-04 15:15  王景迁  阅读(238)  评论(0)    收藏  举报

导航