【问题标题】:High availability issue with rethinkdb cluster in kubernetesKubernetes 中 rethinkdb 集群的高可用性问题
【发布时间】:2015-10-21 11:25:17
【问题描述】:

我正在 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,所以它不会重新启动同一个容器?

【问题讨论】:

    标签: rethinkdb kubernetes


    【解决方案1】:

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

    要持久化数据,您需要某种外部存储(NFS、EBS、EFS,...)。如果是k8s,你可能想看看这个https://github.com/kubernetes/kubernetes/blob/master/docs/design/persistent-storage.md这个Github issue也有很多信息https://github.com/kubernetes/kubernetes/issues/6893

    事实上,在我看来,这就是实现 HA 的方法。容器都是无状态的,它们里面没有任何东西。他们的任何配置需求都应该存储在外部,例如使用 Consul 或 Etcd 之类的东西。通过这样分离,重启容器更容易

    【讨论】:

    • 我使用 persistentVolume HostPath 来持久化数据。我意识到我对集群中的每个节点都使用了相同的 persistentVolume,即使它们被安排在不同的节点上也是错误的。这是 k8s 持久卷的行为,特别是 HostPath?但是,我认为不应该是这样。谢谢@kureikain,你的回答帮助了我!
    【解决方案2】:

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

    petset功能总结如下。

    • 稳定的主机名
    • 稳定的域名
    • 多个相似类型的宠物将使用“-n”命名(rethink-0, rethink-1, ... rethink-n 例如)
    • 持久卷
    • 现在应用可以集群/对等

    当宠物吊舱死亡时,将启动一个新的吊舱,并采用与前一个吊舱相同的“状态”(包括磁盘)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2019-11-06
      • 1970-01-01
      • 2017-03-12
      • 2020-04-07
      • 2022-11-10
      • 2019-06-25
      相关资源
      最近更新 更多