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流程

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。

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

导航