【问题标题】:How is High Availability Master selected?High Availability Master 是如何选择的?
【发布时间】:2020-01-02 09:19:11
【问题描述】:

所以我刚刚启动了 kubernetes,想知道如果我创建了多个 master,那么 pod 的调度是如何完成的,如果 master 宕机了,连接到它的工作节点会发生什么?

【问题讨论】:

    标签: kubernetes kubeadm


    【解决方案1】:

    High Availability Master 是如何选择的?

    下面的 etcd 数据库是大部分高可用性的来源。它使用raft protocolimplementation 来达成共识。 etcd 需要一定数量的 N/2 + 1 实例可供 kubernetes 使用,以便能够将更新写入集群。如果您的可用空间少于 1/2,etcd 将进入“只读”模式,这意味着无法安排任何新内容。

    kube-apiserver 将以主动/主动模式在多个节点上运行。所有实例都使用相同的 etcd 集群,因此呈现相同的数据。工作节点将需要某种方式来对可用的 apiservers 进行负载平衡/故障转移。故障转移需要 Kubernetes 之外的组件,例如 HAProxy 或负载均衡器设备(例如 AWS 提供的)。

    kube-scheduler 将在多个主节点上运行,并且应该访问 kube-apiserver 的本地实例。调度器将选举一个领导者来锁定它管理的数据。当前的leader信息可以在endpoint中找到:

    kubectl -n kube-system get endpoints kube-scheduler \
      -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
    

    kube-controller-manager 将在多个主节点上运行,并且应该访问 kube-apiserver 的本地实例。控制器将选举一个领导者来锁定它管理的数据。可以在endpoint中找到leader信息:

    kubectl -n kube-system get endpoints kube-controller-manager \
     -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
    

    如果主节点宕机,连接到它的工作节点会发生什么情况?

    它们继续以当前状态运行。不会安排新的 Pod,也不会推出对集群现有状态的任何更改。您的 pod 将继续运行,直到它们以本地 kubelet 无法恢复的方式失败。

    【讨论】:

    • 那么,如果当前主节点发生故障,节点会或不会被分配给新主节点?
    • 节点没有“分配的”主节点,它们通过负载均衡器与 apiserver 通信。如果您的负载均衡器可以故障转移并且至少有一个 apiserver 可用,它们将继续像以前一样运行
    • 知道了。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 2011-06-06
    • 2023-03-14
    • 2021-02-18
    • 1970-01-01
    • 2010-11-25
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多