kubernetes - 当 PVC 附加到具有多个副本的部署时,它实际上是如何工作的?
问题描述
我的 Kubernetes 部署附加了一个 PVC,它有 3 个副本。我试图理解它的真正含义。3 个副本都在不同的节点上,在不同的区域中,但是 Pod 可以同时访问同一块存储。
所以我的问题是物理磁盘的位置?如果是说1区的节点1,那么2区的节点如何在没有网络的情况下访问它?如果它需要网络,那么数据可能不会同步?如果我在达拉斯有一个工作节点,在伦敦有另一个节点怎么办?他们是否仍然能够同时访问同一个 PV 并进行更新?
我试图用它来存储一些缓存数据,因为看起来所有 pod 都可以访问它,但是我脑子里有太多问题,我无法克服。提前感谢您提供任何有见地的答案。
解决方案
Kubernetes PersistentVolume是一种抽象。PV适用于不同的存储系统,它们可能具有不同的属性。例如,您使用的存储类可能会提示它是在云区域中的所有区域中可用还是仅在一个区域中可用。PersistentVolume 的访问模式也会影响您的所有 pod 是否可以同时从不同的节点访问该卷。
在大多数情况下,PV 一次只能在单个区域和单个节点上使用。但是,例如由例如 NFS 支持的 PV 可以从多个节点和区域获得。
使用PersistentVolume
from aDeployment
时,所有副本都引用同一个卷。根据您的存储系统,如果使用多个副本,这可能会出现问题。
使用 时StatefulSet
,您的所有副本都引用它们自己的唯一卷。
为了在像 Kubernetes 这样的分布式环境中使用缓存,我会考虑使用分布式并且可以通过网络访问的东西,例如Redis。
物理磁盘在哪里?
这取决于为您的Storage Class配置的存储系统,但通常它位于另一台服务器上,例如AWS EBS或Google Persistent Disk
如果是说1区的节点1,那么2区的节点如何在没有网络的情况下访问它?如果它需要网络,那么数据可能不会同步?
在多个区域中可用的 PV 通常同步同步(例如,以更高的写入延迟进行权衡),但仅同步到另一个附近的区域。如果您需要地理复制数据,最好考虑一些异步的东西,例如Apache Kafka。
推荐阅读
- python - PBS vmem 超出限制:我怎么知道内存超出了哪里?
- ssl - 使用 SSL 的 Quarkus JDBC 连接
- unity3d - 在 Unity 中获取智能手机的陀螺仪 3 轴角度
- excel - 如何根据另一列过滤电子表格数据?
- tradingview-api - 限制访问 tradingview.com 的脚本的警报
- odata - ODdata 数组参数表达式绑定到视图
- ruby-on-rails - 如何使用 Stripe 在我的 Rails 应用程序中添加现有用户
- ubuntu - 用 ffplay 播放音频似乎忽略了波形的幅度
- c# - 无法更改按钮高度 WPF
- docker - 获取 docker:Jenkins docker build agent 中的无效参考格式