预防节点OOM

该文档为预防节点 OOM 的开源方案,不提供 SLA,仅做参考,请谨慎使用

原理

在用户态实时获取 available 内存,当小于阈值时开始依据策略发送 sigterm 与 kill 信号杀死进程

使用方法

  1. -M 参数实现 oom-protector 内存杀进程阈值, 第一个参数为 sigterm 信号阈值,第二个参数为 kill 信号阈值,以’,‘分割,单位只支持 KB;
  2. –avoid 参数可以避免杀死符合条件的进程;
  3. –prefer 参数可以优先杀死符合条件的进程;

进程删除主要依据

根据 oom_score 分值来杀进程,如系统上有自行启动的进程且 oom_score_adj 未设置为-1000,就有被杀死的可能。

备注: 该程序无法阻止瞬时内存暴增引发的内存宕机,依旧需要设置 pod 合理的资源 requests 与 limits。

部署示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: oom-protector
  name: oom-protector
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: oom-protector
  template:
    metadata:
      labels:
        app: oom-protector
    spec:
      hostPID: true
      containers:
      - image: uhub.service.ucloud.cn/uk8s/earlyoom:alpine
        name: earlyoom
        args:
        - -p
        - -M
        - "307200,204800"
        - --avoid
        - "docker|kubelet|containerd|sshd"
        securityContext:
          capabilities:
            add:
            - KILL
        resources:
          requests:
            memory: "32Mi"
            cpu: "50m"
          limits:
            memory: "64Mi"
            cpu: "100m"
Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up