如上图所示是Kubernetes集群的架构图,主要有下列概念
etcd
etcd是一款分布式协调系统,可以用于分布式数据的持久化。在Kubernetes系统中,etcd负责整个kubernetes集群的数据持久化存储,etcd通过集群模式部署实现高可用
Master节点
Master节点由三个紧密协作的独立组件组合而成,它们分别是负责 API 服务的 kube-apiserver、负责调度的 kube-scheduler,以及负责容器编排的 kube-controller-manager。其中kube-apiserver是一个核心模块,
apiserver: apiserver通过与etcd交互实现数据的持久化,对外提供基础的API接口。scheduler、controller-manager以及其他kubernetes的扩展组件都是与apiserver交互实现更多的功能。
scheduler: scheduler收集和分析当前Kubernetes集群中所有Node节点的资源(内存、CPU)负载情况,然后依此分发新建的Pod到Kubernetes集群中可用的节点。实时监测Kubernetes集群中未分发和已分发的所有运行的Pod。
controller-manager: controller-manager包含各种控制器,目前有两类endpoint-controller和replication-controller。endpoint-controller定期关联service和Pod(关联信息由endpoint对象维护),保证service到Pod的映射总是最新的。replication-controller定期关联replicationController和Pod,保证replicationController定义的复制数量与实际运行Pod的数量总是一致的。
Woker节点
Worker作为计算节点,负责部署运行具体的业务容器镜像。Worker节点中也有几个比较重要的概念:
kubelet : kubelet 主要同容器运行时(比如 Docker 项目)打交道,负责Node节点上pod的创建、修改、监控、删除等全生命周期的管理。而这个交互所依赖的,是一个称作CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作,比如:启动一个容器需要的所有参数。同时kubelet会定时上报本Node的状态信息给API Server。
**kube-proxy: ** 实现集群网络服务负载均衡。Proxy运行在每个Node上,Proxy提供TCP/UDP sockets的proxy,每当创建一个Service,Proxy主要从etcd获取Services和Endpoints的配置信息),然后根据配置信息在Node上启动一个Proxy的进程并监听相应的服务端口,当外部请求发生时,Proxy会根据Load Balancer将请求分发到后端正确的容器处理。
最后再引用一张非常好的描述Kubernetes能力的脑图: