Local Persistent Volume vs HostPath

Kubernetes 可以用 Local persistent volume 来使用本机的磁盘。那和 hostPath volume 有啥区别呢? 这篇文档有说明,大致翻译下。

一般来说 Persistent volume 都是通过远程文件系统实现的。远程文件系统可以不依赖 kubernetes 节点而保存数据。但是远程文件系统往往不能提供本地文件系统一样的性能。

为了能更好的理解 Local Persistent Volume,有必要把它和 HostPath volume 比较下。HostPath volume 是挂载主机的一个文件或者目录到 pod。类似的 Local Persistent Volume 是挂载主机的一块磁盘或者分区到一个 pod。

主要的不同在于,Kubernetes scheduler 知道一个 Local Persistent Volume 是属于哪个节点。而对于 HostPath volume,一个 pod 使用的 volume 可能会被 scheduler 移动到别的节点而导致数据丢失。Kubernetes scheduler 会保证 pod 使用的 Local Persistent Volume 总是规划到同一个节点。

HostPath volume 可以通过 PVC 或者直接在 pod 里面定义使用,Local Persistent Volume 只能通过 PVC 使用。这样能提供更多的安全特性,因为 Persistent Volume 一般都是管理员创建的,可以阻止 pod 可以访问任意的主机上面的目录。

还有一些其他的特性,例如可以在挂载的时候格式化磁盘,和使用 fsGroup 设置 volume 的属主。