03.集群组件

Kubernetes集群组件

K8s 集群主从架构

Master Components

Kubernetes主要由以下几个核心组件组成:

  • etcd:是高可用的key/value存储系统,用于持久化存储集群中的所有资源对象,比如:Node,Pod,Serivce,RC,namespace等。API server提供了操作etcd的封装接口API,以Rest的方式提供,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口,比如创建Pod、RC,监听Pod的变化等接口。API server是连接其他所有服务组件的中间枢纽。

  • kube-apiserver:提供了资源对象的唯一操作入口,其他组件都必须通过它提供的API来操作资源数据,通过对相关的资源数据全量查询与变化监听,这些组件可以近乎实时地完成相关的业务功能。比如提交一个新的Podkube-apiserve中,kube-controller-manger可以立即就发现并开始作用。它还有一套完备的安全机制,包括认证、授权及准入控制等相关模块。

  • kube-controller-manger:集群内部的管理控制中心,主要完成了集群的故障检测和恢复的自动化工作。比如对RC定义的Pod进行维护;根据ServicePod的关系,完成服务的Endpoints对象的创建和更新;还有Node的发现、管理和状态监控,死亡容器所占资源及本地缓存的镜像文件的清理等工作。

  • kube-scheduler:集群的调度器,负责Pod在集群节点中的调度分配,也负责Volume(CVI)和网络(CNI)的管理,按照预定的调度策略将Pod调度到相应的机器上;

Node Components

  • kubelet:负责本地节点上Pod的创建、修改、监控、删除等生命周期管理,同时会上报本Node的状态信息到API server

  • kube-proxy:实现Service的代理及软件模式的负载均衡器。

  • kubectl:集群内部的客户端可以直接使用kubectl命令管理集群;集群外的客户端需要使用kubectl Porxy进行反向代理来访问API server

  • cAdvisor:Node节点运行的kubectl服务中内嵌了一个cAdvisor服务,cAdvisor是谷歌的开源项目,用于实时监控Docker上运行的容器的性能指标。

组件通信

Kubernetes多组件之间的通信原理为apiserver负责etcd存储的所有操作,且只有apiserver才直接操作etcd集群。apiserver对内(集群中的其他组件)和对外(用户)提供统一的REST API,其他组件均通过apiserver进行通信。controller manager、scheduler、kube-proxykubelet等均通过apiserver watch API监测资源变化情况,并对资源作相应的操作。所有需要更新资源状态的操作均通过apiserverREST API进行。apiserver也会直接调用kubelet API(如logs, exec, attach,默认不校验kubelet证书,但可以通过 --kubelet-certificate-authority 开启(而GKE通过SSH隧道保护 它们之间的通信

比如典型的创建Pod的流程为:

Pod 创建流程

用户通过REST API创建一个Podapiserver将其写入etcdscheduluer检测到未绑定NodePod,开始调度并更新PodNode绑定,kubelet检测到有新的Pod调度过来,通过container runtime运行该Podkubelet通过container runtime取到Pod状态,并更新到apiserver中。

使用的端口号

端口之间数据流动

Master node(s)

Protocol Direction Port Range Purpose
TCP Inbound 6443* Kubernetes API server
TCP Inbound 8080 Kubernetes API insecure server
TCP Inbound 2379-2380 etcd server client API
TCP Inbound 10250 Kubelet API
TCP Inbound 10251 kube-scheduler healthz
TCP Inbound 10252 kube-controller-manager healthz
TCP Inbound 10253 cloud-controller-manager healthz
TCP Inbound 10255 Read-only Kubelet API
TCP Inbound 10256 kube-proxy healthz

Worker node(s)

Protocol Direction Port Range Purpose
TCP Inbound 4194 Kubelet cAdvisor
TCP Inbound 10248 Kubelet healthz
TCP Inbound 10249 kube-proxy metrics
TCP Inbound 10250 Kubelet API
TCP Inbound 10255 Read-only Kubelet API
TCP Inbound 10256 kube-proxy healthz
TCP Inbound 30000-32767 NodePort Services**
上一页
下一页