1-1:架构图
Kubernetes 主要由以下几个核心组件组成:
etcd 保存了整个集群的状态;
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
kubelet 负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
1-2:kube-apiserver(组件通信)
🌱(1)核心功能
kube-apiserver 是 Kubernetes 最重要的核心组件之一,主要提供以下的功能
提供集群管理的 REST API 接口,包括认证授权、数据校验以及集群状态变更等
提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据,只有 API Server 才直接操作 etcd)
从架构图里面不难看出来,所有的其他组件都得先经过API-Server才能通信,所以它是枢纽。也就是说,你干什么都得先经过它。
🌱 (2)组件通信
Kubernetes 多组件之间的通信原理为
API Server 负责 etcd 存储的所有操作,且只有 API Server 才直接操作 etcd 集群
API Server 对内(集群中的其他组件)和对外(用户)提供统一的 REST API,其他组件均通过 API Server 进行通信
Controller Manager、Scheduler、Kube-proxy 和 Kubelet 等均通过 API Server watch API 监测资源变化情况,并对资源作相应的操作,所有需要更新资源状态的操作均通过 API Server 的 REST API 进行。
1-2:Etcd
Etcd 是 Kubernetes 集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。
关于Etcd的具体原理,不去探究,新手知道一下就行。
1-3:Controller Manager(监控集群状态)
Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成,是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。
kube-controller-manager 由一系列的控制器组成
Replication Controller
Node Controller
CronJob Controller
Daemon Controller
Deployment Controller
Endpoint Controller
Garbage Collector
Namespace Controller
Job Controller
Pod AutoScaler
RelicaSet
Service Controller
ServiceAccount Controller
StatefulSet Controller
Volume Controller
Resource quota Controller
总的来说,就是Controller Manager里面有很多controller,每一个controller通过api server去对相应的目标去监控状态,并且执行相应的操作。
1-4:Scheduler(分配Pod进对应Node里面)
ube-scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点(更新 Pod 的 NodeName 字段)。
1-5:Kubelet
每个Node节点上都运行一个 Kubelet 服务进程,负责本 Node 节点上的 Pod 的创建、修改、监控、删除等全生命周期管理,默认监听 10250 端口,接收并执行 Master 发来的指令,管理 Pod 及 Pod 中的容器。每个 Kubelet 进程会在 API Server 上注册所在Node节点的信息,定期向 Master 节点汇报该节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源。