Kubernetes -- 高可用集群下组件实例状态
kubernetes高可用集群的典型架构
文章图片
控制面组件:
- etcd:多实例并行运行,通过Raft保证一致;
- apiserver:多实例并行运行;
- controller-manager:多实例仅有1个节点active;
- scheduler:多实例仅有1个节点active;
- kubelet
- kube-proxy
apiserver多个实例并行运行,通过Loadbalancer负载均衡用户的请求。
scheuler和controller-manager单实例运行 scheduler和controller-manager会修改集群状态,多实例运行会产生竞争状态。
通过--leader-elect机制,只有领导者实例才能运行,其它实例处于standby状态;当领导者实例宕机时,剩余的实例选举产生新的领导者。
领导者选举的方法:多个实例抢占创建endpoints资源,创建成功者为领导者。
比如多个scheduler实例,抢占创建子endpoints资源:kube-scheduler
# kubectl get endpoints kube-scheduler -n kube-system -oyaml
apiVersion: v1
kind: Endpoints
metadata:
annotations:
control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master1_293eaef2-fd7e-4ae9-aae7-e78615454881","leaseDurationSeconds":15,"acquireTime":"2021-10-06T20:46:43Z","renewTime":"2021-10-19T02:49:21Z","leaderTransitions":165}'
creationTimestamp: "2021-02-01T03:10:48Z"
......
查询kube-scheduler资源,可以看到此时master1上的scheduler是active状态,其它实例则为standby。
kubelet和kube-proxy在工作节点上运行 kubelet和kube-proxy运行在工作节点上。
kubelet负责:
- 向apiserver创建一个node资源,以注册该节点;
- 持续监控apiserver,若有pod部署到该节点上,创建并启动pod;
- 持续监控运行的pod,向apiserver报告pod的状态、事件和资源消耗;
- 周期性的运行容器的livenessProbe,当探针失败时,则重启容器;
- 持续监控apiserver,若有pod删除,则终止该容器;
- 负责确保对服务ip和port的访问最终能到达pod中,通过节点上的iptables/ipvs来实现;
- kubernetes in action
推荐阅读
- JS中的各种宽高度定义及其应用
- 眼光要放高远
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- 高天天工作室|溧清的剧本4
- 托福听力高分备考方案
- 周老师《金鸡图》
- 《高老头》听后感
- 高大上还是路边摊
- 唐嫣可真会穿,西装搭牛仔裤都能穿出高级感,一双大长腿太抢镜