我有一个 Kubernetes 设置(根据一些教程完成),在 4 个 VPS 服务器(1 个主节点和 3 个工作节点)上进行了基本设置。但现在我已经阅读了有关持久卷的内容,但我不知道从哪里开始。
计划是:托管一个具有连续上传功能的网站,但我需要让所有工作节点共享数据,那么基于集群的最佳选择是什么?是否有一些 Kubernetes 模块或插件可供我使用,以便所有 3 个工作节点共享数据,如果其中一个工作节点宕机,其余工作节点将继续工作?请帮忙,因为我需要将包括 MySQL 在内的所有数据扩展到所有 3 个工作节点,如果一个工作节点宕机,所有工作都将在工作节点 1 和 2 上继续,直到 3 个工作节点恢复或被替换。
请给我指明正确的方向,因为我无法在 VPS 上创建 NFS 服务器。
答案1
- 中枢神经系统
坚持使用 Kubernetes,显而易见的答案是研究容器原生存储解决方案(例如:Ceph 和 Rook,或者 GlusterFS,但我不推荐)。
虽然这通常意味着要调整节点大小并相应地连接块设备。在某些情况下,专用节点可能有意义,可以避免并发问题。否则,请确保所有 Pod 都正确设置了 CPU/内存请求和限制。
更简单的解决方案可能涉及类似 MinIO 的东西。设置它并不复杂,可以轻松依赖主机文件系统。但主要问题是您的应用程序必须实现 s3 存储。没有 MySQL 数据库。您的网站不太可能以这种方式工作。
- 专用集群
另一种方法是在单独的节点上部署自己的存储集群。Ceph 是一个不错的选择,您可以在 GitHub 上查找 ceph-ansible playbooks。
在这里,使用小型节点(1-2 个 CPU、4-8G RAM、1-3x 1T SATA2、1x1G 网络)比使用 Rook 更容易。尽管性能不会很惊人,但它仍然很可靠。硬件建议旨在实现最佳性能,而 Ceph 旨在在商用硬件上运行。
- 专用主机
比存储集群更简单:类似于一对 FreeBSD,使用 ctld(iscsi 目标)、hastd(主机之间的设备同步)、carp(VIP)和 ifstated(根据 VIP 状态编写 hastd 同步故障转移脚本)。可能还有 ZFS,用于卷管理、快照……
或者一对带有 tgt(iscsi 目标)drdb(设备同步)和 keepalived(VIP + 脚本)的 Linux。以及 LVM 卷/快照。
或者仅一个服务器(不推荐)。
也许坚持使用 NFS 共享(不推荐)。
- 第三者
如果运气好的话,您的托管服务提供商确实会提供解决方案(iSCSI、ceph 或 gluster 块设备,也许还有一些 NFS 共享,... 避免使用 samba)。在某些情况下,可能会很昂贵。
- 以上都不是
否则,您只剩下 hostPath 卷。
数据将直接写入给定的 Kubernetes 节点,您必须将具有持久数据的 Pod 与静态节点进行映射。