LabHub
学习 学习路径 课程

Rootless Podman 运维

镜像把家目录塞满的时候

在 LabHub 中继续学习

一句话总结

rootless podman的图像是~/.local/share/containers/storage堆积起来。如果主分区很小,移动graph root成为第一个操作任务。

概念图: 移动graph root · 是的。 · 重要的是,从第3次开始,新商店就空了。 · 再次接收

为什么需要这个?

服务器分区设计这种情况很常见。

/          50G
/home      20G      <- rootless podman 의 이미지가 여기 쌓인다
/data      2T       <- 정작 큰 디스크는 여기

一个CUDA映像就用完了8GB。即使只收到两个,主页也会被占用。而且主页被占用的话,不仅podman,而且那个用户的所有工作都会停止。

怎么行动

搬什么东西

项目 基本路径(rootless) 需要移动吗
graphroot ~/.local/share/containers/storage **是的。**图像·容器图层
runroot /run/user/<uid>/containers 不是。tmpfs是正确的。
音量 <graphroot>/volumes 移动graphroot的话会跟着移动
设置 ~/.config/containers 不是。小。

程序

# 1. 현재 상태 확인
podman info --format '{{.Store.GraphRoot}}'
du -sh ~/.local/share/containers/storage

# 2. 새 경로 준비 (소유자가 그 사용자여야 한다)
sudo mkdir -p /srv/podman/podster
sudo chown podster:podster /srv/podman/podster
sudo chmod 700 /srv/podman/podster

# 3. 설정 변경
#    ~/.config/containers/storage.conf
#    [storage]
#    graphroot = "/srv/podman/podster"

# 4. 검증
podman info --format '{{.Store.GraphRoot}}'
podman images

重要的是,从第3次开始,新商店就空了。 现有图像仍然保留在旧路径上,podman 不再看到它。只有两种选择。

如果是封闭网络的话,只有后者。而且在删除旧路径之前,一定要在新路径上podman images确认是否会显示期待的列表

设定为系统全局

要向多个用户适用相同的政策的话/etc/containers/storage.conf写在。但是,由于rootless用户的个人设置会覆盖此内容,如果目的是标准化,则需要发布个人设置文件或主骨架(/etc/skel)放入。

确认命令

podman info --format '{{.Store.GraphRoot}}'
podman info --format '{{.Store.RunRoot}}'
podman info --format '{{.Store.GraphDriverName}}'
podman system df

podman system df显示映像、容器、卷的各自使用量。选择整理对象时是第一个命令。

在Rootless中,存储器出问题的理由

ROOTLESS FORD独有的存储问题大部分在用户名空间和文件所有权中 出来。知道原理的话,症状就会马上读懂。

容器内的UID是主机上的其他数字。/etc/subuid只要写在上的范围 被挤压了。容器内的root(0)在主机上是我的UID,容器内的1000是 在主机上subuid 시작 + 999所以,如果在主机上看到那个文件,那么所有者就会 看起来是很大的数字。

grep "^$USER:" /etc/subuid /etc/subgid
podman unshare cat /proc/self/uid_map

**如果挂载主机目录,权限就不对了。**我创建的文件在主机上 这是我的,在集装箱里nobody看起来是这样。要转移所有权的话,那个 在名字空间里chown应该做。

podman unshare chown -R 1000:1000 ./data

podman unshare没有sudo chown这样做的话,只有以主机为基准才正确,在容器中 还是不对。

**移动graph root时所花费的时间。**如果新位置是不同的文件系统的话 overlay首先看是否支持。在NFS上不能overlay,这时 vfs随着下降,磁盘使用量增加了几倍,并变得缓慢。

podman info --format '{{.Store.GraphRoot}} {{.Store.GraphDriverName}}'

**附有SELinux的发行版需要贴上标签。**在卷挂载上:Z不 粘在一起的话,容器就读不出来了。:z是共享,:Z是专用标签。

**定期清理剩余的东西。**因为Routes会堆积在用户主页下方,所以主页 分割槽很容易删除。一起查看临时映像、停止的容器和未使用的卷。

podman system df
podman system prune --volumes --filter until=168h

在现场相遇的样子

特别经常在GPU节点上遇到。 CUDA基础映像即使只接收几个数GB的映像也会占用大量空间。所以GPU服务器标准设置中,经常会完全包含将graphroot发送到数据磁盘的项目。

不能在NFS主页上放置graphroot。 overlay系列驱动程序无法正常运行,由于文件锁定问题出现奇怪的失败。必须是本地磁盘。

如果没有删除旧路径,将磁盘使用两倍的情况。搬迁后完成验证后,需要整理旧路径。但是podman system reset因为将当前设置的商店删除,所以不能用于整理旧路径。

下次实习要做的事情

podster将图的graph root移动到新路径,确认新商店为空后,加载图像存档并填充,podman info最终验证为。