zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

Kubelet 状态上报 节点资源管理 驱逐

节点状态 资源管理 上报 kubelet
2023-09-14 09:15:17 时间

节点资源管理


计算节点除CPU、内存和存储等硬件相关资源外,还有操作系统资源,例如进程上限、磁盘I/O 等。

Kubernetes 集群中,同一节点上会运行多个不同应用的容器进程。不可避免地,这些进程会共享节点资源,并可能发生资源竞争(request limit)。合理的节点资源管理能提高节点资源利用率,避免相邻进程彼此干扰,保证系统服务正常运行(驱逐条件)。Kubernetes 计算节点资源管理方案已渐趋成熟:具体体现在状态汇报、资源预留、防止节点资源耗尽的防御机制驱逐及容器和系统资源的配置。

状态上报


kubelet 是部署在每个Kubernetes 节点上、负责Pod 生命周期节点状态上报的组件

它周期性地向 API Server 进行汇报,并 更新节点的相关健康 资源使用信息 ,以供 Kubernetes 的控制平面模块对节点和节点上的 Pod 进行管理和决策。上报信息如下:
  • 节点基础信息,包括IP 地址、操作系统、内核、运行时、kubeletkube-proxy 版本信息。部分信息直接从节点获取,而部分信息需要调用云提供商的API 获取。
  • 节点资源信息包括CPU、内存、Hugepage、临时存储、GPU 等注册设备,以及这些资源中可以分配给容器使用的部分。
  • 调度器在为Pod 选择节点时会将机器的状态信息作为依据。表2-6 展示了节点状态及其代表的意义。比如Ready 状态反映了节点是否就绪,True 表示节点健康;False 表示节点不健康;Unknown 表示节点控制器在最近40s 内没有收到节点的消息。调度器在调度Pod 时会过滤掉所有Ready 状态为非True 的节点。
                                                       表 2-6 节点的状态及其意义

资源预留


计算节点除用户容器外,还存在很多支撑系统运行的基础服务,譬如 systemdjournald、sshddockerdContainerdkubelet 等。如果这些服务的运行受到影响,系统将变得不稳定,进而影响用户的容器进程。为了使服务进程能够正常运行,要确保它们在任何时候都可以获取足够的系统资源,所以我们要为这些系统进程预留资源。

kubelet 可以通过众多启动参数为系统预留 CPU 、 内存、 PID 等资源, 比如 SystemReserved、 KubeReserved 等。如下代码所示,在节点对象状态中可以看到当前节点的 CPU 、memory emphermal-storage 等资源信息,其中每一项资源分为系统的可分配资源( Allocatable)和节点的容量( Capacity )资源。

 
容量资源( Capacity )是指 kubelet 获取的计算节点当前的资源信息。 CPU 是从 /proc/cpuinfo 文件中获取的节点 CPU 核数; memory 是从 /proc/memoryinfo 中获取的节点内存大小;ephemeral-storage 是指节点根分区的大小。
资源可分配额( Allocatable )是用户 Pod 可用的资源,是资源容量减去分配给系统的资源的剩余部分,两者的关系如表2-7 所示。
                                            表 2-7 节点的资源容量和可分配资源

节点的预留资源由kubelet 设置到对应的容器或者系统进程的Cgroup 中,以确保系统服务的健康运行。