---
title: Kubernetesのノードのディスク使用量を減らすメモ
tags: ["Kubernetes", "containerd", "nerdctl"]
categories: ["Dev", "CaaS", "Kubernetes"]
date: 2024-05-10T07:18:46Z
updated: 2024-05-10T07:18:46Z
---

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`](https://github.com/containerd/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`の状態で残っているので、不要であれば削除して構いません。
