【发布时间】:2021-05-14 20:17:32
【问题描述】:
我有一个简单的容器,它由安装在 Alpine 上的 OpenLDAP 组成。它安装为以非 root 用户身份运行。我可以使用本地 Docker 引擎毫无问题地运行容器。然而,当我将它部署到我们的 Kubernetes 系统时,它几乎立即被杀死,因为 OOMKilled。我试过增加内存而不做任何改变。我还查看了 pod 的内存使用情况,没有发现任何异常情况。
服务器以slapd -d debug -h ldap://0.0.0.0:1389/ -u 1000 -g 1000 启动,其中1000 分别是uid 和gid。
节点跟踪显示以下输出:
May 13 15:33:44 pu1axb-arcctl00 kernel: Task in /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f/7d71b550e2d37e5d8d78c73ba8c7ab5f7895d9c2473adf4443675b9872fb84a4 killed as a result of limit of /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f
May 13 15:33:44 pu1axb-arcctl00 kernel: memory: usage 512000kB, limit 512000kB, failcnt 71
May 13 15:33:44 pu1axb-arcctl00 kernel: memory+swap: usage 0kB, limit 9007199254740988kB, failcnt 0
May 13 15:33:44 pu1axb-arcctl00 kernel: kmem: usage 7892kB, limit 9007199254740988kB, failcnt 0
May 13 15:33:44 pu1axb-arcctl00 kernel: Memory cgroup stats for /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f: cache:0KB rss:0KB rss_huge:0KB shmem:0KB mapped_file:0KB dirty:0KB writeback:0KB inactive_anon:0KB active_anon:0KB inactive_file:0KB active_file:0KB unevictable:
May 13 15:33:44 pu1axb-arcctl00 kernel: Memory cgroup stats for /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f/db65b4f82efd556a780db6eb2c3ddf4b594774e4e5f523a8ddb178fd3256bdda: cache:0KB rss:44KB rss_huge:0KB shmem:0KB mapped_file:0KB dirty:0KB writeback:0KB inactive_anon:
May 13 15:33:44 pu1axb-arcctl00 kernel: Memory cgroup stats for /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f/59f908d8492f3783da587beda7205c3db5ee78f0744d8cb49b0491bcbb95c4c7: cache:0KB rss:0KB rss_huge:0KB shmem:0KB mapped_file:0KB dirty:0KB writeback:0KB inactive_anon:0
May 13 15:33:44 pu1axb-arcctl00 kernel: Memory cgroup stats for /kubepods/burstable/podbac2e0ae-9e9c-420e-be4e-c5941a2d562f/7d71b550e2d37e5d8d78c73ba8c7ab5f7895d9c2473adf4443675b9872fb84a4: cache:4KB rss:504060KB rss_huge:0KB shmem:0KB mapped_file:0KB dirty:0KB writeback:0KB inactive_a
May 13 15:33:44 pu1axb-arcctl00 kernel: [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
May 13 15:33:44 pu1axb-arcctl00 kernel: [69022] 0 69022 242 1 28672 0 -998 pause
May 13 15:33:44 pu1axb-arcctl00 kernel: [69436] 1000 69436 591 454 45056 0 969 docker-entrypoi
May 13 15:33:44 pu1axb-arcctl00 kernel: [69970] 1000 69970 401 2 45056 0 969 nc
May 13 15:33:44 pu1axb-arcctl00 kernel: [75537] 1000 75537 399 242 36864 0 969 sh
May 13 15:33:44 pu1axb-arcctl00 kernel: [75544] 1000 75544 648 577 45056 0 969 bash
May 13 15:33:44 pu1axb-arcctl00 kernel: [75966] 1000 75966 196457 126841 1069056 0 969 slapd
May 13 15:33:44 pu1axb-arcctl00 kernel: Memory cgroup out of memory: Kill process 75966 (slapd) score 1961 or sacrifice child
May 13 15:33:44 pu1axb-arcctl00 kernel: Killed process 75966 (slapd) total-vm:785828kB, anon-rss:503016kB, file-rss:4348kB, shmem-rss:0kB
我很难相信它真的内存不足。这是一个简单的 LDAP 容器,目录树中只有 8-10 个元素,并且 pod 没有在仪表板 (Lens) 上显示内存问题。我们还有其他没有此问题的 Alpine 图像。
我对 Kubernetes 比较陌生,所以我希望 SO 上的用户能给我一些关于如何调试它的指导。一旦我知道什么是有用的,我可以提供更多信息。正如我提到的,增加内存没有影响。我计划从“突发”部署切换到“保证”部署,看看这是否会有所不同。
===== 更新 - 正在工作 =====
我相信我混淆了资源“限制”与“请求”的含义。在发布原始帖子之前,我一直在尝试对这些进行多种变体。阅读完回复后,我现在使用以下设置部署了 pod:
resources:
limits:
cpu: 50m
memory: 1Gi
requests:
cpu: 50m
memory: 250Mi
查看 Lens 中的内存占用情况,它的使用率稳定在 715Mi 左右。这比我们的其他 pod 至少高出 25%。也许 LDAP 服务器只是需要更多。无论如何,我感谢大家的及时帮助。
【问题讨论】:
-
感谢您提供有关此主题的出色参考资料。我现在有这个工作,看起来(他羞怯地说)只不过是需要更大内存占用的 pod。我将使用当前设置更新原始帖子。
标签: kubernetes cgroups