第五篇:k8s架构剖析

72 阅读3分钟

注明:当前文档内容来源于51cto课堂‘宽哥’杜宽学习课程。

image.png

一、控制节点组件的作用

1.APIServer: APIServer是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群状态和信息存储到分布式键-值(key-value)存储系统Etcd集群中。同时他也是集群管理、资源配额、提供完备的集群安全机制入口,为集群各个类资源对象提供增删改查以及watch的REST API接口。

2.Scheduler: Scheduler是集群Pod的调度中心,主要是通过调度算法将Pod分配到最佳Node节点,他通过APIServer监听所有Pod的状态,一旦发现新的未被调度到任何Node节点的Pod(PodSpec.NodeName为空),就会根据一系列策略选择最佳节点进度调度。

3.Controller Manager: Controller Manager是集群状态管理器,以保证Pod或其他资源达到期望的值。当集群中某个Pod的副本数或其他资源因故障和错误导致无法正常运行,没有达到设定的值时,Contrller Manager会尝试自动修复并使其达到期望状态。

4.Etcd: Etcd由CoreOS开发,用于可靠地存储集群的配置数据,是一种持久性、轻量型、分布式的键-值(key-value) 数据存储组件,作为kubernetes集群的持久化存储系统。

二、工作节点的组件以及作用

1.Kubelet: kubelet 负责与Master通信协作,管理该节点上的pod,对容器进行健康检查以及监控,同时负责上报节点和节点上面pod的状态。

2.kube-Proxy: kube-Proxt 负责各Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。

3.Runtime: Runtime 负责容器的管理。

4.CoreDnS: 用于kubernetes 集群内部Service的解析,可以让Pod把Service名称解析成Service的ip,然后通过Service的ip地址进行连接到对应的应用上。

5.Calico: 符合CNI标准的一个网络插件,它负责给每个Pod分配一个不会重复的IP,并且把每个节点当做一个‘路由器’,这样一个节点的Pod就可以通过IP地址访问到其他节点的Pod。

三、组件剖析

1.Etcd部署注意事项:Etcd 服务组件部署一定要是奇数以防出现脑裂的情况且组件状态是2n-1的存活状态。例:三台只能挂一台,五台只能挂两台。条件允许的情况下尽量单独部署机器不要与master节点服务组件部署在一起,且磁盘使用ssd固态盘。

2.kubectl 可以部署在任何一个节点上甚至是不属于当前k8s集群下的机器,是通过kubeconfig 文件来通信管理pod以及事项。

3.Etcd 只有Master节点上的APIServer组件相互通信,其他组件均不会与Etcd直接通信。

4.Schedule 和 Controller是有状态组件 固定运行在某个master节点上。