kubernetes - 为什么我应该使用 Kubernetes Persistent Volumes 而不是 Volumes
问题描述
要在 Kubernetes POD 中使用存储,我可以使用卷和持久卷。虽然像这样的卷emptyDir
是短暂的,但我可以使用hostPath
许多其他基于云的卷插件,它们将在卷本身中提供持久的解决方案。
在那种情况下,我为什么要使用持久卷呢?
解决方案
Volumes
了解和之间的主要区别非常重要PersistentVolumes
。两者都是 Kubernetes 资源Volumes
,PersistentVolumes
提供数据存储设施的抽象。
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作为本主题的一个很好的补充。
推荐阅读
- java - 使用 Java Streams 和 Spring Boot 的 RESTful Web 服务
- umbraco - 会员拥有的内容
- javascript - 如何获得可滚动的 div currentScrollY 和 totalScrollHeight
- javascript - 如何使用 Nest js 作为服务器端并在客户端反应从 puppeteer 下载 pdf?
- angular - 如何在没有角材料的情况下在我的表单中进行多项选择
- sql - 带有子句 NOT CONTAINS 的 SQL 选择查询
- python - Python Homebrew 升级后的非功能 pip
- python - 如果列的值等于某个值,则更改下一列的值(python)
- css - 检查 TYPO3 / FLUID 模板的链接类型
- node.js - 在节点 js 端发生数据更改后,如何启动响应以重新加载?