22.3. 시스템 간에 컨테이너 마이그레이션

컨테이너에서 실행 중인 애플리케이션의 상태를 손실하지 않고 실행 중인 컨테이너를 한 시스템에서 다른 시스템으로 마이그레이션할 수 있습니다. 이 예는 카운터 가 태그된 로컬에서 컨테이너 체크포인트 생성 및 복원 섹션의 컨테이너 를 기반으로 합니다.

중요

podman 컨테이너 체크포인트 및 podman container restore 명령을 사용하여 시스템 간에 컨테이너를 마이그레이션하는 것은 아래와 같이 시스템 구성이 완전히 일치하는 경우에만 지원됩니다.

  • podman 버전
  • OCI 런타임(runc/crun)
  • 네트워크 스택(CNI/Netavark)
  • cgroups 버전
  • 커널 버전
  • CPU 기능

더 많은 기능이 있는 CPU로 마이그레이션할 수 있지만 사용 중인 특정 기능이 없는 CPU로 마이그레이션할 수 없습니다. 체크포인트(CRIU)를 수행하는 하위 수준 툴에서는 CPU 기능 호환성을 확인할 수 있습니다. https://criu.org/Cpuinfo.

사전 요구 사항

  • container-tools meta-package가 설치되어 있습니다.
  • 컨테이너를 로컬에서 사용할 수 없는 경우 Podman이 레지스트리에서 컨테이너를 자동으로 다운로드하므로 다음 단계는 필요하지 않습니다. 이 예에서는 레지스트리를 사용하지 않습니다. 이전에 빌드 및 태그된 컨테이너를 내보내야 합니다(로컬에서 컨테이너 체크포인트 생성 및 복원 참조).

    • 이전에 빌드한 컨테이너를 내보냅니다.

      # podman save --output counter.tar counter
    • 내보낸 컨테이너 이미지를 대상 시스템(other_host)에 복사합니다.

      # scp counter.tar other_host:
    • 대상 시스템에서 내보낸 컨테이너를 가져옵니다.

      # ssh other_host podman load --input counter.tar

      이제 이 컨테이너 마이그레이션의 대상 시스템에 로컬 컨테이너 스토리지에 저장된 컨테이너 이미지가 동일합니다.

절차

  1. 컨테이너를 root로 시작합니다.

    # podman run --name criu-test --detach counter
  2. 컨테이너의 IP 주소를 표시합니다.

    # podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}"
    10.88.0.247
  3. 컨테이너로 요청을 보냅니다.

    # curl 10.88.0.247:8080
    0
    # curl 10.88.0.247:8080
    1
  4. 컨테이너의 검사점을 만들고 검사점 이미지를 tar.gz 파일로 내보냅니다.

    # podman container checkpoint criu-test --export /tmp/chkpt.tar.gz
  5. 검사점 아카이브를 대상 호스트에 복사합니다.

    # scp /tmp/chkpt.tar.gz other_host:/tmp/
  6. 대상 호스트 (other_host)에서 checkpoint를 복원하십시오.

    # podman container restore --import /tmp/chkpt.tar.gz
  7. 대상 호스트의 컨테이너로 요청을 보냅니다(other_host):

    # *curl 10.88.0.247:8080*
    2

그 결과 상태 저장 컨테이너가 상태를 손실하지 않고 한 시스템에서 다른 시스템으로 마이그레이션되었습니다.