【发布时间】:2020-01-02 09:19:11
【问题描述】:
所以我刚刚启动了 kubernetes,想知道如果我创建了多个 master,那么 pod 的调度是如何完成的,如果 master 宕机了,连接到它的工作节点会发生什么?
【问题讨论】:
标签: kubernetes kubeadm
所以我刚刚启动了 kubernetes,想知道如果我创建了多个 master,那么 pod 的调度是如何完成的,如果 master 宕机了,连接到它的工作节点会发生什么?
【问题讨论】:
标签: kubernetes kubeadm
High Availability Master 是如何选择的?
下面的 etcd 数据库是大部分高可用性的来源。它使用raft protocol 的implementation 来达成共识。
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 无法恢复的方式失败。
【讨论】: