文章目录
1、kubernetes控制平面组件
1、kube-apiserver
-
是公开kubernetes api 的集群的中心枢纽,具有高度的可扩展性,可以处理大量的并发请求
-
是所有组件的通信枢纽,就是接收,验证和处理集群内的各类请求,创建,更新,删除,同时将所有的数据和状态持久化到etcd中
-
多个kube-apiserver实例可以在集群中同时运行,分担请求压力,提高高可用
-
k8s对外的唯一接口,所有请求都要到这里来
2、etcd
-
保存k8s集群中配置信息和各种资源的状态信息,当数据发生变化时。etcd会快速的通知k8s相关组件,etcd是一个独立的组件,不属于k8s集群
-
不仅提供数据存储,还提供了监听机制,用于监听和推送变更,etcd的变化会通知api server,并通过watch api 向客户端输出
3、controller-manager
-
负责管理k8s集群各种资源,保证资源处于预期状态,controller-manager由多种controller组成,包括replication controller、endpoints,controller、namespace controller、serviceaccounts controller等
-
相当于是一个主要的控制器
4、schedule
- 资源调度,负责决定pod运行在哪一个node上面,调度时,会对集群的结构进行分析,比如,负载等
2、node组件
1、kubelet
- 是node的agent,scheduler确定在某个node上运行pod后,会将pod的具体配置信息image,volume发送到kubelet,然后kubelet根据这些信息创建和运行容器。并且向master报告运行状态
2、container runtime
- 每一个node都需要容器运行时环境,负责下载镜像并运行容器
3、kube-proxy
- service在逻辑上面代理了多个pod,外界通过service访问pod,service接收到请求就需要kube-proxy完成转发到pod,每一个node上面都会运行kube-proxy服务,负责将访问的service的tcp|udp数据流转发到后端的容器
3、附加组件
1、kubedns
- 运行提供dns服务的pod,同一个集群内的其他pod可以使用dns服务来解决主机名
2、dashboard
- 基于web 的ui,管理应用好集群自身
4、创建pod的原理
-
客户端提交创建请求,可以通过api server的reseful api,也可以使用kubectl命令行工具
-
api server处理用户请求,进行身份验证和授权检查,确保请求的用户是合法的
-
通过后,存储pod数据到etcd
-
scheduler通过api server查看没有调度的pod,尝试为pod分配主机,中间经过了一系列的算法
-
过滤出不符合要求的主机,比如pod需要的资源量
-
kubelet创建并运行pod,kubelet通过资源的信息来创建
-
pod创建和运行的过程中,kubelet会不断的向api server报告pod的状态信息,api server将这些状态更写入到etcd中保存,这样用户和其他组件可以通过api server查询pod的当前状态