k8s限制cpu和内存的策略
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
namespace: defalut
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是名字
metadata的namespace表示使用的namespace
default是默认的limit
defaultRequest是默认的request
min是限制每个pod最小可以配置的值
max是限制每个pod最大可以配置的值
- 运行limitrange:
sudo kubectl delete -f limitrange.yaml
- 重启pod就可以看到这个pod都被依赖了:
这样是能达到控制每个pod的cpu和内存,但是控制极其麻烦,需要具体去分配,同时不同pod直接还无法竞争了,导致资源使用量上升。
其实我只是想要这样一个方案:宿主机内总使用cpu不能超过90%,内存不能超过90%,因为超过会程序会乱,不知道大家有没有方案?
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)