总架构图:
k8s中各个组件:
(一) master 主节点即控制节点
流程如下:
- kubecfg将特定的请求,比如创建pod,发送给kubernetes client。
- kubernetes client将请求下发到api server
- api server根据请求的类型,比如说创建pod时storage的类型是pods,然后选择对应种类的rest storage api接口对请求做处理
- rest storage api对请求做相应处理
- 将创建、删除等请求的处理结果数据写入到etcd中。
- api server响应kubecfg的请求后,scheduler会根据kubernetes client获取集群中运行的pod以及 minion/node信息。
- 依据kubernetes client获取的信息,scheduler将未分发的pod分发到可用的minion/node节点上。
(二) Api server 资源操作入口
主要作用:
-
提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过Api Server访问集群状态。
第一、 为了保证集群的状态访问的安全。
第二、 为了隔离集群状态访问的方式和后端存储的实现方式,api server是状态访问的方式,不会因为后端存储技术etcd的改变而改变
-
作为kubernetes系统的入口,封装了核心对象的增删改查操作,以Restful接口方式提供给外部客户和内部组件使用,对相关资源数据全量查询和变化监听,实时完成相关业务功能。
(三) Controller Manager
主要作用:
实现集群故障检测和恢复的自动化工作,负责执行各种控制器,主要有
endpoint-controller: 定期关联service 和pod,保证service到pod的映射总是最新的。 replication-controller:定期关联relicationController和pod,保证replicationController的定义的复制数量和实际运行破的数量上总是一致的
(四) Scheduler 集群分发调度器
主要作用:
- Scheduler收集和分析当前Kubernetes集群中所有Minion/Node节点的资源(内存、cpu)负载情况,然后依次分发新建的Pod到kubernetes集群只能可用的节点 2.实时监测Kubernetes集群中未分发和已经分发的运行的所有pod
- Scheduler也会监测Minion/Node节点信息,由于会频繁查找Minion/Node节点,Scheduler会缓存一份最新的xinxi在本地。
- 最后,Scheduler在分发pod到指定的Minion/Node节点后,会把pod信息bind写会到Api Server。
(五) kube-node 服务节点
node 工作流图
(六) kubelet 节点上的pod管家
- 负责node节点上pod的创建、修改、监控、删除等全生命周期的管理
- 定时上报本node的状态给api server
- kubelet是master和node之间的桥梁,接收master api server分配给它的command和work,通过api-server间接与etcd集群交互,读取配置信息。
- 具体工作如下:
- 设置容器的环境变量,给容器绑定volume,给容器绑定port、根据指定的pod运行一个单一容器,给指定的pod创建network容器。
- 同步pod的状态,从cadvisor获取container info、pod info、root info、 machine info。
- 在容器中运行命令、杀死容器、删除pod的所有容器。
(七) proxy 负载均衡、路由转发
-
proxy是为了解决外部网络能够访问跨机器集群中容器提供的应用服务而设计的,运行在每个node上,proxy提供tcp/udp sockets的proxy,每创建一种service, proxy主要从etcd中获取service和endpoints的配置信息,然后根据配置信息在node上启动一个proxy的进程并监听相应的服务端口,当外部请求发生时,proxy会根据load balance将请求分发到后端正确的容器处理。
-
proxy不但解决了同一主宿机相同服务端口冲突问题,提供service转发服务端口对外提供服务的能力。proxy后端使用了随机、轮询负载均衡算法。
(七) kubectl 集群管理命令行工作集
通过客户端的kubectl命令集操作,api server相应对应的命令结果,从而达到对kubernetes集群管理。