diff --git a/skills/reclaim-cluster-disk/CONTRIBUTORS b/skills/reclaim-cluster-disk/CONTRIBUTORS new file mode 100644 index 0000000..d8649da --- /dev/null +++ b/skills/reclaim-cluster-disk/CONTRIBUTORS @@ -0,0 +1 @@ +root diff --git a/skills/reclaim-cluster-disk/SKILL.md b/skills/reclaim-cluster-disk/SKILL.md new file mode 100644 index 0000000..2b990df --- /dev/null +++ b/skills/reclaim-cluster-disk/SKILL.md @@ -0,0 +1,45 @@ +--- +name: "reclaim-cluster-disk" +description: "集群磁盘占用高/要腾空间时,按安全顺序回收:journal、apt、docker、tmp、用户缓存(三台机通用)。" +--- + +# 集群磁盘回收 + +触发:用户说「磁盘占用高」「清一下磁盘」「腾空间」「巡检一下,关注磁盘占用」。 + +三台机:**襄阳2c4g**(本机直接跑)、**十堰电信4c8g**(`ssh 十堰电信4c8g `)、**阿里云**(`ssh aliyun `)。 + +## 1. 先量 + +```bash +df -h / # 每台,先记基线 +du -x -h --max-depth=1 / | sort -rh | head -15 # 一级大目录;很慢(>40s),用后台 process 轮询 +du -x -h --max-depth=1 /var/lib /root | sort -rh | head -20 +``` + +典型结论:`/var/lib`(containerd + k3s)是最大头但属运行必需;真正被忽略的是 journal、包缓存、/tmp、用户缓存。 + +## 2. 按风险从低到高回收 + +1. **归档日志**:`journalctl --vacuum-size=200M`(实测两台各回收 2.1G / 2.6G,只删已归档的) +2. **包缓存**:`apt-get clean`(实测 ~135M / 196M) +3. **宿主机 docker**(只对跑 docker 的机器;阿里云是 podman 模拟,看 `podman system df`): + `docker system df` 看 RECLAIMABLE → `docker image prune -a -f` → `docker builder prune -a -f`(实测 776M + 1.3G;使用中的镜像会被自动跳过) +4. **/tmp 里的过期包**:确认无用再删(实测 `searxng-image.tar`、`etcd.tar.gz`、`etcdctl`) +5. **用户缓存**:`rm -rf ~/.cache/uv ~/.cache/ms-playwright ~/.npm`(实测 ~1.6G;会重新下载,可接受) +6. **不用的自装服务**(可选):`systemctl --user disable --now ` → `pkill -9 -f ` → 删 `/usr/local/lib/`、`/usr/local/bin/*`、`~/.`、`~/.config/systemd/user/.service`(实测 hermes-agent 按此顺序清干净) +7. **核验**:`df -h /` 前后对比,逐台回报数字(实测 十堰 80%→59%、襄阳 61%→47%;阿里云本来就干净,没动) + +破坏性步骤(prune、rm -rf)先列清单、拿到用户确认再执行。 + +## 3. 不要动 + +- **K3s 镜像不在 docker 里**:`docker image prune` 动不到 K3s 的 containerd。查 K3s 镜像必须带命名空间: + `ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images list`(漏 `-n k8s.io` 得到空表,实测)。这些镜像都被运行中的 Pod 引用,**没有「闲置镜像」可清**。 +- **PVC 数据是活数据**:`/var/lib/rancher/k3s/storage/*`(booklib / gitea / koishi)不能删。 +- **别 purge 旧内核**:`apt-get purge linux-image-X-generic` 会连带删 `linux-image-virtual` / `linux-virtual` 元包、还要装 `linux-image-unsigned-X`(实测 dry-run)——每台只留 2 个内核已是精简状态,保持不动。 +- **用户手动停的容器别删**(例如十堰的 `serene_northcutt`)。 + +## 4. 镜像能共享吗(常问) + +不能。K3s/containerd 没有共享镜像存储:Pod 调度到哪台,哪台本地 containerd 就必须有一份;`imagePullPolicy: IfNotPresent` + `nodeSelector` 固定调度,能让每个镜像只落在需要的节点。各节点镜像清单用上面的 `ctr -n k8s.io` 命令查(这些机器上没装 `crictl`)。发现非调度节点上的冗余业务镜像(例:阿里云只跑 headlamp 却存着 searxng/blog 镜像)先别自动清——节点本地没镜像时 Pod 起不来,清理前要确认没有调度可能。