代码之家  ›  专栏  ›  技术社区  ›  Harsh Manvar

Kubernetes多个pvc,每个pod有状态集,而所有pod只有单个pvc?

  •  0
  • Harsh Manvar  · 技术社区  · 7 年前

    我已经为mysql部署了带有状态pod的kubernetes集群。对于每个豆荚,我有不同的聚氯乙烯。

    例如:如果3盒THN 3 5GB EBS PVC

    所以,哪种方法更好地将一个PVC用于所有的豆荚,或者对每个豆荚使用不同的PVC。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Alexz    7 年前

    如果要为一个集合的每个pod都有专用存储空间,则statefulset必须使用volumeClaimTemplates。基于模板persistentvolumeclaim为每个pod创建并配置要绑定到该声明的卷。生成的PersistentVolumeClaims名称由VolumeClaimTemplate名称+Pod名称+序号组成。 因此,如果将volumeClaimTemplate部分添加到statefulset yaml(并删除特定的persistentvolumeClaim引用),则smth如下所示:

    volumeClaimTemplates:
      - metadata:
          name: mysql-data    
        spec:
          resources:
            requests:
              storage: 10Gi
          accessModes:
          - ReadWriteOnce
    

    然后创建状态集,然后检查其中一个pods(kubectl get pods pod-name-0 yaml),您将看到类似的smth(输出的体积部分):

    volumes:
    - name: mysql-data
      persistentVolumeClaim:
        claimName: mysql-data-pod-name-0.  | dynamically created claim based on the template 
    

    因此,通过使用volumeClaimTemplates,您不需要自己创建单独的pvc,然后在每个单独的statefulset中引用要在特定安装路径上安装在容器中的pvc(请记住,集合的每个pod必须引用不同的pvc,1pvc-1pv): _容器_状态集yaml定义的一部分:

    volumeMounts:
            - name: mysql-data   || references your PVC by -name(not PVC name itself) 
              mountPath: /var/lib/mysql
    

    因此,为了使集合中的每个pod都有专用的存储空间,而不使用volumeClaimTemplates会导致许多问题和管理和扩展它的过度复杂化。

        2
  •  2
  •   Radek 'Goblin' Pieczonka    7 年前

    一个pvc被绑定到一个特定的pv上。对于状态集,在大多数可以想象的情况下,您希望有一个只能由特定pod访问的pv,这样数据就不会因来自并行进程/pod(rwo而不是rwx模式)的写入尝试而损坏。

    考虑到这一点,在statefulset中每个副本需要一个pvc。如果手动创建副本的pvc会很快出现问题,这就是为什么正确的方法是使用 volumeClaimTemplates 这将动态地为您创建pvc,因为您可以缩放设置。

    推荐文章