High Availability Master 是如何选择的?

How is High Availability Master selected?

所以我刚开始使用 kubernetes,想知道如果我创建多个主节点,那么 pods 的调度是如何完成的,如果主节点出现故障,连接到它的工作节点会发生什么情况?

How is High Availability Master selected?

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

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

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

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

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

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

if the master goes down what happens to the worker nodes connected to it?

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