繁体   English   中英

Kubernetes 生产中 Pod 的持久卷

[英]Kubernetes Persistent Volume for Pod in Production

我执行了一个场景,我使用 PV 和 PVC 在我的 K8s 集群上部署了 Microsoft SQL 数据库。 它运作良好,但我看到一些奇怪的行为。 我创建了 PV,但它只在一个节点上可见,而在其他工作节点上不可见。 我在这里缺少什么,请输入任何内容?

背景:

服务器 1 - 主服务器

服务器 2 - 工作人员

服务器 3 - 工作人员

服务器 4 - 工作人员

Pod:“MyDb”在服务器(节点)4 上运行,没有任何副本集。 我猜是因为我的 POD 在 server-4 上运行,PV 在创建 POD 时在服务器 4 上创建并在其中引用 PVC(声明)。

请让我知道您对此问题的想法或分享您对在生产集群中安装共享磁盘的意见。

想在K8s集群上部署SQL DB的可以参考飞利浦的博客。 下方链接,

https://www.phillipsj.net/posts/sql-server-on-linux-on-kubernetes-part-1/ (无 PV)

https://www.phillipsj.net/posts/sql-server-on-linux-on-kubernetes-part-2/ (带有PV和Claim)

问候,法鲁克


请参阅下面我对原始问题陈述的发现。 问题:已创建 SQL 服务器的 POD。 在运行时,K8s 在 server-4 上创建了这个 pod,因此在 server-4 上创建了 PV。 但是,在其他节点上未创建 PV 路径(/tmp/sqldata_.

  • 我关闭了 server-4 节点并运行命令删除 SQL pod(最初没有使用副本)。
  • POD 的状态更改为“终止”POD
  • 一时间什么都没发生。
  • 我重新启动 server-4 并注意到 POD 立即被删除。

下一步: - 我再次停止 server-4 并创建了相同的 pod。 - POD 是在运行时在 server-3 节点上创建的,我看到 PV (/tmp/sqldata) 也在 server-3 上创建。 但是,我的所有数据(示例样本表)都丢失了。 现在是服务器 3 上的全新 PV。

我假设 PV 将安装在外部存储卷上,而不是来自集群中任何节点的存储/磁盘。

我猜是因为我的 POD 在 server-4 上运行,PV 在创建 POD 时在服务器 4 上创建并在其中引用 PVC(声明)。

这或多或少是正确的,您应该能够通过简单地删除 Pod 并重新创建它来验证这一点(因为您说您没有 ReplicaSet 为您执行此操作)。 然后PersistentVolume将在 Pod 被调度到的节点上可见。

编辑:以上假设您使用的是外部存储提供商,例如 NFS 或 AWS EBS(请参阅 Kubernetes 可能的存储提供商)。 使用HostPath ,上述内容不适用,PV 将在节点上本地创建(并且不会挂载到另一个节点)。

没有理由将PersistentVolume也安装到其他节点。 想象一下有数百个节点,您是否想将PersistentVolume挂载到所有节点上,而您的 Pod 仅在一个节点上运行?

您还在询问“共享”磁盘。 在您链接的博客文章中创建的PersistentVolume正在使用ReadWriteMany ,因此您实际上可以启动多个 Pod 访问同一卷(假设您的存储也支持该卷)。 但是您的软件(在您的情况下是数据库)需要支持多个进程访问相同的数据。

特别是在考虑数据库时,您还应该研究StatefulSets ,因为这基本上允许您定义始终使用相同存储的 Pod,这对于数据库来说可能非常有趣。 无论您应该在哪里运行或不运行 Kubernetes 上的数据库,都是一个完全不同的话题......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM