首页 > 解决方案 > 为什么我应该使用 Kubernetes Persistent Volumes 而不是 Volumes

问题描述

要在 Kubernetes POD 中使用存储,我可以使用持久卷。虽然像这样的卷emptyDir是短暂的,但我可以使用hostPath许多其他基于云的卷插件,它们将在卷本身中提供持久的解决方案。

在那种情况下,我为什么要使用持久卷呢?

标签: kubernetespersistent-volumesvolumes

解决方案


Volumes了解和之间的主要区别非常重要PersistentVolumes。两者都是 Kubernetes 资源VolumesPersistentVolumes提供数据存储设施的抽象。

  • Volumes: 让你的 pod 写入一个只要 pod 存在就存在的文件系统。它们还允许您在同一个 pod 中的容器之间共享数据,但是当 pod 重新启动时,该卷中的数据将被销毁。Volume将存储与容器解耦。它的生命周期与 pod 耦合。

  • PersistentVolumes:用作 Kubernetes 集群中的长期存储。它们存在于容器、pod 和节点之外。pod 使用持久卷声明来获得对持久卷的读写访问权限。PersistentVolume将存储与 Pod 分离。它的生命周期是独立的。它支持安全的 Pod 重启和 Pod 之间的数据共享。

当涉及到hostPath 时

hostPath将文件或目录从主机节点的文件系统安装到您的 Pod 中。

hostPath有它的使用场景,但一般来说可能不推荐,原因如下:

  • 由于节点上的文件不同,具有相同配置(例如从 a 创建PodTemplate)的 Pod 在不同节点上的行为可能不同

  • 在底层主机上创建的文件或目录只能由 root 写入。您要么需要在特权容器中以 root 身份运行进程,要么修改主机上的文件权限以便能够写入hostPath

  • 您并不总是直接控制您的 pod 将在哪个节点上运行,因此您不能保证 pod 将实际调度在具有数据量的节点上。

  • 如果一个节点出现故障,您需要将该 pod 安排在其他节点上,您的本地配置卷将不可用。

例如hostPath,如果您想将它用于在DaemonSet.

我推荐Kubernetes Volumes Guide作为本主题的一个很好的补充。


推荐阅读