Kubernetes关于cpu资源分配的设计

本文介绍了Kubernetes中CPU资源的分配方式,包括资源需求(Requests)和资源限额(Limits)。详细解析了cgroup的--cpu-period、--cpu-quota、--cpu-shares等参数,以及如何通过--cpuset-cpus和--cpuset-mems控制多核CPU的使用。内容还涵盖了多核CPU和超线程的概念,并解释了K8s中1个逻辑CPU可被划分为1000个millicore的机制。最后,讨论了CPU资源的单位换算规则。
摘要由CSDN通过智能技术生成

kubernetes资源

在K8s中定义Pod中运行容器有两个维度的限制:

  1. 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如 Pod运行至少需要2G内存,1核CPU。(软限制)
  2. 资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。(硬限制)

    在这里插入图片描述

# kubectl  describe  node   node1.zcf.com
    .......................
   Allocated resources:
      (Total limits may be over 100 percent, i.e., overcommitted.)
      Resource           Requests    Limits             #这里显示的就是 资源的需求 和 限额
      --------           --------    ------
      cpu                250m (12%)  0 (0%)
      memory             0 (0%)      0 (0%)
      ephemeral-storage  0 (0%)      0 (0%)
          
    Requests:  就是需求限制,也叫软限制
    Limits:最大限制,也叫硬限制
    通常来说:Limits >= Requests
    并且requests 和 limits 通常要一起配置,若只配置了requests,而不配置limits,则很可能导致Pod会吃掉所有资源。

cgoup资源限制(cgroup

  1. --cpu-period: 是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。--cpu-period、--cpu-quota 两个参数是控制容器可以分配到的 CPU 时钟周期。
  2. --cpu-quota: 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。与--cpu-shares不同的是,这种配置是指定一个绝对值,容器对 CPU 资源的使用绝对不会超过配置的值。cpu-quota 的值默认为 -1, 表示不做控制。cpu-period 和 cpu-quota 参数一般联合使用。
  3. --cpu-shares:通过 cpu share 可以设置容器使用 CPU 的优先级。但具体cpu资源分配结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。

    例如:两个容 器 A、B 的 CPU 份额分别为 1000 和 500,在CPU进行时间片分配的时候,容器A比容器B多一倍的机会获得 CPU 的时间片。但分配的结果取决于当时主机和其他容器的运行状态, 实际上也无法保证容器 A一定能获得CPU时间片。比如容器A的进程一直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的。极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的CPU资源。Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的CPU份额来确定有多少CPU资源分配给它。

  4. --cpuset-cpus:对多核 CPU 的服务器,Docker 还可以控制容器运行使用哪些 CPU 内核,即使用参数。这对具有多 CPU 的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。即:CPU内核绑定。

    cpuset-cpus、cpuset-mems 参数只在多核、多内存节点上的服务器上有效,并且必须与实际的物理配置匹配,否则也无法达到资源控制的目的。

  5. --cpuset-mems:在多内存节点的服务器上可以通过--cpuset-mems设置容器使用哪些内存节点。
  6. --memory:与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap。cgroup通过--memory设置物理内存的使用限额,例如 100M、1024M。

  7. --memory-swap:通过--memory-swap可以设置内存+swap 的使用限额。

CPU

多核

cpu核心数指的是CPU内核数量,表示一个CPU由多少个核心组成。cpu核心是CPU的重要组成部件,在内核频率、缓存大小等条件相同的情况下,CPU核心数量越多,CPU的整体性能越强。

核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。

CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数

1.png

多个物理CPU,CPU通过总线进行通信,效率比较低。多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信。目前大部分cpu是L3 cache共享,L2 cache core独享如下:

2.png

超线程

多核超线程,每个核有两个逻辑的处理单元,两个核共同分享一个核的资源,如下:

3.png

以linuxi服务器为例输出的各项参数,其中CPU是四核的:

#查看CPU信息(型号)

[root@AAA ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

     4  Intel(R) Xeon(R) CPU E5-2403 v2 @ 1.80GHz



# 查看物理CPU个数

[root@AAA ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

1



# 查看每个物理CPU中core的个数(即核数)

[root@AAA ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq

cpu cores    : 4



# 查看逻辑CPU的个数

[root@AAA ~]# cat /proc/cpuinfo| grep "processor"| wc -l

4



#查看CPU的各项指标

[root@AAA ~]# lscpu

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                4

On-line CPU(s) list:   0-3

Thread(s) per core:    1

Core(s) per socket:    4

Socket(s):             1

NUMA node(s):          1

Vendor ID:             GenuineIntel

CPU family:            6

Model:                 62

Stepping:              4

CPU MHz:               1800.057

BogoMIPS:              3600.11

Virtualization:        VT-x

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              10240K

NUMA node0 CPU(s):     0-3

K8s中CPU资源的分配

k8s资源分配

根据上述,我们知道2核2线程的CPU,可被系统识别为4个逻辑CPU,在K8s中对CPU的分配限制是通过cgroup对逻辑CPU做分片限制的。也就是说分配给容器一个CPU,实际是分配一个逻辑CPU。而且1个逻辑CPU还可被单独划分子单位,即 1个逻辑CPU,还可被划分为1000个millicore(毫核), 简单说就是1个逻辑CPU,继续逻辑分割为1000个豪核心。

豪核:可简单理解为将CPU的时间片做逻辑分割,每一段时间片就是一个豪核心。所以:500m 就是500豪核心,即0.5个逻辑CPU。

单位换算

K,M,G,T,P,E #通常这些单位是以1000为换算标准的。

Ki, Mi, Gi, Ti, Pi, Ei #这些通常是以1024为换算标准的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值