kubernetes - High Availability Master 是如何选择的?
问题描述
所以我刚刚启动了 kubernetes,想知道如果我创建了多个 master,那么 pod 的调度是如何完成的,如果 master 宕机了,连接到它的工作节点会发生什么?
解决方案
High Availability Master 是如何选择的?
下面的etcd数据库是大部分高可用性的来源。它使用raft 协议的实现来达成共识。etcd 需要一定数量的实例可供 Kubernetes 使用,以便能够将更新写入集群。如果您的可用空间少于 1/2,etcd 将进入“只读”模式,这意味着无法安排任何新内容。N/2 + 1
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 的本地实例。控制器将选举一个领导者来锁定它管理的数据。可以在端点中找到领导者信息:
kubectl -n kube-system get endpoints kube-controller-manager \
-o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
如果主服务器宕机,连接到它的工作节点会发生什么?
他们继续以当前状态运行。不会安排新的 Pod,也不会推出对集群现有状态的任何更改。您的 pod 将继续运行,直到它们以本地 kubelet 无法恢复的方式失败。
推荐阅读
- python - 在 Jupyter 中以全尺寸显示图像
- php - 在 laravel 5.6 中运行 python 脚本
- r - 无法在嵌套的 observeEvent 中获取对象 | R 闪亮
- vue.js - VueJS - 直接转到子路由
- tableau-api - Tableau Desktop 删除计算字段
- angular - 试图理解角度缓存破坏
- pandas - 为什么我的数据框没有附加?
- sql - 如何在Oracle中搜索一行是否是同一列的另一行的子字符串
- reactjs - 我如何在 redux-observable 中使用“of”
- python - OpenAI健身房cartpole-v0理解观察和动作关系