如果 pod 在另一个节点上死亡并再次上升,kubernetes 的 HostPath 卷会发生什么情况?
What happens with kubernetes's HostPath volume in case of pod dying and rising again on another node?
如果 pod 在另一个节点上死亡并再次上升,kubernetes 的 HostPath 卷会发生什么情况?
我猜新崛起的节点上的新pod不会看到吧?卷会永远存在并泄漏磁盘空间吗?
防止这种情况的正确解决方案是什么?
比 HostPath 稍微好一点的解决方案是使用 local PersistentVolumes
本地卷只能用作静态创建的 PersistentVolume。尚不支持动态配置。
与 hostPath 卷相比,本地卷可以以持久且可移植的方式使用,而无需手动调度 Pods 到节点,因为系统通过查看 PersistentVolume 上的节点亲和力来了解卷的节点约束。
但是,本地卷仍然受制于底层节点的可用性,并不适合所有应用程序。如果一个节点变得不健康,那么本地卷也会变得不可访问,使用它的 Pod 将无法 运行。使用本地卷的应用程序必须能够容忍这种可用性降低以及潜在的数据丢失,具体取决于底层磁盘的耐用性特征。
可以单独 运行 外部静态供应器,以改进对本地卷生命周期的管理。请注意,此配置器尚不支持动态配置。有关如何 运行 外部本地供应商的示例,请参阅 local volume provisioner 用户指南。
如果不使用外部静态供应器来管理卷生命周期,则本地 PersistentVolume 需要用户手动清理和删除。
主机路径卷是一种 "escape hatch"。没有特定的持久性、生命周期或与它们相关的任何其他内容。如果一个 pod 在不同的节点上被重新安排,那么
会看到其他节点上同一个host目录的内容,可能相同也可能不同,并且
如果您将应用程序数据存储在第一个节点的主机目录中,它实际上会变成 "orphaned".
这使得主机路径卷不能很好地匹配正常的应用程序数据;选择几乎任何其他存储类型。
我看到它们有效使用的地方是您实际需要管理一些通常存在于主机系统上的数据的地方。例如,standard fluentd Kubernetes deployment 在守护程序集中运行 fluentd,以从集群中每个节点上的 /var/lib/docker/containers
收集日志;这是由主机 Docker 守护程序管理的数据,而不是由任何特定容器管理的数据。因为它由守护程序集管理,所以它在 每个 节点上运行,所以如果一个节点消失了它的日志,它的日志转发器也会随之消失,这是意料之中的。
如果 pod 在另一个节点上死亡并再次上升,kubernetes 的 HostPath 卷会发生什么情况?
我猜新崛起的节点上的新pod不会看到吧?卷会永远存在并泄漏磁盘空间吗?
防止这种情况的正确解决方案是什么?
比 HostPath 稍微好一点的解决方案是使用 local PersistentVolumes
本地卷只能用作静态创建的 PersistentVolume。尚不支持动态配置。 与 hostPath 卷相比,本地卷可以以持久且可移植的方式使用,而无需手动调度 Pods 到节点,因为系统通过查看 PersistentVolume 上的节点亲和力来了解卷的节点约束。
但是,本地卷仍然受制于底层节点的可用性,并不适合所有应用程序。如果一个节点变得不健康,那么本地卷也会变得不可访问,使用它的 Pod 将无法 运行。使用本地卷的应用程序必须能够容忍这种可用性降低以及潜在的数据丢失,具体取决于底层磁盘的耐用性特征。
可以单独 运行 外部静态供应器,以改进对本地卷生命周期的管理。请注意,此配置器尚不支持动态配置。有关如何 运行 外部本地供应商的示例,请参阅 local volume provisioner 用户指南。
如果不使用外部静态供应器来管理卷生命周期,则本地 PersistentVolume 需要用户手动清理和删除。
主机路径卷是一种 "escape hatch"。没有特定的持久性、生命周期或与它们相关的任何其他内容。如果一个 pod 在不同的节点上被重新安排,那么
会看到其他节点上同一个host目录的内容,可能相同也可能不同,并且
如果您将应用程序数据存储在第一个节点的主机目录中,它实际上会变成 "orphaned".
这使得主机路径卷不能很好地匹配正常的应用程序数据;选择几乎任何其他存储类型。
我看到它们有效使用的地方是您实际需要管理一些通常存在于主机系统上的数据的地方。例如,standard fluentd Kubernetes deployment 在守护程序集中运行 fluentd,以从集群中每个节点上的 /var/lib/docker/containers
收集日志;这是由主机 Docker 守护程序管理的数据,而不是由任何特定容器管理的数据。因为它由守护程序集管理,所以它在 每个 节点上运行,所以如果一个节点消失了它的日志,它的日志转发器也会随之消失,这是意料之中的。