我已经为Kubernetes集群部署了带状态Pod的mysql。每个豆荚都有不同的pvc。
例如:如果3盒3 3GB EBS PVC
SO最好在所有吊舱中使用一个PVC或对每个吊舱使用不同的pvc。
答案 0 :(得分:2)
PVC绑定到特定的PV。对于StatefulSet,在大多数可以想象的情况下,您希望有一个只能由特定容器访问的PV,以使数据不会被来自并行进程/容器(RWO而不是RWX模式)的写入尝试破坏。
请记住,在StatefulSet中每个副本需要一个PVC。如果手动完成,为副本创建PVC会很快出现问题,这就是为什么正确的方法是使用volumeClaimTemplates
来为您扩展集动态地为您创建PVC。
答案 1 :(得分:1)
StatefulSet必须使用volumeClaimTemplates。基于该模板,为每个吊舱创建PersistentVolumeClaim并配置要绑定到该声明的卷。生成的PersistentVolumeClaims名称由volumeClaimTemplate名称+ pod名称+序号组成。 因此,如果将volumeClaimTemplate部分添加到StatefulSet YAML(并删除特定的persistentVolumeClaim引用),则如下所示:
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteOnce
然后创建StatefulSet,然后检查其中一个pod(kubectl get pod pod-name-0 yaml),您将看到类似的内容(输出的一部分):
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-data-pod-name-0. | dynamically created claim based on the template
因此,通过使用volumeClaimTemplates,您无需自己创建单独的PVC,然后在每个单独的StatefulSet引用中将PVC安装在容器中的特定mountPath上(请记住,集合中的每个吊舱都必须引用不同的PVC ,1PVC-1PV): Statefulset YAML的“容器”定义的一部分:
volumeMounts:
- name: mysql-data || references your PVC by -name(not PVC name itself)
mountPath: /var/lib/mysql
因此,要使集合中的每个吊舱都具有专用存储空间而不使用volumeClaimTemplates,会导致很多问题,并且会导致管理和扩展它的复杂性。