1. Kubernetes组件
Kubernetes的系统设计和Borg的系统架构设计理念非常相似,比如Scheduler调度器,Pod资源对象管理等。Kubernetes的总架构图如下所示。
一个Kubernetes集群主要是由控制节点(Master)和工作节点(Node)组成。其中运行在控制节点和工作节点上的组件有所不同。
1. 控制节点
(1)集群的大脑,负责管理所有的节点;
(2)负责调度Pod在哪个节点上运行;
(3)控制集群运行过程中所有的状态;
API Server: 集群HTTP REST API接口,是集群控制的入口;
Scheduler: 对集群中的资源进行调度,按照一定的算法调度Pod到指定的Node节点上;
Controller-manager: 集群中所有资源对象的自动化控制中心,如自动伸缩、滚动更新等;
Etcd: 分布式存储中间件,负责存储集群中各种资源对象信息。
2. 工作节点
(1) 负责管理所有容器;
(2) 监控、上报所有Pod的运行状态。
Kubelet: 负责管理工作节点上的容器;
Kube-proxy: 负责Kubernetes服务的通信和负载均衡;
Container组件: 负责容器基础管理服务,比如Docker就是一种Container组件,接收Kubelet的指令。
下面以在Kubernetes集群中创建一个Nginx应用为例来描述各组件之间的调用关系。
- 用户通过APIServer下发创建Nginx应用的命令;
- APIServer会调用Scheduler组件计算应该将Nginx应用创建在哪一个节点上。Scheduler组件从Etcd数据库中读取控制节点、工作节点的信息,并将计算结果告知APIServer;
- APIServer得到结果之后,将会调用Controller-manager去调度节点安装Nginx应用;
- 工作节点上的Kubelet组件在得到指令之后,创建Pod,并将会调用容器组件接口创建对应的容器运行于Pod之中。Pod是Kubernetes管理的最小单元;
- Nginx运行完成之后,用户可以通过Kube-proxy提供的代理访问对应的服务。
2. 基本概念
(1) Master
控制节点。负责集群的管理。
(2) Node
工作节点。部署的容器运行的地方。
(3) Pod
K8S调度的基本单元。Pod运行在Node之上,容器运行于Pod之中,一个Pod中可以运行多个容器。
(4) Controller
控制器。用来对Pod进行管理(创建、销毁、监控、扩容等)。
(5) Service
Pod对外提供服务的统一入口。一个服务下可以有多个Pod。