【问题标题】:Kubernetes MySQL pod getting killed due to memory issue由于内存问题,Kubernetes MySQL pod 被杀死
【发布时间】:2018-09-14 13:18:12
【问题描述】:

在我的 Kubernetes 1.11 集群中,一个 MySQL pod 因Out of memory 问题而被杀死:

> kernel: Out of memory: Kill process 8514 (mysqld) score 1011 or
> sacrifice child kernel: Killed process 8514 (mysqld)
> total-vm:2019624kB, anon-rss:392216kB, file-rss:0kB, shmem-rss:0kB
> kernel: java invoked oom-killer: gfp_mask=0x201da, order=0,
> oom_score_adj=828 kernel: java
> cpuset=dab20a22eebc2a23577c05d07fcb90116a4afa789050eb91f0b8c2747267d18e
> mems_allowed=0 kernel: CPU: 1 PID: 28667 Comm: java Kdump: loaded Not
> tainted 3.10.0-862.3.3.el7.x86_64 #1 kernel

我的问题:

  1. 如何防止我的 pod 被 OOM 杀死?我需要启用部署设置吗?
  2. 当一个节点上没有足够的可用内存时,防止新 pod 被调度到该节点上的配置是什么?
  3. 我们禁用了交换空间。我们是否需要在主机级别禁用内存过度使用设置,将/proc/sys/vm/overcommit_memory 设置为0

谢谢 SR

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    在定义 Pod 清单时,最佳做法是使用 limitsrequests 为 CPU 和内存定义 resources 部分:

    resources:
        limits:
          cpu: "1"
          memory: 512Mi
        requests:
          cpu: 500m
          memory: 256Mi
    

    此定义有助于调度程序识别三个服务质量 (QoS) 类别:

    • 保证

    • 突发性

    • 尽力而为

    最后一类中的 pod 是最易消耗的。

    【讨论】:

    • Nicola 的回答很到位!如果您想了解有关该主题的更多信息,您可能会对我去年写的一篇文章感兴趣:hackernoon.com/…
    • 谢谢,我会为我的数据库 pod 使用 Guaranteed 配置
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2019-07-24
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多