Kubernetes是主从的结构,它主要实现了对docker的调度,下面就详细的介绍一下我对Kubernetes架构的理解:
Master节点 :
api server:提供了集群管理的API接口,成为了集群中各个功能模块之间数据交互和通信的中心枢纽,并且拥有完备的集群安全机制,是整个集群的核心。
Scheduler:主要负责pod的调度策略,主要作用是将调度的pod按照特定的调度算法和调度策略绑定到集群中的某个适合的node上,并将绑定信息写入etcd中。他也是通过监听API server来获取创建pod的yaml。
Controller manager:是集群内部的管理控制中心,主要提供的控制服务有:Replication Controller(pod副本的控制)、Node Controller(Node节点的控制)、ResourceQuota Controller(资源的控制)、ServiceController及Endpoint Controller(服务的生成以及控制),它的控制管理的过程是通过监听API server来实现的。
etcd:用来存放各种增删改查的信息的数据仓库,所有的信息都会存放在这里。
node节点:
pod:是运行的最小单元,里面可以运行1~多个container,每一个pod都会有一个唯一的ip地址。资源是根据namespace来进行隔离的。
Kubelet:每一个node上都会起一个kubelet服务进程,用于处理Master节点下发到本节点的任务,管理和创建pod容器,并且会周期性的向API server汇报节点资源的使用情况。
Kubelet-proxy:service的真实代理,接收service的服务,利用iptables将service请求重定向到kubelet-proxy,然后将任务分发到相应的pod的节点上去。(roundrobin算法按照成员列表逐个选择成员,如果一轮循环完成,便从头开始下一轮,同时还支持session)
下面两个小例子来详细描述一下各个功能节点的作用:
pod的创建过程(如图):
1. 指令传到APIserver,API server将pod的创建信息固化到etcd上
2.scheduler监控APIserver的watch端口,查看到etcd中有创建pod的消息,下面就为pod选择合适的node节点,并进行绑定,绑定成功后,scheduler会调用APIServer的API的增加接口在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。
3. kubelet监控APIserver的watch端口监听pod信息,发现有新的pod绑定在该节点上的时候,则根据etcd中的boundpod信息进行pod创建。
4. docker会从image仓库中查看docker的信息,并下载docker image最终进行container的创建。
5. controller-manager会监听API server的端口,对node、pod副本、资源等进行管理。
外部访问pod,pod并提供服务:
1 controller-manager会监控API server的端口,然后管理service和endpoint的创建,其中endpoint主要是提供了server对应pod 的副本的访问地址。
2 proxy是service的主要实现者,他通过监听API server的端口,发现service,为service创建一个代理接口socket server用来接收来自server的访问请求,并创建Iptables,利用其规则使service的请求重定向到socket server。
3 在收到service请求之后,proxy将请求转发到后端的pod上,实现请求并实现负载均衡。
以上均为个人观点,如有错误还请各位大神指正