K8s内核高可用架构
本文介绍了K8s节点部署架构、内核组件的部署拓扑图。
K8s节点部署架构
针对3 Master部署架构
1 Master关机,Trident功能无影响
任意Worker关机,Trident功能无影响;
2个或者2个以上Master关机,K8s管控能力不可用,已经创建并顺利运行的Pod不受影响
针对单Master部署架构(不推荐)
Master关机,K8s管控能力不可用,已经创建并顺利运行的Pod不受影响
节点高可用场景说明:
场景 | 期望 | 备注 |
1/3个master节点关机 |
| 关机后重启,pod能迁移回来 |
2/3个master节点关机 |
| |
3/3个master节点关机 |
| |
任意选择worker关机 |
|
关键定义:
Pod顺利迁移:Pod-A所在节点关机后,Pod-A可以在N分钟时间内,在另一个可用的节点上重新创建,并对外提供服务
Worker节点Pod正常运行:Worker节点Pod正常运行,可以被外部访问
K8s内核组件部署拓扑图
下图展示了Trident中包含的组件的部署拓扑,不同组件由于部署形式不同,在节点发生灾难时健壮性不同。
deployment:只要还有可用的节点(由调度的约束条件决定),就可以在漂移
daemonset:所有符合条件的节点,一定会有对应Pod
static pod:只要节点kubelet顺利启动,就会启动的Pod
网络依赖方面,所有hostnetwork的pod,不依赖容器网络的运行就可以正常启动
内核组件可用性阈值说明:
组件名称 | 功能正常的最小存活实例数 | 扩缩容 | 备注 |
etcd | 2/3 | 垂直扩缩容 | 如果etcd节点数是N,则存货节点数目必须超过N/2(向上取整) |
apiserver | 1/3 | 水平扩缩容 垂直扩缩容 | 3个apiserver能力对等 |
kube-controller-manager | 1/3 | 垂直扩缩容 | 选主模式运行 |
kube-scheduler | 1/3 | 垂直扩缩容 | 选主模式运行 |
coredns | 1/2 | 水平扩缩容 垂直扩缩容 | 正常来说,coredns的pod可以漂移 |
所有副本数为1的deploy | 1/1 | 垂直扩缩容 | |
kube-proxy | 每个节点上的都要正常 | 垂直扩缩容 | |
calico controller | 1/2 | 垂直扩缩容 | |
calico node agent | 每个节点上的都要正常 | 垂直扩缩容 | |
rama-webhook | 1/3 | 垂直扩缩容 | |
rama-manager | 1/3 | 垂直扩缩容 | |
rama-daemon | 每个节点上的都要正常 | 垂直扩缩容 | |
nimitz-netmaster | 1/3 | 垂直扩缩容 | |
nimitz-openvswitch | 每个节点上的都要正常 | 垂直扩缩容 | |
nimitz-netplugin | 每个节点上的都要正常 | 垂直扩缩容 | |
yoda-agent | 每个节点上的都要正常 | 垂直扩缩容 | |
yoda-scheduler-extender | 1/1 | 垂直扩缩容 | |
csi-yoda-resizer | 1/1 | 垂直扩缩容 | |
csi-yoda-provisioner | 1/1 | 垂直扩缩容 |
高可用测试说明
按照 【节点高可用场景说明】 表格“场景”一栏的描述,依次关机。
按照 【节点高可用场景说明】 表格“期望”一栏的描述,参考【内核组件可用性阈值说明】验证集群中所有K8s内核组件的功能,注意要从所有存活节点都进行验证。例如,要从所有节点上都验证到kube-dns svc的连通性。