一个Kubernetes集群主要是由主控节点(master)、工作节点(node)组成,每个节点上都会安装不同的组件。
Master组件:集群的控制平面,负责集群的决策(管理操作)
- ApiServer:(集群对外的统一入口,通过它分发请求,以restful方式)资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
- Scheduler:负责节点的调度,选择node节点进行应用部署(看应用在哪个节点上进行部署,比如空闲部署、繁忙不部署、启用量少部署)【Scheduler把任务交给ApiServer,ApiServer负责把请求写入Etcd,Scheduler不会与Etcd直接交互】
- ControllerManager(Replication Controller):(处理集群中常规后台任务,一个资源对应一个控制器做相关的管理)负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
- Etcd:(存储系统,用于保存集群相关数据)负责存储集群中各种资源对象的信息(状态数据、Service数据、Pod数据)【go语言编写的键值对数据库-可信赖的分布式键值存储服务】
Node组件:集群的数据平面,负责为容器提供运行环境(做具体事情)
- Kubelet:负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器(master派到node节点的代表)
- KubeProxy:提供网络代理、负责提供集群内部的服务发现和负载均衡
-
Docker:负责节点容器的各种操作
例:以部署一个Nginx服务来说明Kubernetes系统中各个组件调用的关系
1.一旦Kubernets环境启动之后,Master和Node都会将自己的信息存在Etcd数据库中
2.一个Nginx服务的安装请求会首先发送到Master节点的ApiServer组件
3.ApiServer组件会调用Scheduler组件决定到底应该把这个服务安装到哪个Node节点上
4.ApiServer会调用ControllerManager去调度Node节点安装Nginx服务
5.Kubelet接收到指令后,会通知Docker,然后由docker来启动一个Nginx的Pod(Pod是Kubernets的最小操作单元,容器必须跑在Pod中)
6.一个Nginx服务就运行了,如果需要访问Nginx。就需要通过KubeProxy来对Pod产生访问代理。这样外界用户就可以访问集群中的Nginx服务了。