不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Kubernetes存储原理——深入理解本地持久化数据卷

关于本地持久化存储

用户希望 Kubernetes 能够直接使用宿主机上的本地磁盘目录,而不依赖于远程存储服务,来提供“持久化”的容器Volume

这样做的好处就是:由于这个Volume直接使用的是本地磁盘,尤其是SSD盘,它的读
写性能相比于大多数远程存储来说,要好得多。

Local PV的设计难点

如何把本地磁盘抽象成PV

首先,绝对不能把一个宿主机上的目录当作 PV 使用
这是因为,这种本地目录的存储行为完全不可控,它所在的磁盘随时都可能被应用写满,甚至造成整个宿主机宕机。而且,不同的本地目录之间也缺乏哪怕最基础的 I/O 隔离机制。

所以,一个 Local Persistent Volume 对应的存储介质,一定是一块额外挂载在宿主机的磁盘或者块设备(“额外”的意思是,它不应该是宿主机根目录所使用的主硬盘)。这个原
则,我们可以称为一个 PV 一块盘

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

对于常规的 PV 来说,Kubernetes 都是先调度 Pod 到某个节点上,然后,再通过“两阶段处理”来“持久化”这台机器上的 Volume 目录,进而完成Volume 目录与容器的绑定挂载。

可是,对于 Local PV 来说,节点上可供使用的磁盘(或者块设备),必须是运维人员提前
准备好的。它们在不同节点上的挂载情况可以完全不同,甚至有的节点可以没这种磁盘。

所以,这时候,调度器就必须能够知道所有节点与 Local Persistent Volume 对应的磁盘的关联关系,然后根据这个信息来调度 Pod。

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!