使用Kubernetes在物理机上设置本地持久卷

时间:2019-07-10 08:46:18

标签: database kubernetes database-replication persistent-volumes

首先让我发表一个声明:我是Kubernetes的新手,如果我问错问题,请放轻松。

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

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

搜索后,我想出了Persistent Volume的解决方案,但是我不想使用那些诸如 Google Cloud Azure的在线云服务。云等。这将我引向另一个解决方案-Local Persistent Volume (LPV),这是我目前遇到的问题。

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

问题是,是否有任何解决方案可以使用Local Persistent Volume在数据库上设置复制?例如,我在节点1 上有一个数据库,在节点2 上有一个备份版本,因此当节点1 不可用时,窗格将安装到节点2 上的备份数据库。

谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 您可以使用节点上的本地卷将数据库作为状态集部署。只需创建卷并将其放入StorageClass

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

  3. Pod故障还是由kubernetes处理,如果运行异常,它将重新启动Pod。

  4. 无法在statefulset中处理节点故障(一个节点不能替换另一个节点,换句话说,在statefulset中,pod不会在其他节点上重新启动,kubernetes将等待节点返回),无论您使用的是本地本地卷还是远程卷,数据库的statfulsets都将粘贴到给定的节点上。但是如果节点作为集群运行,则可以由应用程序本身来处理节点故障

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

链接:

Run a Single-Instance Stateful Application ( MYSQL)

Run a Replicated Stateful Application ( MYSQL )