在Kubernetes上运行的Pod是否可以共享同一PVC

时间:2019-02-19 13:53:33

标签: kubernetes minio

我目前已经建立了一个名称为minio-pvc的PVC,并基于带有值的stable/minio chart创建了一个部署

mode: standalone
replicas: 1
persistence:
  enabled: true
  existingClaim: minio-pvc

如果我增加副本数会怎样?如果有多个Pod试图同时写入PVC,我是否会有破坏数据的风险?

2 个答案:

答案 0 :(得分:0)

如果您坚持使用Deployments而不是StatefulSets,则多个副本无法写入同一PVC将是不可行的,因为不能保证不同的副本在同一节点上调度,因此您可能拥有等待建立到该卷的连接的挂起的Pod失败。解决方案是选择一个特定的节点,并使所有副本在同一节点上运行。

运行以下命令,并为您的节点之一分配标签:

kubectl label nodes <node-name> <label-key>=<label-value>

假设我们选择label-keylabelKeylabel-valuenode1。然后,您可以继续以下操作,并将以下内容添加到您的YAML文件中,并将Pod安排在同一节点上:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 3
  template:
    spec:
      nodeSelector:
        labelKey: node1
      containers:
      ...

答案 1 :(得分:0)

不要将部署用于有状态的容器。而是使用StatefulSets。 StatefulSet是专门为运行有状态容器(如数据库)而设计的。它们用于保持容器的状态。

请注意,每个Pod将通过pvc绑定一个单独的持久卷。不可能有多个Pod实例写入同一PV。希望我回答了你的问题。