Kubernetes学习之资源限额

一、资源需求与限制
  在Kubernetes上,可由容器或Pod请求或消费的"计算资源"是指CPU和内存(RAM),这也是目前仅有的受支持的两种类型。相比较来说,CPU属于可压缩(compressible)型资源,即资源的使用额度可按需收缩,而内存(当前)则是不可压缩性资源,对其执行收缩操作可能会导致某种程度的问题。
  目前来说,资源隔离尚且属于容器级别的,CPU和内存资源的配置需要在Pod中的容器上进行,每种资源均可由"requests"属性定义其请求的确保可用值,即容器运行可能用不到这些额度的资源,但是用到时必须要确保有如此多的资源可用,而"limits"属性则用于限制资源可用的最大值,即硬限制。不过,为了表述方便,人们通常仍然把资源配置称作Pod资源的请求和限制,只不过它是指Pod内所有容器上某种类型资源的请求和限制的总和。
在这里插入图片描述
  在Kubernetes系统上,1个单位的CPU相当于虚拟机上的1颗虚拟CPU(vCPU)或物理机上的一个超线程(Hyperthread,或称为一个逻辑CPU),它支持分数计量方式,一个核心(1 core)相当于1000个微核心(millicores),因此500m相当于0.5个核心,即二分之一个核心。内存的计量方式与日常使用方式相同,默认的单位是字节,也可以使用E、P、T、G、M和K作为单位后缀,或Ei、Pi、Ti、Gi、Mi和Ki形式的单位后缀。
  对于压缩性的资源来说,未定义其请求量以确保其最小可用资源时,它可能会被其他的Pod资源压缩至极低的水平,甚至会达到Pod不能够被调度运行的境地。而对于非压缩型资源来说,内存资源在任何原因导致的紧缺情形下都有可能导致相关进程被杀死。因此,在Kubernetes系统上运行关键性业务相关的Pod时必须使用requests属性为容器定义资源确保可用量。
  集群中的每个节点都拥有定量的CPU和内存资源,调度Pod时,仅那些被请求资源的余量可容纳当前被调度的Pod的请求量的节点才可作为目标节点。也就是说,Kubernetes的调度器会根据容器的requests属性中定义的资源需求量来判定仅哪些节点可接收运行相关的Pod资源,而对于一个节点的资源来说,每运行一个Pod对象,其requests中定义的请求量都要被预留,直到被所有Pod对象瓜分完毕为止。
  容器的资源需求仅能达到为其保证可用的最少资源量的目的,它并不会限制容器的可用资源上限,因此对应用程序自身存在Bug等多种原因而导致的系统资源被长时间占用的情况则无计可施,这就需要通过limits属性为容器定义资源的最大可用量。资源分配时,可压缩型资源CPU的控制阈值可自由调节,容器进程无法获得超出其CPU配额的可用时间。不过,如果进程申请分配超出其limits属性定义的硬限制的内存资源时,它将被OOM killer杀死,不过随后可能会被其控制进程所重启,例如,容器进程的Pod对象会被杀死并重启(重启策略为Always或OnFailure时),或者是容器进程的子进程被父进程所重启。

二、资源限制实验

1)编写创建Pod与定义资源限制的yaml文件

]# cat resource_limits.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memleak
  labels:
    app: memleak
spec:
  containers:
  - name: simmemleak
    image: saadali/simmemleak
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "64Mi"
        cpu: "1"
      limits:
        memory: "64Mi"
        cpu: "1"

]# kubectl apply -f resource_limits.yaml 
pod/memleak created

2)查看Pod资源信息

]# kubectl get pod -o wide 
NAME      READY   STATUS             RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
memleak   0/1     CrashLoopBackOff   1          10s   10.244.0.97   master   <none>           <none>

]# kubectl describe pods memleak
Name:         memleak
Namespace:    default
Priority:     0
Node:         master/172.16.2.200
Start Time:   Fri, 18 Sep 2020 09:49:00 +0800
Labels:       app=memleak
Annotations:  Status:  Running
IP:           10.244.0.97
IPs:
  IP:  10.244.0.97
Containers:
  simmemleak:
    Container ID:   docker://4de663358d0ff68a11b81a31a6f39dd526135b8e5d825e4ca28f745e2b63ad24
    Image:          saadali/simmemleak
    Image ID:       docker-pullable://saadali/simmemleak@sha256:5cf58299a7698b0c9779acfed15c8e488314fcb80944550eab5992cdf3193054
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       OOMKilled
      Exit Code:    137
      Started:      Fri, 18 Sep 2020 09:49:50 +0800
      Finished:     Fri, 18 Sep 2020 09:49:50 +0800
    Ready:          False
    Restart Count:  3
    Limits:
      cpu:     1
      memory:  64Mi
    Requests:
      cpu:        1
      memory:     64Mi
    Environment:  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值