容器和系统资源配置

CPU资源

CPU资源申请包含:cpu.request、cpu.limit
1CPU Core = 1000Millicore

调度Pod到Node上如何计算CPU:
如果:CPU Request(当前Pod)+ Pod CPU Request总和(当前Node)<= CPU可分配资源(当前Node),则Pod可以被调度到改Node上,否则该Node被过滤

kubectl describe node可显示当前节点的CPU和内存使用率
kubelet读取Pod的cpu.request和cpu.limit,为pod的CPU CGroup进行资源配置

CPU的CGroup的相关参数设置
可以通过:/sys/fs/cgroup/cpu/cpu.shares和/sys/fs/cgroup/cpu/cpu.cfs_quota_us来获取当前容器的CGroup的CPU信息

在这里插入图片描述

当节点资源紧张时:
在这里插入图片描述

Pod中有多个init容器:

  • kube-scheduler调度时,只计算cpu.request最多的init容器,不是计算init容器总和
  • 顺序执行完init容器后,业务容器进入Running状态;在计算该节点被占用的资源时,init容器的资源依然会被纳入计算,因为init容器在有些场景下可能会被再次执行
  • Pod中定义了nodeName直接指定了目标节点,就无需通过kube-scheduler调度了;kubelet在启动该Pod之前会计算该节点的空闲CPU,如果资源不被满足,则将Pod标记为OutOfCPU

CGroup层级树结构组织(CGroup驱动基于systemd):
在这里插入图片描述

在这里插入图片描述

内存资源

Pod spec通过定义requests.memory和limits.memory的值来为Pod申请内存,调度时会判断该节点的内存容量是否满足当前Pod的request.memory

调度完成后,kubelet会将容器申请的内存资源设置到该容器对应的memory CGroup中

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐