1 控制平面组件(Control Plane Components)
K8s 被安装在一个叫做控制平面的机器上,控制平面的组件对集群做出全局决策。
1.1 Api Server
主节点上负责提供 K8s API 服务的组件,它是 K8s 控制面的前端。
- Api Server是K8s最重要的核心组件之一,提供集群管理的REST API接口,包括认证授权,数据校验以及集群状态变更等;
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有 API Server 才直接操作etcd)
- 生产环境可以为 Api Server做LA
Load Average或LBLoad Balance,在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。
1.2 Controller Manager
在主节点上运行控制器的组件。
- Controller Manager 是K8s的大脑,它通过 Api Server 监控整个集群的状态,确保集群处于预期的工作状态;
- Controller Manager 由一系列的控制器组成,例如,Replication Controller控制副本,Node Controller 控制节点,Deployment Controller 管理部署等。
1.3 Scheduler
主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
Scheduler 负责分配调度 Pod 到集群内的节点上,它监听 Api Server,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点。
1.4 etcd
- K8s 需要存储很多东西,例如自身的节点信息,组件信息,还有通过 K8s 运行的 pod,deployment,service 等等,都需要做持久化,etcd 就是它的数据中心。 生产环境中为了保证数据中心的高可用和数据的一致性,一般会部署最少三个节点;
- etcd 也可以部署在 K8s 每一个节点,组成 etcd 集群;
- 如果已经有外部 etcd 服务,K8s 可以直接使用外部 etcd 服务。
2 Node组件
节点组件在每个节点上运行,维护运行的Pod并提供K8s运行环境。
2.1 kubelet
一旦Pod被调度到对应的宿主机之后,后续要做的事情就是创建这个Pod,并管理这个Pod的生命周期,这里面包括:Pod的增删改查等操作,在K8S里面这部分功能是通过kubelet 这个核心组件来完成的。kubelet的功能分为两类:
- kubelet操作当前宿主机的资源信息,并启动Pod
- 与k8s进行交互,获取pod相关的数据,监控当前的Pod变化的事件
2.2 kube-proxy
在k8s集群的每个节点上都运行着kube-proxy进程,负责实现k8s中service组件的虚拟IP服务。kube-proxy是让集群服务在外部可以被访问到的重要方式。目前kube-proxy有三种工作模式:
- User space模式
- Iptables模式(默认)
- IPVS模式
2.3 容器运行环境
k8s支持多个容器运行环境,如 Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)的容器。
2.4 插件
插件使用 k8s资源 (DaemonSet、Deployment等) 实现集群功能。
2.5 kube-dns
kube-dns为k8s集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod可以通过名字访问到集群内服务。