Kubernetes Pod Memory与CGroup

问题描述

我正在Kubernetes吊舱中运行apache,我被随机的OOM杀死apache进程困扰,我不确定原因。

该容器有600M的内存限制,即使PHP每次运行有128 MB的限制,它似乎也可以很容易地使用它。观察item.status时,我可以定期看到:

dmesg -w
  1. 如何确定此OOM杀机与机器或吊舱限制有关?
  2. 有几个Apache吊舱,我不确定如何识别此过程所属的吊舱。有办法吗?
  3. 如果在Pod中可以访问这些线程,那就太好了,因此可以看到实际上属于Pod的被杀死线程(理想情况下是错误输出)。有可能吗?

解决方法

以相同的顺序覆盖您的问题:

    运行Pod的名称空间中的
  1. kubectl get events。您将看到Kubernetes OOM事件。如果什么都没有,那就是内核本身。

  2. 有一个project called pid2pod,但它仅显示仍在运行的内容。另一个选择是将dmesg路由到stdout(在容器OS级别上)并实现centralized log collection with Kubernetes metadata enrichment。然后,每个日志事件将在元数据中具有pod id。

  3. 不确定您要在这里解决什么。通常,一个吊舱(我假设一个容器)就是一个过程。一旦被OOM杀死,没有其他东西可以在吊舱内对此采取任何措施。响应此事件并重新创建Pod是控制器(Deployment的责任。

    如果您只想在其余Pod中监视OOM,则可以实现kubewatch之类的smt。不幸的是,我没有一个项目可以让您直接在pod内进行订阅,但这可以作为示例。或者,如果是集中式日志记录,则可以订阅Pod中的日志流。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...