LabHub
배우기 러닝패스 코스

Rootless Podmanの運用

rootless podmanの初期設定

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

전용 사용자 podster 를 위한 rootless podman 환경을 처음부터 구성하고, podman info 로 검증합니다.

왜 중요한가

rootless podman 은 설치보다 설정이 본론입니다. /etc/subuid 대역이 없으면 단일 UID 모드로 조용히 폴백해 특정 이미지에서만 권한 오류가 나고, 그 원인을 찾는 데 며칠이 걸립니다. graphroot 를 확인하지 않으면 홈 파티션이 차서 서비스가 멈춥니다. unqualified-search-registries 를 안 넣으면 docker 에서 잘 돌던 스크립트가 podman 에서 이미지를 못 찾습니다.

이 실습의 체크리스트는 실무에서 새 서버에 rootless podman 을 세울 때 그대로 쓰는 순서입니다.

단계

  1. /root/pod 디렉터리를 만들고, 사용자 podsteruid gid 홈경로 를 공백으로 구분해 한 줄로 /root/pod/user.txt 에 적으세요.
  2. /etc/subuidpodster 에게 시작 100000, 개수 65536 대역을 배정하세요.
  3. /etc/subgid 에도 같은 대역을 배정하세요.
  4. /root/pod/mapping.txt 를 다음 3줄로 만드세요. CONTAINER_0=<컨테이너 안 UID 0 에 대응하는 호스트 UID> / CONTAINER_1=<컨테이너 안 UID 1 의 호스트 UID> / CONTAINER_1000=<컨테이너 안 UID 1000 의 호스트 UID>
  5. /home/podster/.config/containers/storage.conf 를 만드세요. [storage] 섹션에 driver, runroot, graphroot 세 키가 있어야 하고, graphroot/home/podster/.local/share/containers/storage 여야 합니다. 파일 소유자는 podster 여야 합니다.
  6. /home/podster/.config/containers/registries.conf 를 만드세요. unqualified-search-registriesdocker.io 가 포함돼야 하고, docker.io 를 사내 미러 mirror.labhub.local/dockerhub 로 보내는 [[registry]] 블록이 있어야 합니다. 파일 소유자는 podster 여야 합니다.
  7. podster 권한으로 podman info 를 실행해 결과를 /root/pod/info.json 으로 저장하세요. JSON 형식이어야 하고 graphRoot 값이 5번에서 지정한 경로여야 합니다.
  8. /root/pod/checklist.txt 를 다음 5줄로 만드세요. SUBUID=yes / SUBGID=yes / ROOTLESS=<info 의 rootless 값 true/false> / GRAPHROOT=<info 의 graphRoot 값> / DRIVER=<info 의 스토리지 드라이버 이름>

참고

대상 사용자 확인

/root/pod 디렉터리를 만들고, 사용자 podsteruid gid 홈경로 를 공백으로 구분해 한 줄로 /root/pod/user.txt 에 적으세요.

id 명령으로 uid, gid, 홈 디렉터리를 확인할 수 있습니다. getent passwd 도 유용합니다.

subuid 대역 배정

/etc/subuidpodster 에게 시작 100000, 개수 65536 대역을 배정하세요.

형식은 사용자:시작UID:개수 입니다. usermod 로도, 파일 직접 편집으로도 가능합니다.

subgid 대역 배정

/etc/subgid 에도 같은 대역을 배정하세요.

subuid 와 같은 형식입니다. GID 도 같은 이유로 대역이 필요합니다.

매핑 계산

/root/pod/mapping.txt 를 다음 3줄로 만드세요. CONTAINER_0=<컨테이너 안 UID 0 에 대응하는 호스트 UID> / CONTAINER_1=<컨테이너 안 UID 1 의 호스트 UID> / CONTAINER_1000=<컨테이너 안 UID 1000 의 호스트 UID>

컨테이너 안 UID 0 은 사용자 본인에게 매핑되고 1부터가 대역의 시작입니다. 오프셋을 조심하세요.

storage.conf 작성

/home/podster/.config/containers/storage.conf 를 만드세요. [storage] 섹션에 driver, runroot, graphroot 세 키가 있어야 하고, graphroot/home/podster/.local/share/containers/storage 여야 합니다. 파일 소유자는 podster 여야 합니다.

사용자별 설정은 홈 아래 .config/containers 에 둡니다. [storage] 섹션에 세 키가 필요합니다.

registries.conf 작성

/home/podster/.config/containers/registries.conf 를 만드세요. unqualified-search-registriesdocker.io 가 포함돼야 하고, docker.io 를 사내 미러 mirror.labhub.local/dockerhub 로 보내는 [[registry]] 블록이 있어야 합니다. 파일 소유자는 podster 여야 합니다.

unqualified 검색 목록은 배열이고, 미러는 [[registry]] 블록으로 씁니다. prefix 와 location 이 짝입니다.

podman info 로 검증

podster 권한으로 podman info 를 실행해 결과를 /root/pod/info.json 으로 저장하세요. JSON 형식이어야 하고 graphRoot 값이 5번에서 지정한 경로여야 합니다.

그 사용자 권한으로 실행해야 사용자별 설정이 반영됩니다. su - 로 로그인 셸을 여는 편이 안전합니다.

초기 설정 체크리스트

/root/pod/checklist.txt 를 다음 5줄로 만드세요. SUBUID=yes / SUBGID=yes / ROOTLESS=<info 의 rootless 값 true/false> / GRAPHROOT=<info 의 graphRoot 값> / DRIVER=<info 의 스토리지 드라이버 이름>

앞 단계에서 확인한 실제 값들을 모으세요. 경로는 절대 경로로 적습니다.