重学k8s: 02.Kubernetes集群的组成及核心组件
2021-08-03
上节学习了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自己就是一个大型的分布式系统。在这张图里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等。