kubernetesエージェントノードのメモリ調査
k8sを構成するエージェントノードのうちの1台がメモリ使用率がほぼ100%になっていたので調査しました。
まずはvmstatでFreeメモリを確認。
root@host3:~# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1402460 97368 5017088 0 0 1922 8 1 2 1 1 92 6 0
1 0 0 1401328 97368 5016984 0 0 0 20 1233 4908 0 0 99 0 0
0 0 0 1401864 97368 5017048 0 0 0 20 870 4224 1 0 99 0 0
Freeが1.4GB程度しかない。
エージェントノードのリソース確認
podが該当ノードに偏ってしまったのか確認。
user@work-server:$ kubectl describe node host3
Name: host3
Roles: agent
(省略)
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
OutOfDisk False Fri, 15 Feb 2019 00:44:14 +0000 Thu, 31 Jan 2019 01:06:41 +0000 KubeletHasSufficientDisk kubelet has sufficient disk space available
MemoryPressure False Fri, 15 Feb 2019 00:44:14 +0000 Thu, 31 Jan 2019 01:06:41 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Fri, 15 Feb 2019 00:44:14 +0000 Thu, 31 Jan 2019 01:06:41 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Fri, 15 Feb 2019 00:44:14 +0000 Mon, 21 Jan 2019 08:13:51 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Fri, 15 Feb 2019 00:44:14 +0000 Thu, 31 Jan 2019 01:06:51 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled
(省略)
Non-terminated Pods: (3 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
dd-agent dd-agent-zpqxd 200m (1%) 200m (1%) 1Gi (3%) 1Gi (3%) 18m
kube-system kube-proxy-fff9p 100m (0%) 0 (0%) 0 (0%) 0 (0%) 24d
my-api-b-001-ro my-api-deployment-c77fc9c5-g9bnq 2 (12%) 2 (12%) 4Gi (12%) 4Gi (12%) 15h
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 2300m (14%) 2200m (13%)
memory 5Gi (15%) 5Gi (15%)
ephemeral-storage 0 (0%) 0 (0%)
alpha.kubernetes.io/nvidia-gpu 0 0
Events: <none>
そうでもない。
k8sのメモリ使用量は5Giで15%程度なのでpodが圧迫してるわけではない。
メモリ消費してるプロセスをtopコマンドで確認。
KiB Mem : 32939376 total, 1416364 free, 26408848 used, 5114164 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 5084536 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2023 root 20 0 1756856 183680 25828 S 2.0 0.6 719:07.23 kubelet
32406 user 20 0 5143476 1.578g 4804 S 1.0 5.0 14:37.36 java
1640 root 20 0 25.601g 0.020t 26752 S 0.7 66.3 1375:04 dockerd
1887 root 20 0 2552428 39952 6956 S 0.7 0.1 78:41.76 docker-containe
4962 root 20 0 224656 24188 8648 S 0.7 0.1 0:54.60 python3
3400 root 20 0 1619184 51140 25192 S 0.3 0.2 37:40.95 hyperkube
24245 root 20 0 3881536 285560 52264 S 0.3 0.9 0:35.35 agent
32172 root 20 0 413060 4948 2304 S 0.3 0.0 1:07.55 docker-containe
1 root 20 0 38012 5852 3776 S 0.0 0.0 0:16.35 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.25 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:04.81 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 13:14.36 rcu_sched
9 root 20 0 0 0 0 I 0.0 0.0 0:00.02 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.96 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:01.99 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
14 root rt 0 0 0 0 S 0.0 0.0 0:01.81 watchdog/1
15 root rt 0 0 0 0 S 0.0 0.0 0:01.10 migration/1
16 root 20 0 0 0 0 S 0.0 0.0 0:03.49 ksoftirqd/1
18 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
20 root rt 0 0 0 0 S 0.0 0.0 0:02.37 watchdog/2
21 root rt 0 0 0 0 S 0.0 0.0 0:00.89 migration/2
22 root 20 0 0 0 0 S 0.0 0.0 0:13.43 ksoftirqd/2
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3
26 root rt 0 0 0 0 S 0.0 0.0 0:02.33 watchdog/3
27 root rt 0 0 0 0 S 0.0 0.0 0:00.89 migration/3
28 root 20 0 0 0 0 S 0.0 0.0 0:11.50 ksoftirqd/3
30 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/3:0H
31 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/4
32 root rt 0 0 0 0 S 0.0 0.0 0:02.43 watchdog/4
33 root rt 0 0 0 0 S 0.0 0.0 0:00.92 migration/4
34 root 20 0 0 0 0 S 0.0 0.0 0:12.42 ksoftirqd/4
36 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/4:0H
37 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/5
38 root rt 0 0 0 0 S 0.0 0.0 0:02.33 watchdog/5
39 root rt 0 0 0 0 S 0.0 0.0 0:00.90 migration/5
40 root 20 0 0 0 0 S 0.0 0.0 0:12.48 ksoftirqd/5
42 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/5:0H
43 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/6
44 root rt 0 0 0 0 S 0.0 0.0 0:02.09 watchdog/6
45 root rt 0 0 0 0 S 0.0 0.0 0:00.88 migration/6
dockerdが怪しい。
dockerコンテナの確認
起動してるdockerコンテナを確認。
root@host3:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6222e152f33b datadog/agent@sha256:e04cc178565977c606ef8ef4bcd385d62ea800ba66d8c0be8014eb8e95f27f2e "/init" 46 minutes ago Up 46 minutes k8s_dd-agent_dd-agent-zpqxd_dd-agent_3740c758-30b8-11e9-b8c1-000d3a50757b_0
ca9311718119 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 46 minutes ago Up 46 minutes k8s_POD_dd-agent-zpqxd_dd-agent_3740c758-30b8-11e9-b8c1-000d3a50757b_0
b5608bcab43b my-api@sha256:77a4f0e88724458f378449f65f43dfaea29dd5ef02741b23edbb647030859db4 "./entrypoint.sh -..." 15 hours ago Up 15 hours k8s_backend_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
08964df69d37 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 15 hours ago Up 15 hours k8s_frontend_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
900a73503095 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 15 hours ago Up 15 hours k8s_POD_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
f13a26b9ca73 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 4 days ago Up 4 days k8s_frontend_my-api-deployment-bf5b6fcd6-pr7rs_my-api-b-001-rw_75c07464-29dd-11e9-b8c1-000d3a50757b_5
91dd88cb0499 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 4 days ago Up 4 days k8s_frontend_my-api-deployment-bf5b6fcd6-pr7rs_my-api-b-001-rw_75c07464-29dd-11e9-b8c1-000d3a50757b_4
422551d39e3c nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 7 days ago Up 7 days k8s_frontend_my-api-deployment-bf5b6fcd6-pr7rs_my-api-b-001-rw_75c07464-29dd-11e9-b8c1-000d3a50757b_1
ebd8e5778b63 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 10 days ago Up 10 days k8s_frontend_my-api-deployment-5994cc4897-c8qt7_my-api-b-001-rw_bfa5adce-2519-11e9-b8c1-000d3a50757b_3
5a5bf0e44c24 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 10 days ago Up 10 days k8s_frontend_my-api-deployment-85b85bc4c6-xjnz4_my-api-b-001-ro_2a695ff0-2519-11e9-b8c1-000d3a50757b_3
511a5bf6f167 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 10 days ago Up 10 days k8s_frontend_my-api-deployment-85b85bc4c6-kdfl8_my-api-b-001-ro_2a65141a-2519-11e9-b8c1-000d3a50757b_2
595a00b5ff3e nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 10 days ago Up 10 days k8s_frontend_my-api-deployment-85b85bc4c6-6m94j_my-api-b-001-ro_2a5e5ef5-2519-11e9-b8c1-000d3a50757b_2
823fb2f47759 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 11 days ago Up 11 days k8s_frontend_my-api-deployment-85b85bc4c6-xjnz4_my-api-b-001-ro_2a695ff0-2519-11e9-b8c1-000d3a50757b_2
398392fd90c3 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 11 days ago Up 11 days k8s_frontend_my-api-deployment-5994cc4897-c8qt7_my-api-b-001-rw_bfa5adce-2519-11e9-b8c1-000d3a50757b_2
e94402dcb2ed nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 12 days ago Up 12 days k8s_frontend_my-api-deployment-5994cc4897-c8qt7_my-api-b-001-rw_bfa5adce-2519-11e9-b8c1-000d3a50757b_1
80c4d7eb906a nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 12 days ago Up 12 days k8s_frontend_my-api-deployment-85b85bc4c6-6m94j_my-api-b-001-ro_2a5e5ef5-2519-11e9-b8c1-000d3a50757b_1
8bed3e796fc6 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 12 days ago Up 12 days k8s_frontend_my-api-deployment-85b85bc4c6-xjnz4_my-api-b-001-ro_2a695ff0-2519-11e9-b8c1-000d3a50757b_1
da55ff083bad nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 12 days ago Up 12 days k8s_frontend_my-api-deployment-85b85bc4c6-kdfl8_my-api-b-001-ro_2a65141a-2519-11e9-b8c1-000d3a50757b_1
d2fc182ba710 nginx@sha256:3be25b5301acfcaad024ec274caf459ecd2bba4f9aa88145589afa729e346776 "nginx -g 'daemon ..." 2 weeks ago Up 2 weeks k8s_frontend_my-api-deployment-5994cc4897-c8qt7_my-api-b-001-rw_bfa5adce-2519-11e9-b8c1-000d3a50757b_0
ee1989c5bcb6 nginx@sha256:3be25b5301acfcaad024ec274caf459ecd2bba4f9aa88145589afa729e346776 "nginx -g 'daemon ..." 2 weeks ago Up 2 weeks k8s_frontend_my-api-deployment-85b85bc4c6-kdfl8_my-api-b-001-ro_2a65141a-2519-11e9-b8c1-000d3a50757b_0
8c25e48b27a2 nginx@sha256:3be25b5301acfcaad024ec274caf459ecd2bba4f9aa88145589afa729e346776 "nginx -g 'daemon ..." 2 weeks ago Up 2 weeks k8s_frontend_my-api-deployment-85b85bc4c6-xjnz4_my-api-b-001-ro_2a695ff0-2519-11e9-b8c1-000d3a50757b_0
e10920dc83ad nginx@sha256:3be25b5301acfcaad024ec274caf459ecd2bba4f9aa88145589afa729e346776 "nginx -g 'daemon ..." 2 weeks ago Up 2 weeks k8s_frontend_my-api-deployment-85b85bc4c6-6m94j_my-api-b-001-ro_2a5e5ef5-2519-11e9-b8c1-000d3a50757b_0
9575ec9116b6 k8s-gcrio.azureedge.net/hyperkube-amd64@sha256:badd2b1da29d4d530b10b920f64bf66a1b41150db46c3c99b49d56f3f18a82db "/hyperkube proxy ..." 2 weeks ago Up 2 weeks k8s_kube-proxy_kube-proxy-fff9p_kube-system_85d2d6da-1d54-11e9-840e-000d3a5185c7_1
1336b0d9fc52 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 2 weeks ago Up 2 weeks k8s_POD_kube-proxy-fff9p_kube-system_85d2d6da-1d54-11e9-840e-000d3a5185c7_1
当システムでは1つのpodを以下の3つのコンテナで構成しているのですが、
・nginx(webサーバ)
・App(アプリケーション)
・pause(k8sのシステム管理)
・・・どうみてもnginxがたくさんいる。
コンテナのimage名から動作中のコンテナは、
b5608bcab43b my-api@sha256:77a4f0e88724458f378449f65f43dfaea29dd5ef02741b23edbb647030859db4 "./entrypoint.sh -..." 15 hours ago Up 15 hours k8s_backend_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
08964df69d37 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 15 hours ago Up 15 hours k8s_frontend_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
900a73503095 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 15 hours ago Up 15 hours k8s_POD_my-api-deployment-c77fc9c5-g9bnq_my-api-b-001-ro_ff5961b4-3038-11e9-b8c1-000d3a50757b_0
だけのはず。残りはzombieということか。
直接原因の判明と対処
以前から稼働中のコンテナをOOMkillされたり、kubectlで落ちきらないpodを強制deleteとかしていたのでその時の残骸が起動し続けていてメモリを圧迫していた。
そこで稼働中のコンテナを特定し、それ以外のコンテナを停止しようと試みた。
まずは正常停止。
root@host3:~# docker stop f13a26b9ca73
f13a26b9ca73
root@host3:~# docker ps -a | grep f13a26b9ca73
f13a26b9ca73 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 4 days ago Up 4 days k8s_frontend_my-api-deployment-bf5b6fcd6-pr7rs_my-api-b-001-rw_75c07464-29dd-11e9-b8c1-000d3a50757b_5
root@host3:~#
死なない。
次に強制停止その1。
root@host3:~# docker kill f13a26b9ca73
f13a26b9ca73
root@host3:~# docker ps -a | grep f13a26b9ca73
f13a26b9ca73 nginx@sha256:e0292d158b6b353fde34909243a4886977cb9d1abb8a8a5fef9e0ff7138dd3e2 "nginx -g 'daemon ..." 4 days ago Up 4 days k8s_frontend_my-api-deployment-bf5b6fcd6-pr7rs_my-api-b-001-rw_75c07464-29dd-11e9-b8c1-000d3a50757b_5
死なない。。
次に強制停止その2。
root@host3:~# docker rm --force f13a26b9ca73
Error response from daemon: Driver overlay2 failed to remove root filesystem f13a26b9ca73701bf65a1cf8e573a631d0b509583f47c86de728c112c85c0bea: remove /var/lib/docker/overlay2/cf99d43d3405e58c1cc9ab8cec36dc13014789bbb85c76f49cd52b29ebc77bc0/merged/bin: directory not empty
root@host3:~#
削除対象のディレクトリが空じゃないから消せないようなので中身を見てみる。
root@host3:~# ls -l /var/lib/docker/overlay2/cf99d43d3405e58c1cc9ab8cec36dc13014789bbb85c76f49cd52b29ebc77bc0/merged
total 0
何もいません。。。
メモリをどうにか空けるためOSコマンドでのkillを試みる。まずは-15で。
root@host3:~# kill -15 26779
root@host3:~#
root@host3:~#
root@host3:~# ps -aef | grep f13a26b9ca73
root 26779 1887 0 Feb10 ? 00:02:28 docker-containerd-shim f13a26b9ca73701bf65a1cf8e573a631d0b509583f47c86de728c112c85c0bea /var/run/docker/libcontainerd/f13a26b9ca73701bf65a1cf8e573a631d0b509583f47c86de728c112c85c0bea docker-runc
root 32403 19055 0 01:48 pts/0 00:00:00 grep --color=auto f13a26b9ca73
死なない。。。。
最終手段でzombieにヘッドショット。
root@host3:~# kill -9 26779
root@host3:~#
root@host3:~#
root@host3:~# ps -aef | grep f13a26b9ca73
root 1162 19055 0 01:48 pts/0 00:00:00 grep --color=auto f13a26b9ca73
root@host3:~#
さすがに死にました。
dockerコマンドで死活を確認。
root@host3:~# docker ps
^C
dockerコマンドが無応答になりました。(´▽`)
dockerコマンドが効かなくなったためk8sにNotReadyを言い渡されました。
user@work-server:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
host0 Ready agent 24d v1.10.2
host1 Ready agent 24d v1.10.2
host2 Ready agent 24d v1.10.2
host3 NotReady agent 24d v1.10.2
host4 Ready agent 24d v1.10.2
host5 Ready agent 24d v1.10.2
host6 Ready agent 24d v1.10.2
k8s-master-33366746-0 Ready master 24d v1.10.2
k8s-master-33366746-1 Ready master 24d v1.10.2
k8s-master-33366746-2 Ready master 24d v1.10.2
結局、ノードOSのメモリ使用量も減ってません。
root@host3:~# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1257536 99784 5076520 0 0 1918 8 1 0 1 1 92 6 0
0 0 0 1255436 99784 5076492 0 0 0 20 684 3142 0 0 99 0 0
NotReadyになったことで該当エージェントにあったpodは「STATUS」が"Unknown"となり、evictされていたので最終手段としてノードVMの再起動を実施。
NAME READY STATUS RESTARTS AGE IP NODE
my-api-deployment-f77f49cdb-gvrkm 2/2 Running 0 16h IPaddress host5
my-api-deployment-f77f49cdb-mj47t 2/2 Running 0 16h IPaddress host6
my-api-deployment-f77f49cdb-ms4zp 2/2 Running 0 16h IPaddress host1
my-api-deployment-f77f49cdb-shl66 2/2 Running 0 16h IPaddress host4
my-api-deployment-f77f49cdb-xlzq6 2/2 Running 0 16h IPaddress host6
user@work-server:~$
user@work-server:~$ kubectl get pod -n my-api-b-001-ro -o wide
NAME READY STATUS RESTARTS AGE IP NODE
my-api-deployment-c77fc9c5-5mb5z 2/2 Running 0 16h IPaddress host4
my-api-deployment-c77fc9c5-8zqlh 2/2 Running 0 16h IPaddress host5
my-api-deployment-c77fc9c5-9mcmf 2/2 Running 0 16h IPaddress host6
my-api-deployment-c77fc9c5-bnjpm 2/2 Running 0 16h IPaddress host0
my-api-deployment-c77fc9c5-chkbc 2/2 Running 0 1m IPaddress host2
my-api-deployment-c77fc9c5-g9bnq 2/2 Unknown 0 16h IPaddress host3
ここで再起動前後で/var/
再起動後、とりあえずZombieコンテナは一掃され、
root@host3:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c7101761e13 datadog/agent@sha256:e04cc178565977c606ef8ef4bcd385d62ea800ba66d8c0be8014eb8e95f27f2e "/init" 3 days ago Up 3 days k8s_dd-agent_dd-agent-zpqxd_dd-agent_3740c758-30b8-11e9-b8c1-000d3a50757b_1
d2f60990f374 k8s-gcrio.azureedge.net/hyperkube-amd64@sha256:badd2b1da29d4d530b10b920f64bf66a1b41150db46c3c99b49d56f3f18a82db "/hyperkube proxy ..." 3 days ago Up 3 days k8s_kube-proxy_kube-proxy-fff9p_kube-system_85d2d6da-1d54-11e9-840e-000d3a5185c7_2
d14e3e204328 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 3 days ago Up 3 days k8s_POD_dd-agent-zpqxd_dd-agent_3740c758-30b8-11e9-b8c1-000d3a50757b_1
9b605582fa18 k8s-gcrio.azureedge.net/pause-amd64:3.1 "/pause" 3 days ago Up 3 days k8s_POD_kube-proxy-fff9p_kube-system_85d2d6da-1d54-11e9-840e-000d3a5185c7_2
root@host3:~#
メモリもFreeが大量に確保されました。
root@host3:~# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 28280936 155804 1821380 0 0 0 7 9 3 0 0 99 0 0
0 0 0 28280780 155804 1821456 0 0 0 20 745 2779 0 0 99 0 0
^C
ちなみに再起動前後で、/var/lib/docker配下のlsリストを出力していたのですが、
/var/lib/docker/container配下のディレクトリ数が整理され、30 → 8個に減少しました。
./containers:
total 32
drwx------ 3 root root 4096 Feb 15 02:16 0c7101761e1350263499167f00fd98162be42414af3bce542e847e0931d20369
drwx------ 3 root root 4096 Feb 15 02:16 d2f60990f374a91b297ff4376604356b3fee49d8dd6018322e3dd63d06bbcd02
drwx------ 4 root root 4096 Feb 15 02:16 d14e3e20432868018c66e9bb664b1e45322db37ceef14b029608936a650b5b05
drwx------ 4 root root 4096 Feb 15 02:16 9b605582fa18c13651e44caa79713a115fb31b831effdd7cae03b5e9216bf361
drwx------ 4 root root 4096 Feb 15 02:16 ca93117181199c5309249dc798a451661ba7a9fa2f0409771d9117b37cc3f905
drwx------ 3 root root 4096 Feb 15 02:16 9575ec9116b6c54799fff26c85147b4711a82269d2a66966fd7bfa2095b83a70
drwx------ 3 root root 4096 Feb 15 02:16 6222e152f33bbe6738ae3c3661f14e667c8c34532a4434594c2bd5dc3a22ab50
drwx------ 4 root root 4096 Feb 15 02:16 1336b0d9fc525921e9a9bdd91815aa50e0762af6ad3afe6f6d3a19bc9b704a50
まとめ
実際に起動しているが管理されていないZombieコンテナが、ホストOSのメモリを圧迫していることが分かり、それらを一掃することで回復することができました。
が、Zombieコンテナの一掃方法については、該当ホスト上の”生きてる”podを退避し、ホストOSの再起動を行うという方法しか思いつきませんでした。
今後発生したら、今のところ同様の方法でホストOS再起動するしかありません。
そもそもpodの強制削除などZombieコンテナを発生させるような状況をなくしたいです。