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

标签 rethinkdb kubernetes

我正在 kubernetes 内设置 rethinkdb 集群,但它无法按预期工作以满足高可用性要求。因为当一个 pod 宕机时,kubernetes 会创建另一个 pod,该 pod 运行相同镜像的另一个容器,旧挂载的数据(已经保存在主机磁盘上)将被删除,新的 pod 将作为全新实例加入集群。我在 CoreOS v773.1.0 stable 中运行 k8s。

如果我错了,请纠正我,但这样在 k8s 中设置数据库集群似乎是不可能的。

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

最佳答案

这就是 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

事实上,我认为这就是实现 HA 的方法。容器都是无状态的,它们里面不包含任何东西。它们的任何配置需求都应该存储在外部,例如使用 Consul 或 Etcd 之类的东西。通过这样分离,可以更轻松地重新启动容器

关于rethinkdb - kubernetes 中 rethinkdb 集群的高可用性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258095/

相关文章:

kubernetes - 如何以编程方式从其中一个集群中获取当前的 GKE 项目 ID?

node.js - 有什么方法/解决方法可以将聚合结果提供给 RethinkDB

rethinkdb - 使用 RethinkDB,如何实现标签云?

rethinkdb - 如何获取 rethinkdb 中日期之间的行?

kubernetes - kube-apiserver healthz 调用中检查了什么?

kubernetes - Kubernetes 中的 `deployment.apps` 是什么?

javascript - 更新 RethinkDB 中的对象数组

node.js - RethinkDB 对多个文档/表的事务处理

kubernetes - 从 Kubernetes API 获取 docker-image 标签

load-balancing - GKE中GLBC L7的默认负载平衡算法是什么?