K3s 清理垃圾

可以。当前我没法直接进入你的 Linux 主机执行命令,但你可以在 k3s 所在服务器上直接跑下面这一套,我把检查、启动、状态确认和安全清理未使用镜像都放进去了。

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
echo "===== 1. k3s 服务状态 ====="
sudo systemctl status k3s --no-pager -l || true

echo
echo "===== 2. k3s 是否开机启动 ====="
sudo systemctl is-enabled k3s || true

echo
echo "===== 3. k3s 是否正在运行 ====="
sudo systemctl is-active k3s || true

echo
echo "===== 4. 磁盘空间 ====="
df -h

echo
echo "===== 5. k3s 最近日志 ====="
sudo journalctl -u k3s -n 100 --no-pager

echo
echo "===== 6. 如果 k3s 没运行,则启动 ====="
if ! sudo systemctl is-active --quiet k3s; then
echo "k3s 未运行,正在启动..."
sudo systemctl restart k3s
sleep 5
fi

echo
echo "===== 7. k3s 当前状态 ====="
sudo systemctl status k3s --no-pager -l || true

echo
echo "===== 8. Kubernetes 节点 ====="
sudo k3s kubectl get nodes -o wide || true

echo
echo "===== 9. 所有 Pod ====="
sudo k3s kubectl get pods -A -o wide || true

echo
echo "===== 10. 当前容器 ====="
sudo k3s crictl ps -a || true

echo
echo "===== 11. 清理前镜像 ====="
sudo k3s crictl images || true

echo
echo "===== 12. 删除未使用镜像 ====="
sudo k3s crictl rmi --prune

echo
echo "===== 13. 清理后镜像 ====="
sudo k3s crictl images || true

echo
echo "===== 14. 最终磁盘空间 ====="
df -h

其中清理镜像我建议使用:

1
sudo k3s crictl rmi --prune

它比直接拿 ctr 批量删除镜像安全,因为它会通过 CRI 判断未使用镜像,不会故意把正在运行 Pod 所依赖的镜像全部删掉

如果你只想先检查,不急着清理,重点看这几个:

1
2
3
4
5
6
7
8
9
sudo systemctl status k3s --no-pager -l

sudo journalctl -u k3s -n 200 --no-pager

sudo k3s kubectl get nodes -o wide

sudo k3s kubectl get pods -A

df -h

如果发现类似:

1
2
3
4
No space left on device
DiskPressure
ImageGCFailed
failed to start containerd

那很可能就是 /var/lib/rancher/k3s 或系统盘空间被镜像、容器快照占满了。可以进一步看看:

1
2
3
sudo du -sh /var/lib/rancher/k3s
sudo du -sh /var/lib/rancher/k3s/agent/containerd
sudo du -h --max-depth=2 /var/lib/rancher/k3s/agent/containerd | sort -h | tail -30

另外确认一下开机自动启动:

1
sudo systemctl enable k3s

然后:

1
sudo systemctl restart k3s

如果你这台机器实际上是 worker 节点,服务名不是 k3s,而是:

1
2
3
sudo systemctl status k3s-agent
sudo journalctl -u k3s-agent -n 200 --no-pager
sudo systemctl restart k3s-agent

不要直接手工删除

1
/var/lib/rancher/k3s/agent/containerd/

里面的文件,也不建议用 rm -rf 清 containerd 数据,否则可能把 snapshot/container 元数据弄坏。

你可以把下面两个命令的输出直接贴给我:

1
2
sudo systemctl status k3s --no-pager -l
sudo journalctl -u k3s -n 100 --no-pager

我可以直接帮你判断 k3s 为什么没起来,再看是否还需要处理 containerd、磁盘、证书、端口或者 datastore。