总是说Kubernetes能够提高资源利用率,在我实际使用过程中,实际的usage/request/limit三个值与node的总资源比例差距很多;大概是
使用率 | request | limit | |
---|---|---|---|
Node-1 | cpu: 20%, mem 30% | cpu: 83%, mem 90% | cpu: 210%, mem 260% |
Node-2 | cpu: 18%, mem 32% | cpu: 76%, mem 87% | cpu: 310%, mem 290% |
Node-3 | cpu: 34%, mem 26% | cpu: 85%, mem 80% | cpu: 400%, mem 320% |
即出现实际上资源占用并无多少,但是node资源已经被分配完毕导致node无法继续分配资源。
request设计的太小会太过频繁触发横向伸缩,导致客户端响应有时候会丢失,例如缩容时候有几个请求较慢的被强制中断。
request设计的太大会导致低峰期会导致资源浪费,并且扩容起来也容易导致NODE资源因为空间不足分配不了。
- request该如何设计找到 预设计的资源与我们实际中的使用率的平衡呢?
- 可以看到表格中limit的资源超卖现象非常严重,高峰期很容易导致服务群的雪崩,limit又该超卖多少合适呢?
用资源分析工具 Prometheus 和Grafan先分析一下具体的情况,然后在用用 Vertical Pod Autoscaler (VPA) 自动调整 Pods 的请求和限制。