kubernetes - Kubernetes 多个 pvc 与每个 pod 的 statefulset 与所有 pod 的单个 pvc?
问题描述
我已经为 mysql 部署了带有状态 pod 的 kubernetes 集群。对于每个吊舱,我有不同的 pvc。
例如:如果 3 pod thn 3 5GB EBS PVC
所以哪种方式更好地为所有 Pod 使用一个 PVC 或为每个 Pod 使用不同的 pvc。
解决方案
StatefulSet 必须使用 volumeClaimTemplates 如果您想为集合的每个 pod 提供专用存储。基于该模板 PersistentVolumeClaim 为每个 pod 创建并配置要绑定到该声明的卷。生成的 PersistentVolumeClaims 名称由 volumeClaimTemplate 名称 + pod-name + 序号组成。因此,如果您将 volumeClaimTemplate 部分添加到您的 StatefulSet YAML(并删除特定的 persistentVolumeClaim 引用),就像这样:
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteOnce
然后去创建你的 StatefulSet,然后检查它的一个 pod(kubectl get pods 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(请记住,集合的每个 pod 必须引用不同的 PVC,1PVC- 1PV) :Statefulset YAML 的“容器”定义的一部分:
volumeMounts:
- name: mysql-data || references your PVC by -name(not PVC name itself)
mountPath: /var/lib/mysql
因此,针对集合中的每个 pod 都有专用存储而不使用 volumeClaimTemplates 会导致很多问题以及管理和扩展它的复杂性。
推荐阅读
- c++ - Visual Studio C++ 控制台应用程序
- java - 使用 SpringRunner 和 JUnit 的 spring 数据持久性进行集成测试 - 每个测试的虚拟数据不同
- bash - Bash - 读取 HTML 并根据两个不同的变量查找 div
- swift - 带有 Swift 的 macOS 上的低级键捕获方法
- go - 使用 gorm 模型的嵌套结构
- rsync - Btrfs 和 rsync
- mysql - 使用 nodejs 云函数将 csv 文件导入 Google CloudSQL
- reactjs - 从单独的 js 文件添加反应不起作用
- java - 使用 C# 或 JAVA 调用 COM 服务器 .exe 的函数
- django - 包含外键的 http POST 并保存