28 | PV、PVC、StorageClass,这些到底在说啥?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes持久化存储概念深入剖析 本文深入介绍了Kubernetes中的持久化存储概念,包括Persistent Volume(PV)、Persistent Volume Claim(PVC)和StorageClass。文章详细解释了PV和PVC的绑定过程,以及Kubernetes中的Volume Controller的作用。此外,还介绍了持久化Volume的实现原理,包括远程存储服务的使用和为Pod创建Volume目录的过程。另外,文章还介绍了Kubernetes中的StorageClass的作用,以及如何使用StorageClass进行动态存储的创建。 在这个体系中,PVC描述的是Pod想要使用的持久化存储的属性,而PV描述的则是一个具体的Volume的属性。StorageClass的作用是充当PV的模板,并且只有同属于一个StorageClass的PV和PVC才可以绑定在一起。另一个重要作用是指定PV的Provisioner,如果存储插件支持Dynamic Provisioning,Kubernetes可以自动为你创建PV。 这套容器持久化存储体系完全是Kubernetes项目自己负责管理的,并不依赖于docker volume命令和Docker的存储插件。在了解了PV、PVC的设计和实现原理之后,读者可以思考是否觉得它有“过度设计”的嫌疑,或者是否有更加简单、足以解决90%需求的Volume的用法。 通过深入浅出的方式,本文帮助读者理解了Kubernetes中持久化存储的核心原理和操作流程,为读者提供了全面的技术指导。文章内容涵盖了PV、PVC和StorageClass的绑定机制,动态存储的创建以及Static Provisioning的使用,为读者提供了全面的技术指导。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(61)
- 最新
- 精选
- swordholder容器持久化存储涉及的概念比较多,试着总结一下整体流程。 用户提交请求创建pod,Kubernetes发现这个pod声明使用了PVC,那就靠PersistentVolumeController帮它找一个PV配对。 没有现成的PV,就去找对应的StorageClass,帮它新创建一个PV,然后和PVC完成绑定。 新创建的PV,还只是一个API 对象,需要经过“两阶段处理”变成宿主机上的“持久化 Volume”才真正有用: 第一阶段由运行在master上的AttachDetachController负责,为这个PV完成 Attach 操作,为宿主机挂载远程磁盘; 第二阶段是运行在每个节点上kubelet组件的内部,把第一步attach的远程磁盘 mount 到宿主机目录。这个控制循环叫VolumeManagerReconciler,运行在独立的Goroutine,不会阻塞kubelet主循环。 完成这两步,PV对应的“持久化 Volume”就准备好了,POD可以正常启动,将“持久化 Volume”挂载在容器内指定的路径。
作者回复: 总结的好!后面还有更多概念!
2018-10-2616341 - Geek_e2f5e1老师,如果我原先存储上就有数据需要挂载进去,那格式化操作岂不是不能满足我的需求?
作者回复: 格式化前肯定要检查啊,只有raw格式才需要格式化
2019-04-0938 - vx:jiancheng_goon张老师,问一个比较空泛的问题。您之前是做paas平台的,今后的pass平台的发展方向是什么呢?当前做paas平台,最大的阻碍是什么?最大的价值又是什么呢?
作者回复: paas最后就是各家基于kubernetes DIY。这样多好。
2018-10-2730 - tuxknight在公有云上使用 PV/PVC 有个很重要的限制:块存储设备必须和实例在同一个可用区。在 Pod 没被创建的时候是不确定会被调度到哪个可用区,从而无法动态的创建出PV。这种问题要怎么处理?
作者回复: scheduler里的volumezonechecker规则了解一下。
2018-10-2822 - Acter“所谓将一个 PV 与 PVC 进行“绑定”,其实就是将这个 PV 对象的名字,填在了 PVC 对象的 spec.volumeName 字段上。” 请问老师为什么在pvc的yaml文件中看不到这个字段呢?
作者回复: 看它的api types定义
2018-10-29315 - 坤如果采用ceph rbd StorageClass,Pod所在的node宕机后,在调度到另外一台Node上,这个过程中,k8s是会新node上重新创建PV吗?
作者回复: 这个取决于你的存储插件是什么类型的。支持 auto provisioning的就可以自动创建。
2020-03-049 - yuliz你好,我想请教下实际中的疑问点,如果我使用NFS作为共享存储,两个集群中的PV绑定NFS的同一目录,且这两个PV被pvc绑定,最终pod绑定pvc,当第二个pod绑定时会格式化nfs的目录,导致之前的pod数据丢失么?两个集群的pv能共用一个nfs目录和同一rbd么?
作者回复: volumeMounts有个subpath字段了解一下。可以,但不建议。
2018-10-3037 - 夕月所谓将一个 PV 与 PVC 进行“绑定”,其实就是将这个PV 对象的名字,填在了 PVC 对象的 spec.volumeName 字段上,这个好像在yaml文件里没有提现啊,只有storageClassName是一样的
作者回复: 你把api对象和yaml文件搞混了?
2018-11-256 - jkmzg请问下从同一个pod spec 创建出来的不同pod中,pvc相同,会不会冲突?k8s的机制是什么呢?
作者回复: 带id,不冲突
2018-11-136 - jssfy请问 1. 同一集群的多个pod可否同时挂载同一个pv的同一个subpath 2. 如果pv写满了如何扩容
作者回复: 要看存储插件是否支持。pv只是逻辑概念,你的数据是在远程存储里的,所以resize是存储插件的功能。
2018-11-255