2015-10-21 35 views
1

我在kubernetes內部設置了rethinkdb羣集,但它無法按預期工作以滿足高可用性要求。因爲當一個吊艙停機時,kubernetes將創建另一個吊艙,該吊艙運行同一圖像的另一個容器,舊的裝載數據(已保存在主機磁盤上)將被刪除,新的吊艙將作爲全新的實例加入羣集。我在CoreOS v773.1.0 stable中運行k8s。kubernetes中的rethinkdb羣集的高可用性問題

請糾正我,如果我錯了,但這種方式似乎不可能在k8s內設置數據庫集羣。

更新:如文檔http://kubernetes.io/v1.0/docs/user-guide/pod-states.html#restartpolicy所述,如果RestartPolicy: Always它將在退出失敗時重新啓動容器。這意味着通過「重新啓動」它可以啓動相同的容器,或創建另一個容器?或者,也許是因爲我通過命令kubectl stop po停止了吊艙,因此它不會重新啓動同一個容器?

回答

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

而且在行動上,這是在我看來,實現HA的方式。集裝箱都是無國籍的,它們沒有任何東西在裏面。任何配置需要他們應該存儲在外面,如使用諸如Consul或Etcd之類的東西。通過這樣分開,容易重新啓動容器

+0

我使用persistentVolume HostPath來保存數據。我意識到我爲羣集中的每個節點使用了相同的persistentVolume,即使它們被安排在不同的節點上也是錯誤的。這是k8s持久卷的行爲,特別是HostPath?不過,我認爲這不應該是這樣。 謝謝@kureikain,你的回答幫助了我! –

0

嘗試使用PetSets http://kubernetes.io/docs/user-guide/petset/ 允許您爲您的(寵物)豆莢命名。如果一個吊艙被殺死,那麼它將以相同的名字回來。

petset功能摘要如下。

  • 穩定主機名
  • 穩定域名
  • 相似類型的多個寵物會具有 「-n」(重新考慮-0,被命名爲 反思-1,...重新考慮-n,用於例如)
  • 持久卷
  • 現在的應用程序可以羣集/同伴一起

當寵物莢死了,一個新的將被啓動,並承擔所有的SAM上一個的「狀態」(包括磁盤)。