首页 > 解决方案 > 使用 Kubernetes 在物理机上设置本地持久卷

问题描述

我先声明一下:我是 Kubernetes 的新手,如果我问错了问题,请不要着急。

好的,这就是我要做的。我打算使用一些物理机器为我的项目构建一个 Kubernetes 。

我有 1 台服务器用于主节点和 2 个工作节点。我的服务泊坞窗(pod)将由 Kubernetes master 分配,它们需要存储数据库(MySQL)

搜索后,我想出了一个解决方案Persistent Volume,但我不想使用那些在线云服务,例如Google CloudAzure Cloud等。它引导我找到另一个解决方案 -Local Persistent Volume (LPV)这就是我目前卡住的地方.

问题LPV在于它与特定节点相连,因此我无法在其他节点上复制(备份)数据库,如果该节点发生问题或物理磁盘出现问题,我将失去所有数据库,对吧?

问题是,是否有任何解决方案可以使用在数据库上设置复制Local Persistent Volume?例如,我在 Node 1 上有一个数据库,Node 2上有一个备份版本,所以当Node 1不可用时,Pod 将挂载到Node 2上的备份数据库。

提前致谢!

标签: databasekubernetesdatabase-replicationpersistent-volumes

解决方案


  1. 您可以使用节点上的本地卷将数据库部署为 statefulset。只需创建卷并将它们放在 StorageClass 中

  2. 对于备份,您需要在数据库级别(而不是卷级别)设置复制到其他集群/其他数据库实例在其他地方/或其他集群上运行。

  3. 无论如何,Pod 故障都由 kubernetes 处理,如果不正常,它将重新启动 Pod。

  4. statefulset 中不能处理节点故障(一个节点不能替换另一个节点,换句话说,在 statefulset 中,一个 pod 不会在另一个节点上重新启动,kubernetes 将等待节点回来)

  5. 如果您要进行简单的单 pod 部署而不是 statefulset ,您可以将数据库部署为单个 pod 并将另一个实例部署为单个 pod 并使用节点选择器在不同的节点上运行它们,然后在数据库上设置从一个实例到另一个实例的复制level ,并将您的客户端应用程序配置为故障转移到备用实例,以防主实例不可用,这需要同步复制。

链接:

运行单实例有状态应用程序 (MYSQL)

运行复制的有状态应用程序 (MYSQL)


推荐阅读