1.概要

最近发现一个服务cpu占用了100%,导致整个服务器崩溃的悲剧,我就想k8s如何能够限制cpu/内存等的时候了。

研究了一下发现还真的可以,这篇做个记录

2.POD级别

2.1. 配置deployment.yaml

现在pod使用以下配置:

设置每个pod至少需要使用cpu 100m=0.1个核,memory=64M;使用上限为cpu 200m=0.2个核,memory=128M;

resources:
          requests:
            memory: "64Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"             # Mi/Gi
            cpu: "200m"                 # 500毫核== 0.5个cpu

2.2. 效果

如果pod使用超过0.5个核的cpu,将会重启。

2.3. 测试

  • 搭建测试程序

写一个死循环的程序,调用接口的时候把cpu占满

  • 测试一下:

访问:http://10.0.22.120:1080/sport/v1/cpu100

  • 进入pod查看内存使用:

可以看到该进程始终只能达到20%,无法超过

  • 在宿主机内存使用:

可以看到该进程始终只能达到20%,无法超过

  • 查看pod的运行情况:

可以看到持续20%以后,pod会重启。

  • 查看node节点的运行情况:

 

3.Node级别

为了避免每个pod去配置一遍,k8s还提供了一个node的配置,这样每个产生的pod就可以直接继承

  • limitrange.yaml文件:
apiVersion: v1
kind: LimitRange
metadata:
  name: default
spec:
  limits:
  - default:
      cpu: 1
      memory: 1000Mi
    defaultRequest:
      cpu: 0.1
      memory: 40Mi
    max:
      cpu: 1
      memory: 1000Mi
    min:
      cpu: 0.05
      memory: 40Mi
    type: Container

  metadata的name:default表示的是default这个namespace

  default是默认的limit

  defaultRequest是默认的request

  min是限制每个pod最小可以配置的值

  max是限制每个pod最大可以配置的值

  • 运行limitrange:

  sudo kubectl delete -f limitrange.yaml

  • 重启pod就可以看到这个pod都被依赖了:

这样是能达到控制每个pod的cpu和内存,但是控制极其麻烦,需要具体去分配,同时不同pod直接还无法竞争了,导致资源使用量上升。

其实我只是想要这样一个方案:宿主机内总使用cpu不能超过90%,内存不能超过90%,因为超过会程序会乱,不知道大家有没有方案?

原文地址:http://www.cnblogs.com/zhanchenjin/p/16800141.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性