我在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
,如果退出失败,它将重新启动容器。这意味着通过"重启"它会带来相同的容器,还是创建另一个容器?或者也许是因为我通过命令kubectl stop po
停止了pod,所以它不会重启同一个容器?</ p>
答案 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;状态&#34; (包括磁盘)的前一个。