Kubernetes 为每个 Pod 提供多个具有 Statefulset 的 PVC,还是为所有 Pod 提供单个 PVC?

Har*_*var 3 kubernetes kubernetes-pvc

我已经为 mysql 部署了带有状态 pod 的 kubernetes 集群。对于每个吊舱,我有不同的 PVC。

例如:如果有 3 个 pod,则 3 个 5GB EBS PVC

那么哪种方法更好,为所有 pod 使用一个 PVC 或为每个 pod 使用不同的 PVC。

Ale*_*lex 7

如果您希望为集合中的每个 pod 提供专用存储,StatefulSet 必须使用volumeClaimTemplates。基于该模板,为每个 pod 创建 PersistentVolumeClaim,并将卷配置为绑定到该声明。生成的 PersistentVolumeClaims 名称由 volumeClaimTemplate 名称 + pod-name + 序号组成。\n因此,如果将volumeClaimTemplate 部分添加到 StatefulSet YAML 中(并删除特定的 permanentVolumeClaim 引用),则类似:

\n\n
volumeClaimTemplates:\n  - metadata:\n      name: mysql-data    \n    spec:\n      resources:\n        requests:\n          storage: 10Gi\n      accessModes:\n      - ReadWriteOnce\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后去创建你的 StatefulSet,然后检查它的一个 pod(kubectl get pods pod-name-0 yaml),你\xe2\x80\x99会看到这样的东西(输出的卷部分):

\n\n
volumes:\n- name: mysql-data\n  persistentVolumeClaim:\n    claimName: mysql-data-pod-name-0.  | dynamically created claim based on the template \n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,通过使用volumeClaimTemplates,您不需要\xe2\x80\x99自己创建一个单独的PVC,然后在每个单独的StatefulSet中引用该PVC以特定的安装路径安装在容器中(请记住,集合中的每个pod必须引用不同的PVC) PVC, 1PVC-1PV) :\nStatefulset YAML 的 \xe2\x80\x9ccontainers\xe2\x80\x9d 定义的一部分:

\n\n
volumeMounts:\n        - name: mysql-data   || references your PVC by -name(not PVC name itself) \n          mountPath: /var/lib/mysql\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,让集合中的每个 Pod 拥有专用存储而不使用 VolumeClaimTemplates 会导致很多问题,并且管理和扩展它会变得过于复杂。

\n