介绍
使用 Kubernetes 时,内存不足(OOM)错误和 CPU 限制(Throttling)是云应用程序中资源处理的主要难题。为什么呢?
云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与您的云成本直接相关。
通过 limits 和 requests,您可以配置 pod 应如何分配内存和 CPU 资源,以防止资源匮乏并调整云成本。
- 如果节点没有足够的资源,Pod 可能会因抢占或节点压力而被驱逐。
- 当进程运行内存不足 (OOM) 时,它会因为没有所需的资源而被 Kill。
- 如果 CPU 消耗高于实际
limits,进程将开始受到限制。
OK,如何监控 Pod 快要 OOM 了,或者 CPU 快要被限制了呢?
Kubernetes OOM
Pod 中的每个容器都需要内存才能运行。
Kubernetes limits 是在 Pod 定义或 Deployment 定义中为每个容器设置的。
所有现代 Unix 系统都有一种方法可以杀死进程,以此回收内存(没用空闲内存的时候,只能杀进程了)。这个错误将被标记为 137 错误码或 OOMKilled。
State: Running
Started: Thu, 10 Oct 2019 11:14:13 +0200
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Thu, 10 Oct 2019 11:04:03 +0200
Finished: Thu, 10 Oct 2019 11:14:11 +0200
退出代码 137 意味着该进程使用的内存超过允许的数量,必须

文章讨论了在Kubernetes环境中,内存不足(OOM)和CPU限制(Throttling)的问题,以及如何通过limits和requests进行资源配置以防止这些问题。监控Pod的OOM情况可以通过检测ExitCode137或使用node-exporter的node_vmstat_oom_kill指标。CPU限流是当进程接近资源限制时,进程速度减慢的现象。建议主动监控CPU使用率,避免不切实际的limits导致性能影响。同时,文章提醒要注意设置适当的requests和limits,以及为关键Pod分配PriorityClasses以防止被抢占。
最低0.47元/天 解锁文章
1509





