K8S基本组件梳理

Master组件

apiserver:对资源对象进行curd操作,例如pod和server;将所有的状态储存到etcd中。

schedule:监控未调度的pod,根据pod的资源需求、资源可用性和其他约束,选择最合适的节点来运行pod。

controller-manage:监控集群的状态,实现集群的自愈和自动化管理。

​ Replication controller:确保指定个数的pod副本在集群上运行。

​ Node controller:监控集群中节点(Node)的状态,确保节点的健康状况。

​ Endpoints controller:为services对象维护和更新其关联的Pod列表。

​ Namespace controller:管理K8S的中的命名空间,包括监控和清理被删除的。

​ Service controller:管理和维护LoadBalancer类型服务的外部负载均衡器。

​ LoadBalancer是用于在多台服务器(或 Pod)之间分发网络流量的组件:

​ - 流量分发:将来自外部的请求均匀地分配到多个后端实例(如 Pod 或服务器),以避免某一实例负载过重,提高应用的可 用性和响应速度。

​ - 高可用性:当某些后端实例不可用时,LoadBalancer 可以自动将流量重定向到健康的实例,确保服务的连续性。

​ - 扩展性:通过负载均衡,系统可以动态添加或移除后端实例,以应对流量的变化,从而实现弹性伸缩。

​ ServiceAccount controller:为每个新创建的namespace自动创建默认的ServiceAccount对象,确保token被分配到这些 ServerAccount中。

Node组件

kube-proxy:维护节点上的网络规则,服务负载均衡,根据据服务的虚拟 IP 地址和端口,将流量分发到后端的 Pod 上,确保流量能够 均匀地分布在多个副本上。并根据这些变化动态更新自己的网络规则,确保流量始能够正确转发到当前有效的 Pod 。

kuberlet:是一个代理,他会根据主节点的指令,确保制定容器在节点的正确运行;他会监控容器的健康情况,向apiserver发送节点 的状态,apiserver接收到这些节点的状态信息之后,会将它们更新到etcd中;kubelet也通过apiserver监听Pod信息,从而 对Node机器上的Pod进行管理:如创建,更新,删除Pod。

容器运行时:每个工作节点需要一个容器运行时来运行和管理容器。

calico:提供容器网络和网络策略的解决方案,能实现容器和容器间的通信、流量控制和安全策略来增强器群的网络能力。
(通俗的讲就是给Pod和Service分配ip的)

其他组件

Etcd:是一个高可用的键值存储数据库,存储K8S的资源状态信息和网络信息,Etcd中的数据变更通过apiserver来进行。(基数选主,至少三个做高可用)

Coredns:是一个dns服务器,能够K8S Services提供dns记录(可以对Service名字进行解析,解析成Service的IP)