k8s的设计架构

Kubernetes主要由以下几个核心组件组成:
1、etcd是一个分布式键值对存储系统,保存集群所有的网络配置和对象的状态信息,保存了整个集群的状态;
2、apiserver提供了资源操作的唯一入口,无论是集群内部还是外部的组件都必须通过APIServer来访问数据,实现解耦合,并提供认证、授权、访问控制、API注册和发现等机制;
3、controller manager是集群内部的管理控制中心,包括集群内的Node、Pod副本数量、服务端点(Endpoint)、命名空间(NameSpace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)等的管理,并当node以外宕机时执行自动修复流程,确保集群处于预期的工作状态。
4、scheduler负责对资源进行调度,分配某个pod到某个合适的节点上,并将绑定信息写入etcd,调度策略主要分为全局调度与运行时调度2种;
5、Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
6、kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理,主要完成以下使命: 
监视分配给该Node节点的pods、挂载pod所需要的volumes 、下载pod的secret、通过docker/rkt来运行pod中的容器、周期的执行pod中为容器定义的liveness探针、上报pod的状态给系统的其他组件、上报Node的状态(资源使用情况);
7、kube-proxy负责为Service提供cluster内部的服务发现和负载均衡。在k8s中,提供相同服务的一组pod可以抽象成一个service,由于Pod存在生命周期,有销毁,有重建,无法提供一个固定的访问接口(ip)给客户端,就通过service提供的统一入口对外提供服务,每个service都有一个虚拟IP地址(VIP)和端口号供客户端访问。 
kube-proxy存在于各个node节点上,主要用于Service功能的实现,具体来说,将集群外的主机通过NodePort等方式对Service的访问转发到后端的多个Pod实例上,为pod上的服务提供访问的代理。 (kube-proxy默认使用的是iptables模式,通过node节点上的iptables映射规则来实现service的负载均衡,但是随着service数量的增大,iptables模式由于线性查找匹配、全量更新等特点,其性能会显著下降。从k8s的1.8版本开始,kube-proxy引入了IPVS模式,IPVS模式与iptables同样基于Netfilter,但是采用的hash表,因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。);

master包含apiserver、scheduler、controller manager、etcd
node包括kubelet、kube-proxy

上一篇:Windows或Linux使用kubectl控制远程k8s集群


下一篇:【PS算法理论探讨二】 Photoshop中图层样式之 投影样式 算法原理初探讨。