上节学习了k8s是什么以及k8s的核心特性。 k8s是一个用于自动部署,扩展和管理容器化应用程序的开源系统,它的核心功能包括: 自动化上线和回滚、服务发现与负载均衡、存储编排、Secret和配置管理、自动装箱、批量执行、IPv4/IPv6 双协议栈、水平扩缩容、自我修复、为扩展性设计。本节将介绍Kubernetes集群的组成及核心组件。

Kubernetes集群的组成

在介绍如何部署k8s集群之前,先来看一下k8s集群的组成。 一个k8s集群由一组服务器组成,这组服务器可以是公有云、私有云或本地服务器集群。 k8s集群中的一台服务器在k8s中被称作Node

一个k8s集群里的Node分为control-plane和普通node两种角色。

  • control-plane节点过去叫master节点。由于"某些原因",现在开源社区很多项目都开始避免使用master这个词。 control-plane节点负责集群的控制和调度
  • node节点负责运行工作负载

了解了K8S Node的角色,下面就需要了解需要在这些Node上部署哪些软件组件。下图是一个k8s集群的组成示意图:

k8s-nodes.png

k8s自己就是一个大型的分布式系统。在这张图里control-plane节点里红色方框和普通node节点里的绿色方框都是单独运行的进程。 每个进程都是用Go语言写的一个程序,实际部署k8s集群就是部署这些程序。还注意到每个node节点上的Pod和每个Pod里的容器就是我们运行的应用, k8s将多个容器组成一个逻辑单元Pod以便于管理和服务发现。容器化应用逻辑上是以Pod的形式跑在k8s上的,并不存在某台具体的服务器运行容器应用,而全部由k8s进行资源分配和调度。

下面分别介绍k8s集群中control-plane节点和node节点的核心组件。

control-plane节点上的核心组件

Kubernetes集群中的control-plane节点是集群的控制节点,负责整个集群的管理和控制。 针对集群执行的控制命令都是发送给control-plane节点的。 control-plane节点如此重要,所以一般将control-plane节点部署为默认不执行工作负载的。

control-plane节点上运行的主要组件如下:

  • kube-apiserver: kube-apiserver提供k8s的API服务,是集群控制管理、资源配置、安全机制的入口
  • kube-controller-manager: 是Kubernetes集群中所有资源对象的自动化控制中心,是集群的状态管理器,保证Pod及其他资源对象达到期望的状态
  • kube-scheduler: 是Kubernetes集群的调度中心,负责Pod的调度,根据一系列条件将Pod调度到符合条件的Node上

另外还注意到kube-apiserver使用etcd集群保存了整个集群的状态。etcd是k8s默认的存储数据库,存储了集群的数据。

node节点上的核心组件

Node节点是Kubernetes集群中的工作负载节点,Node上的工作负载由control-plane节点分配, 当某个Node宕机时,control-plane会将上面的工作负载转移到其他节点上去。

Node节点上运行的主要组件如下:

  • kubelet: 负责Pod的创建、启动、监控、重启、销毁等工作,同时与control-plane节点协作,实现集群管理的基本功能。kubelet把自己注册到control-plane节点,当Node节点纳入集群管理的范围后,kubelet进程就定时向control-plane节点上报自身的资源情况。control-plane节点掌握着每个Node节点的资源情况,就可以实施高效的资源调度策略。当某个Node超过指定时间未上报信息,control-plane会将该Node标记为NotReady,同时会进行工作负载转移。
  • kube-proxy: 实现Kubernetes Service的通信以及负载均衡。

另外还注意到需要在Node节点上部署实现了CRI(容器运行时接口)的容器运行时,例如Containerd, CRI-O等。

参考