Moving the Graph Root to a New Path
한국어 원문으로 표시합니다.
목표
rootless podman 의 graph root 를 홈에서 별도 경로로 옮기고, 새 스토어를 이미지로 다시 채웁니다. 실무에서 가장 자주 하는 podman 운영 작업입니다.
왜 중요한가
rootless podman 의 이미지는 ~/.local/share/containers/storage 에 쌓입니다. CUDA 베이스 이미지 하나가 8GB 인 GPU 서버에서는 홈 파티션이 순식간에 찹니다. 그리고 홈이 차면 podman 뿐 아니라 그 사용자의 모든 작업이 멈춥니다. 그래서 GPU 노드 표준 설정에는 graphroot 이전이 아예 들어 있는 경우가 많습니다.
주의할 점 두 가지. 새 스토어는 비어 있습니다 — 기존 이미지는 옛 경로에 남고 podman 은 더 이상 보지 않습니다. 그리고 runroot 는 옮기지 않습니다 — 실행 중 락과 임시 상태가 들어가므로 tmpfs 여야 합니다.
단계
/root/gr디렉터리를 만들고,podster의 현재graphRoot와runRoot를 각각 한 줄씩(graphRoot 가 먼저)/root/gr/before.txt에 적으세요.- 새 경로
/srv/podman/podster를 만들고 소유자를podster, 권한을700으로 설정하세요. podster의storage.conf에서graphroot를 새 경로로 바꾸세요.podman info로graphRoot가 새 경로인지 확인해/root/gr/after.txt에 한 줄로 적으세요.- 새 스토어의 이미지 개수를 숫자 한 줄로
/root/gr/empty.txt에 적으세요.0이어야 합니다. /opt/images/labhub-alpine.tar를 새 스토어로 적재하고, 적재 후 이미지 목록을/root/gr/images.txt로 저장하세요. 최소 1개가 있어야 합니다./root/gr/runroot.txt를 다음 2줄로 만드세요.RUNROOT=<현재 runRoot 값>/WHY=tmpfs/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 로 편집해 소유자가 바뀌는 경우. 편집 후 소유권을 다시 확인하세요.
현재 경로 기록
/root/gr 디렉터리를 만들고, podster 의 현재 graphRoot 와 runRoot 를 각각 한 줄씩(graphRoot 가 먼저) /root/gr/before.txt 에 적으세요.
podman info 에는 Go 템플릿으로 특정 값만 뽑는 옵션이 있습니다. Store 하위에 경로들이 있습니다.
새 경로 준비
새 경로 /srv/podman/podster 를 만들고 소유자를 podster, 권한을 700 으로 설정하세요.
소유자와 권한이 중요합니다. 그 사용자가 읽고 쓸 수 있어야 하고 남이 들여다보면 안 됩니다.
storage.conf 수정
podster 의 storage.conf 에서 graphroot 를 새 경로로 바꾸세요.
[storage] 섹션의 graphroot 값만 바꾸면 됩니다. 따옴표를 유지하세요.
새 경로 반영 확인
podman info 로 graphRoot 가 새 경로인지 확인해 /root/gr/after.txt 에 한 줄로 적으세요.
설정을 고친 뒤 다시 info 를 실행하면 값이 바뀌어야 합니다. 안 바뀌면 소유권이나 경로를 의심하세요.
새 스토어가 비어 있음 확인
새 스토어의 이미지 개수를 숫자 한 줄로 /root/gr/empty.txt 에 적으세요. 0 이어야 합니다.
이미지 목록을 조회하면 머리말만 나오고 항목이 없어야 합니다. 개수를 세어 파일에 적으세요.
이미지 아카이브 적재
/opt/images/labhub-alpine.tar 를 새 스토어로 적재하고, 적재 후 이미지 목록을 /root/gr/images.txt 로 저장하세요. 최소 1개가 있어야 합니다.
podman 에는 tar 아카이브에서 이미지를 읽어들이는 명령이 있습니다. 적재 후 목록에 나타나야 합니다.
runroot 확인과 근거 기록
/root/gr/runroot.txt 를 다음 2줄로 만드세요.
RUNROOT=<현재 runRoot 값> / WHY=tmpfs
runroot 는 옮기지 않습니다. 왜 그런지를 정해진 키워드로 적으세요.
이전 보고서
/root/gr/report.txt 를 다음 4줄로 만드세요.
OLD=<1번의 graphRoot> / NEW=/srv/podman/podster / IMAGES_BEFORE=0 / IMAGES_AFTER=<6번 이후 이미지 개수>
이전/이후 경로와 이미지 개수를 모으면 됩니다. 값은 실제 확인한 것이어야 합니다.