一、kubernetes的主从架构
kubectl,全称 Kubernetes Control Plane,它表示Kubernetes为了实现最终的目标而构建的一组集群范围内的进程,这组进程相互协调,保证整个集群系统达到用户所期望的目标状态,比如,容器失败自动调度并重启,应用服务的扩容缩容,等等。
Kubectl 管理了Kubernetes集群中的所有Kubernetes对象及其状态,这些对象包括Pod、Service、Volume、Namespace、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job等等。
Kubernetes Control Plane主要包含两部分,一部分是Kubernetes集群Master上一组关键进程,另一个部分是在每个工作的Node节点上的一组关键进程。
二、Kubernetes Master
Kubernetes Master主要由kube-apiserver、kube-controller-manager和kube-scheduler三个进程组成,它们运行在集群中一个单独的节点上,具体说明如下:
1、kube-apiserver进程
想要操作Kubernetes集群中的任何对象,都需要经过kube-apiserver,它封装了对Kubernetes对象的所有操作,以REST接口方式提供给想要与Kubernetes交互的任何客户端。经过kube-apiserver的所有对Kubernetes对象的修改操作都将持久化到etcd存储中。
2、kube-controller-manager进程
kube-controller-manager进程负责运行各种Controller,这些Controller主要包括:
- Node Controller
- Replication Controller
- Endpoints Controller
- Service Account
- Token Controller
3、kube-scheduler进程
kube-scheduler进程负责Kubernetes集群内部的资源调度,主要负责监视Kubernetes集群内部已创建但没有被调度到某个Node上的Pod,然后将该Pod调度到一个选定的Node上面运行。
三、Kubernetes Node
Kubernetes集群中,每个工作的Node节点上主要运行如下两个进程:
1、kubelet进程
kubelet负责监视指派到它所在Node上的Pod,还负责处理如下工作:
- 为Pod挂载Volume
- 下载Pod拥有的Secret
- 运行属于Pod的容器
- 周期性地检查Pod中的容器是否存活
- 向Master报告当前Node上Pod的状态信息
- 向Master报告当前Node的状态信息
2、kube-proxy进程
在Kubernetes集群中,每个Node上面都有一个该网络代理进程,它主要负责为Pod对象提供代理:定期从etcd存储中获取所有的Service对象,并根据Service信息创建代理。当某个Client要访问一个Pod时,请求会经过该Node上的代理进程进行请求转发。