Rootless Podman 운영 · graph root 옮기기 · 실습
graph root 를 새 경로로
목표
rootless podman 의 graph root 를 홈에서 별도 경로로 옮기고, 새 스토어를 이미지로 다시 채웁니다. 실무에서 가장 자주 하는 podman 운영 작업입니다.
왜 중요한가
rootless podman 의 이미지는 ~/.local/share/containers/storage 에 쌓입니다. CUDA 베이스 이미지 하나가 8GB 인 GPU 서버에서는 홈 파티션이 순식간에 찹니다. 그리고 홈이 차면 podman 뿐 아니라 그 사용자의 모든 작업이 멈춥니다. 그래서 GPU 노드 표준 설정에는 graphroot 이전이 아예 들어 있는 경우가 많습니다.
주의할 점 두 가지. 새 스토어는 비어 있습니다 — 기존 이미지는 옛 경로에 남고 podman 은 더 이상 보지 않습니다. 그리고 runroot 는 옮기지 않습니다 — 실행 중 락과 임시 상태가 들어가므로 tmpfs 여야 합니다.
단계
1. /root/gr 디렉터리를 만들고, podster 의 현재 graphRoot 와 runRoot 를 각각 한 줄씩(graphRoot 가 먼저) /root/gr/before.txt 에 적으세요.
2. 새 경로 /srv/podman/podster 를 만들고 소유자를 podster, 권한을 700 으로 설정하세요.
3. podster 의 storage.conf 에서 graphroot 를 새 경로로 바꾸세요.
4. podman info 로 graphRoot 가 새 경로인지 확인해 /root/gr/after.txt 에 한 줄로 적으세요.
5. 새 스토어의 이미지 개수를 숫자 한 줄로 /root/gr/empty.txt 에 적으세요. 0 이어야 합니다.
6. /opt/images/labhub-alpine.tar 를 새 스토어로 적재하고, 적재 후 이미지 목록을 /root/gr/images.txt 로 저장하세요. 최소 1개가 있어야 합니다.
7. /root/gr/runroot.txt 를 다음 2줄로 만드세요.RUNROOT=<현재 runRoot 값> / WHY=tmpfs
8. /root/gr/report.txt 를 다음 4줄로 만드세요.OLD=<1번의 graphRoot> / NEW=/srv/podman/podster / IMAGES_BEFORE=0 / IMAGES_AFTER=<6번 이후 이미지 개수>
참고
su - podster -c "podman info --format '{{.Store.GraphRoot}}'"로 값 하나만 뽑을 수 있습니다.- 이미지 개수는
podman images --format '{{.Repository}}' | wc -l로 셉니다. - 적재는
podman load -i /opt/images/labhub-alpine.tar입니다. - 이 노드에서 컨테이너 런타임이 막혀 있을 수 있습니다. 그때는 명령이
cannot re-exec process같은 오류로 끝나는데, 그 출력도 그대로 파일에 저장하세요. 비특권 user namespace 생성이 차단된 환경에서 rootless podman 이 어떻게 실패하는지가 그 자체로 배울 거리이고, 채점은 이 경우 작성한 설정을 기준으로 합니다. - 흔한 실수 1: 새 경로의 소유자를 root 로 두어 podman 이 쓰지 못하는 경우.
- 흔한 실수 2:
storage.conf를 root 로 편집해 소유자가 바뀌는 경우. 편집 후 소유권을 다시 확인하세요.
단계 8개
- 현재 경로 기록
- 새 경로 준비
- storage.conf 수정
- 새 경로 반영 확인
- 새 스토어가 비어 있음 확인
- 이미지 아카이브 적재
- runroot 확인과 근거 기록
- 이전 보고서