k8s node节点可分配资源限制


Kubernetes 的节点可以按照 Capacity 调度。默认情况下 pod 能够使用节点全部可用容量。 这是个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。 除非为这些系统守护进程留出资源,否则它们将与 Pod 争夺资源并导致节点资源短缺问题。

kubelet 公开了一个名为 ‘Node Allocatable’ 的特性,有助于为系统守护进程预留计算资源。 Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 ‘Node Allocatable’。

  • 查看节点的Capacity和Allocatable
[root@m1 ~]# kubectl describe node <node_name> |grep -A 13 Capacity
#里面有一段类似如下的内容
Capacity:
 cpu:                8
 ephemeral-storage:  101917688Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             32939412Ki
 pods:               110
Allocatable:
 cpu:                8
 ephemeral-storage:  93927341106
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             32837012Ki
 pods:               110

一、CGROUP

1、概念了解

1、CGROUP(控制组,Control Groups)

CGROUP 是 Linux 内核提供的一个功能,用于对进程进行分组,并允许用户对这些进程进行资源管理(如 CPU、内存、磁盘 I/O 等)。它为进程的资源分配和限制提供了强大的支持,使得系统可以对不同的进程或进程组进行精细的管理和限制。

  • 主要功能:
    资源限制:限制进程使用的 CPU、内存、I/O 等资源。
    资源隔离:使得不同进程组间的资源使用互不干扰。
    优先级管理:控制进程的优先级,例如在多个进程竞争 CPU 资源时分配优先级。

2、cgroupfs

cgroupfs 是一个用户空间的文件系统,用于管理和配置控制组(CGROUP)。它允许用户通过文件系统接口(即文件路径)来管理和监控控制组的资源限制。

  • 主要特点:
    挂载点:通常,cgroupfs 被挂载在 /sys/fs/cgroup/ 目录下。每个控制组资源子系统(如 CPU、内存、I/O)都会有一个子目录,用户可以通过操作这些文件来调整资源限制。
    文件接口:用户可以通过写入文件来修改资源限制,例如,向 /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us 写入一个新值来限制某个进程组的 CPU 使用时间。

  • 工作方式:
    cgroupfs 提供了一个文件系统接口,用户可以通过命令行工具(如 cgcreate、cgexec)或直接修改文件来管理控制组的资源分配。
    注意:cgroupfs 是一种较为底层的控制组实现,较少直接依赖于系统服务。

3、systemd

systemd 是现代 Linux 系统中的一种系统和服务管理器,它不仅负责启动和管理系统服务,还引入了对控制组(CGROUP)的支持,用于更高层次的资源管理。

  • systemd 与 cgroup 的结合:
    systemd 在管理系统服务时,自动利用了控制组(CGROUP)来为每个服务分配和限制资源。通过 systemd,可以将每个服务进程放置到不同的控制组中,进而控制其资源使用。
    systemd 使用控制组来隔离和限制进程的资源使用,例如限制某个服务进程使用的 CPU 或内存量。
    systemd 可以管理不同的 cgroup 子系统(如 CPU、内存、I/O 等),通过 systemd 配置文件为每个服务分配相应的资源限制。
    例子:
    在 systemd 中,服务单元文件(如 /etc/systemd/system/myservice.service)中可以包含资源限制的配置项,如 CPUQuota(限制 CPU 使用比例)或 MemoryLimit(限制内存使用)。

4、关系总结

CGROUP(控制组) 是内核提供的机制,用于对进程进行资源管理。
cgroupfs 是控制组的一个实现方式,提供了一个文件系统接口,允许用户空间的工具直接操作控制组。
systemd 是一个服务管理器,它不仅负责启动和管理系统服务,还利用控制组来管理和限制服务的资源使用。

二、查看和修改docker和kubelet为cgroup驱动

1、为docker配置cgroup驱动

先确认docker的cgroup driver:

[root@dev14 ~]# docker info | grep "Cgroup Driver"
Cgroup Driver: cg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值