基本架构
K8s采用的是Master/Worker架构,至少需要一个Master节点和多个Worker节点。
Master节点是控制节点,负责对集群进行调度管理,Master节点由交互器(API Server)、存储器(Etcd)、控制器(Controller Manager)和调度器(Scheduler)组成。
Worker节点是工作节点,也叫Node节点,实际运行着业务应用的容器,Worker节点包含代理组件(kubelet)、网络代理(kube-proxy)和容器运行环境(Container Runtime)。
Master节点组件
交互器(API Server)
API Server是集群统一入口,提供了对K8s集群中各种资源对象(如Pods、Services、Deployments等)的CRUD操作和Watch机制,这些资源对象的状态会被保存到Etcd中,还提供了认证、授权、访问控制、API发现与版本控制等能力。集群中的其他组件(如Scheduler、Controller Manager、Kubelet等)之间不会相互调用,是通过和API Server进行交互。
简单来说,API Server管理着集群中的资源对象,提供了丰富的RESTful API接口供客户端使用,并与其他组件协同工作以确保集群的稳定运行。
存储器(Etcd)
Etcd是K8s集群中的分布式键值存储系统,用于保存集群中的所有状态信息,比如Pod、Service等资源对象信息。
控制器(Controller Manager)
Controller Manager负责监控和维护集群中所有资源对象的状态,确保资源对象的实际状态和期望状态一致。Controller Manager中包含多个控制器,如Namespace Controller、Node Controller、Service Controller等,每个控制器负责监控和维护一种资源对象的状态。
调度器(Scheduler)
Scheduler负责对集群内的资源进行调度,会根据Pod的资源请求(如CPU、内存)以及集群中节点的资源状况,将新创建的Pod分配到合适的节点上。
Worker节点组件
代理组件(kubelet)
kubelet是运行在每个Worker节点上的代理程序,它负责与Master节点上的API Server进行通信,根据Master节点下发的指令,调度和管理本地节点上的容器。kubelet可以监控本地节点上的容器状态,如启动、停止、健康状况等,并定期向 Master 节点报告节点状态信息。
网络代理(kube-proxy)
kube-proxy是Worker节点上Pod的网络代理组件,主要负责集群内Service的负载均衡和访问控制等功能。每个Node节点上都会部署一个 kube-proxy 组件来负责处理该节点上所有 Service 的流量转发和路由等操作。
容器运行环境(Container Runtime)
容器运行环境负责镜像管理以及Pod和容器的真正运行。K8s本身并不提供容器运行环境,但提供了接口,可以插入所选择的容器运行时环境,支持Docker和rkt等。