Kubernetes 如果我有一个PVC在所有statefulset副本中共享同一卷,是否存在任何技术问题?
Kubernetes为statefulset上的每个VolumeClaimTemplate定义创建一个PersistentVolume。这使得每个statefulset pod都有自己的存储,而不是在副本之间共享。但是,我希望在所有statefulset副本中共享相同的卷 看起来应该采用以下方法:Kubernetes 如果我有一个PVC在所有statefulset副本中共享同一卷,是否存在任何技术问题?,kubernetes,kubernetes-statefulset,kubernetes-pvc,Kubernetes,Kubernetes Statefulset,Kubernetes Pvc,Kubernetes为statefulset上的每个VolumeClaimTemplate定义创建一个PersistentVolume。这使得每个statefulset pod都有自己的存储,而不是在副本之间共享。但是,我希望在所有statefulset副本中共享相同的卷 看起来应该采用以下方法: 在同一命名空间上创建PVC 在statefulset上,使用卷绑定PVC 确保PVC为ReadOnlyMany或ReadWriteMany 假设我的应用程序能够处理共享卷上的任何并发,如果我有一个PV
假设我的应用程序能够处理共享卷上的任何并发,如果我有一个PVC在所有StatefolSet副本上共享同一卷,是否存在任何技术问题?我完全同意@Jonas和@David Maze的评论:
你可以这样做,它应该会起作用。没有必要使用volumeClaimTemplates,除非您的应用程序需要它
两个明显的问题是,ReadWriteMany卷实际上有点难以获取(像AWS EBS卷这样的卷只是ReadWriteOnce),而且许多要在状态集(像数据库)中运行的东西都希望独占使用它们的文件系统空间,并使用文件锁定来实现这一点
答复问题: 如果我有一个PVC在所有statefulset副本中共享同一卷,是否存在任何技术问题 我认为这主要取决于:
- 应用程序将如何处理这样的场景,其中它具有单个PVC(写入并发性)
- Kubernetes群集支持(或可以实施)哪种存储解决方案
从应用程序的角度来看,我们讨论的软件存在固有的缺陷。每个应用程序的行为可能不同,需要进行不同的调优(请参阅David Maze评论) 我们也不了解您的基础架构,因此很难向您指出潜在的问题。从硬件角度(Kubernetes群集)来看,这将本质上用于对您想要使用的特定存储解决方案进行研究。不同的云提供商和内部解决方案可能会有所不同。您需要检查应用程序的要求,以使其与您拥有的选项保持一致 继续讨论
卷
,我认为重要的事情之一是访问模式
引用官方文件:
访问模式
PersistentVolume可以以资源提供程序支持的任何方式装载到主机上。如下表所示,供应商将具有不同的能力,每个PV的访问模式设置为该特定卷支持的特定模式。例如,NFS可以支持多个读/写客户机,但特定的NFS PV可能在服务器上以只读方式导出。每个PV都有自己的访问模式集,描述特定PV的功能
访问模式为:
- ReadWriteOnce--卷可以通过单个节点以读写方式装入
- ReadOnlyMany--卷可以由多个节点以只读方式装入
- ReadWriteMany--卷可以由许多节点以读写方式装入
- RWO-ReadWriteOnce
- ROX-现成的
- RWX-ReadWriteMany
PVC
安装到节点
并且sts-X
(Pod
)被安排到另一个节点
时,ReadWriteOnce
的问题,我想您已经知道了
但是,我希望在所有statefulset副本中共享相同的卷 具有卷的
StatefulSet
示例可在所有副本中共享(Kubernetes文档中的修改示例):
apiVersion:apps/v1
种类:StatefulSet
元数据:
名称:网站
规格:
选择器:
火柴标签:
应用程序:nginx必须匹配.spec.template.metadata.labels
服务名称:“nginx”
副本:3#默认为1
模板:
元数据:
标签:
应用程序:nginx#必须匹配.spec.selector.matchLabels
规格:
终止时间:10秒
容器:
-姓名:nginx
图片:nginx
端口:
-集装箱港口:80
名称:网站
#卷启动
体积数量:
-名称:示例pvc
挂载路径:/usr/share/nginx/html
卷数:
-名称:示例pvc
persistentVolumeClaim:
索赔名称:sts用pvc
#卷尾
额外资源:
volumeClaimTemplates
。两个明显的问题是,ReadWriteMany卷实际上有点难以获取(像AWS EBS卷这样的卷只是ReadWriteOnce),以及许多您希望在状态集(比如数据库)中运行的内容希望独占使用他们的文件系统空间,并使用文件锁定来强制执行此操作。Hello@yersan。是吗?是的@WytrzymałyWiktor,它确实消除了我的疑虑