我正在 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/