引言
在 SuperEdge 0.2.0版本中,lite-apiserver 进行了重大的架构升级和功能增强。本文将从 lite-apiserver 实现及其与其它 SuperEdge 组件协同的角度,分析 SuperEdge 的边缘自治能力,给大家的研究和选型提供参考。
边缘节点自治
在云边协同的边缘计算场景中,边缘节点通过公网与云端连接。边缘节点众多,网络环境复杂,网络质量参差不齐。边缘节点需要与云端弱网或断网情况下,继续正常工作,已运行的业务不受影响,达到边缘节点自治的目的。 为了实现边缘节点自治,需要处理以下场景:
- 边缘节点与云端断连,但是它本身正常,上面运行的业务容器应该不被驱逐,也没有新的业务容器调度到该节点上
- 边缘节点与云端断连时,边缘节点上的 Kubernetes 组件和业务容器可继续运行
- 边缘节点与云端断连时,边缘节点重启后,节点上的 Kubernetes 组件和业务容器可运行
- 边缘节点与云端恢复后,边缘节点上的数据与云端保持一致
SuperEdge 使用分布式节点健康检查组件 edge-health 来处理场景1,使用 lite-apiserver 来应对场景2、3、4。
lite-apiserver 是运行在边缘节点上的轻量级 apiserver,它代理节点上所有组件和业务容器访问云端 kube-apiserver 的请求,并对请求结果做高效缓存。在云边断连的情况下,利用这些缓存提供服务,实现边缘自治的能力。
lite-apiserver 设计特性
lite-apiserver除了满足边缘节点自治的功能需求外,还需要满足以下设计特性:
支持所有 Client 类型
作为边缘节点上访问云端 kube-apiserver 的唯一“出口”,lite-apiserver 需要支持所有类型的 Client ,包括以 bin (如 kubelet 等)或 pod (如 flannel\kube-proxy 等)形式运行的 Kubernetes 组件,以及以 InCluster 方式访问 kube-apiserver 的业务容器。 更进一步,如果边缘节点网络环境特殊,需要以代理等方式才能访问云端 kube-apiserver时,只用给 lite-apis