-
Notifications
You must be signed in to change notification settings - Fork 6
11 fault_tolerance
ziqianzhang edited this page Jun 7, 2023
·
1 revision
我们的容错性体现在以下两个方面
有关pod的信息全部持久化在etcd存储中,有关service的路由配置则持久化在各节点的iptables中,dns的相关配置同样保存在各个节点的相应文件内。 当整个控制面(包括Apiserver,controller,scheduler)以及各个节点上的组件(包括Kubelet,Kubeproxy)发生崩溃时并不会导致相关数据的丢失,当以上应用重启后,pod与service仍然可以正常访问。
如果由于某些原因导致控制平面与worker节点上的pod状态不一致时,我们以控制平面的状态为准,具体做法如下:
- Kubelet的StatusManager定期从控制平面拉取最新的pod的状态并持久化在Redis中
- Kubelet的RuntimeManager定期从实际运行的容器中获取容器状态
- PlegManager定期比较RuntimeManger与StatusManager获取的pod状态,根据比较结果产生相应事件
- 删除多余的pod
- 创建缺少的pod
- 重启丢失的container