容器编排引擎Kubernetes 03——K8s的基础组件

191 阅读3分钟

1 控制平面组件(Control Plane Components)

image.png

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组件

image.png

节点组件在每个节点上运行,维护运行的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可以通过名字访问到集群内服务。