当 Pod 内存使用率很高的情况下,如果内存使用率降不下去需要进行资源扩容。但是扩容过程会导致 Pod 的滚动,就不能直接修改资源使用量,需要从资源隔离的内部解决。

1、修改 Mem Limit 数据

1.1 查看容器 ID

docker ps | grep ${POD名称} | awk '{print $1}'

# [root@node-34251077-18 /]# docker ps | grep api-deployment-7bf465f477-d9mdk | awk '{print $1}'
# 4584a1f2204e
# 9ff8d01cb125

1.2 查看进程 ID

docker inspect ${容器ID} | grep '"Pid":'

# [root@node-34251077-18 /]# docker inspect 4584a1f2204e | grep '"Pid":'
# "Pid": 1866468

1.3 查看 cgroup 具体存储路径

cat /proc/${PID}/cgroup | grep mem

# [root@node-34251077-18 /]# cat /proc/1866468/cgroup | grep mem
# 3:memory:/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod16992772_811f_48e6_86c4_3b7aa8da33fa.slice/docker-4584a1f2204ed4f9db4df37a41d6e886901125cf39755d707b7b971cf93c52e1.scope

1.4 进入路径查看相关资源配置

ls -l /sys/fs/cgroup/memory/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod16992772_811f_48e6_86c4_3b7aa8da33fa.slice/docker-4584a1f2204ed4f9db4df37a41d6e886901125cf39755d707b7b971cf93c52e1.scope

1.5 修改内存使用限制

这里需要先修改 memsw,否则会因为参数检查报错:

  1. echo 6442450944 > memory.memsw.limit_in_bytes

  2. echo 6442450944 > memory.limit_in_bytes

1.6 查看修改后的数据

docker stats --no-stream | grep 4584a1f2204e

CONTAINER ID        CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
4584a1f2204e        0.15%               475.8MiB / 6GiB      7.74%               0B / 0B             76.4MB / 57.4MB     43

2、参数解释