杜杨浩,腾讯云高级工程师,热衷于开源、容器和Kubernetes。目前主要从事镜像仓库、Kubernetes集群高可用备份还原,以及边缘计算相关研发工作。
前言SuperEdge介绍SuperEdge是基于原生Kubernetes的边缘容器管理系统。该系统把云原生能力扩展到边缘侧,很好的实现了云端对边缘端的管理和控制,极大简化了应用从云端部署到边缘端的过程。同时SuperEdge设计了分布式健康检查机制规避了云边网络不稳定造成的大量pod迁移和重建,保证了服务的稳定。
SuperEdge分布式健康检查云端组件SuperEdge分布式健康检查功能由边端的edge-health-daemon以及云端的edge-health-admission组成:
edge-health-daemon:对同区域边缘节点执行分布式健康检查,并向apiserver发送健康状态投票结果(给node打annotation)edge-health-admission:不断根据nodeedge-healthannotation调整kube-controller-manager设置的nodetaint(去掉NoExecutetaint)以及endpoints(将失联节点上的pods从endpointsubsetsnotReadyAddresses移到addresses中),从而实现云端和边端共同决定节点状态整体架构如下所示:
之所以创建edge-health-admission云端组件,是因为当云边断连时,kube-controller-manager会执行如下操作:
失联的节点被置为ConditionUnknown状态,并被添加NoSchedule和NoExecute的taints失联的节点上的pod从Service的Endpoint列表中移除当edge-health-daemon在边端根据健康检查判断节点状态正常时,会更新node:去掉NoExecutetaint。但是在node成功更新之后又会被kube-controller-manager给刷回去(再次添加NoExecutetaint),因此必须添加Kubernetesmutatingadmissionwebhook也即edge-health-admission,将kube-controller-manager对nodeapiresource的更改做调整,最终实现分布式健康检查效果
在深入源码之前先介绍一下KubernetesAdmissionControllers[1]
AnadmissioncontrollerisapieceofcodethatinterceptsrequeststotheKubernetesAPIserverpriortopersistenceoftheobject,butaftertherequestisauthenticatedandauthorized.Thecontrollersconsistofthelistbelow,are