kubernetes中rethinkdb集群的高可用性问题

时间:2015-10-21 11:25:18

标签: rethinkdb kubernetes

我在kubernetes中设置了rethinkdb集群,但它并不像预期的那样对高可用性要求起作用。因为当一个pod关闭时,kubernetes会创建另一个pod,它运行同一个映像的另一个容器,旧的挂载数据(已经存放在主机磁盘上)将被删除,新pod将作为一个全新的实例加入集群。我在CoreOS v773.1.0 stable中运行k8s。

如果我错了,请纠正我,但这样就无法在k8s内设置数据库集群。

更新:如此处http://kubernetes.io/v1.0/docs/user-guide/pod-states.html#restartpolicy所述,如果RestartPolicy: Always,如果退出失败,它将重新启动容器。这意味着通过&#34;重启&#34;它会带来相同的容器,还是创建另一个容器?或者也许是因为我通过命令kubectl stop po停止了pod,所以它不会重启同一个容器?<​​/ p>

2 个答案:

答案 0 :(得分:2)

Kubernetes的工作方式和其他解决方案的工作方式可能相同。当机器死机时,机器上的容器将被重新安排在另一台机器上运行。那台其他机器没有容器状态。当它是同一台机器时,它上面的容器被创建为一个新的,而不是重新启动已退出的容器(其中包含数据)。

对于持久数据,您需要某种外部存储(NFS,EBS,EFS,...)。如果是k8s,您可能需要查看此https://github.com/kubernetes/kubernetes/blob/master/docs/design/persistent-storage.md此Github问题还有许多信息https://github.com/kubernetes/kubernetes/issues/6893

而且,在我看来,这是实现医管局的方法。容器都是无状态的,它们不会容纳任何东西。对它们的任何配置需求应该存储在外面,例如使用Consul或Etcd之类的东西。通过这样分离,可以更容易地重新启动容器

答案 1 :(得分:0)

尝试使用PetSet http://kubernetes.io/docs/user-guide/petset/ 这允许您命名您的(宠物)豆荚。如果一个pod被杀死,那么它将以相同的名字返回。

petset功能摘要如下。

  • 稳定的主机名
  • 稳定的域名
  • 类似类型的多只宠物将以&#34; -n&#34;命名。 (重新考虑-0, rethink-1,... rethink-n例如)
  • 持续卷
  • 现在应用可以集群/同行

当一个宠物吊舱死亡时,将启动一个新宠物吊舱并将采用所有相同的状态&#34;状态&#34; (包括磁盘)的前一个。