Kubernetesのノードのディスク使用量を減らすメモ
NodeがDisk Fullになったため、使用量を減らす作業メモ。具体的には、使っていないコンテナイメージを削除したい。
kubectl debugコマンドでNodeにアクセスします。
kubectl debug node/<node_name> -it --image=busybox
chrootで、ノードセッションとのinteractionを開始します。
chroot /host
ディスクサイズを確認します。100%使用になっていますね。
$ df -h | head -3
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 150G 148G 0 100% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
Node上で、containerdに対するdocker CLIとしてnerdctlをインストールします。
cd /tmp
wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-1.7.6-linux-amd64.tar.gz
tar xzvf nerdctl-1.7.6-linux-amd64.tar.gz
mv nerdctl /usr/local/bin/
nerdctl versionを実行してcontainerdのサーバーにアクセスできることを確認します。
$ nerdctl version
WARN[0000] unable to determine buildctl version: exec: "buildctl": executable file not found in $PATH
Client:
Version: v1.7.6
OS/Arch: linux/amd64
Git commit: 845e989f69d25b420ae325fedc8e70186243fd93
buildctl:
Version:
Server:
containerd:
Version: v1.7.13
GitCommit: 7c3aca7a610df76212171d200ca3811ff6096eb8
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e946
Node上に溜まっているコンテナイメージを確認します。
nerdctl --namespace k8s.io images
使っていないイメージがディスクを圧迫しているでしょう。
次のコマンドで全イメージを削除します。起動中で使用されているコンテナイメージに関しては削除はできませんので、使われていないイメージが全削除されます。
nerdctl --namespace k8s.io images | awk '{print $3}' | sort | uniq | xargs nerdctl --namespace k8s.io rmi -f
ディスクが使用量が少し回復しました。
$ df -h | head -3
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 150G 117G 27G 82% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
exitを2回実行して終了します。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
node-debugger-kiwi-build-0e46b92bc3b6-nvpg5 0/1 Completed 0 8m7s
debug用のpodはCompletedの状態で残っているので、不要であれば削除して構いません。