Container Migration

최승혁·2023년 3월 16일
0

1. Container

정의

리눅스 컨테이너(Linux Container)는 리눅스 운영 체제에서 실행되는 프로세스를 격리된 환경에서 실행하도록 하는 경량 가상화 기술입니다. 컨테이너 기술은 프로세스 수준 가상화를 제공하며, 호스트 운영 체제와 하드웨어 자원을 공유하기 때문에 가상 머신에 비해 더욱 경량적입니다.

컨테이너는 일반적으로 Docker, Kubernetes, LXC(Linux Containers), OCI(Open Container Initiative) 등과 같은 컨테이너 관리 도구를 사용하여 관리됩니다. 이러한 도구들은 컨테이너 이미지를 만들고, 배포하며, 실행하며, 관리하는 데에 필요한 기능들을 제공합니다.

컨테이너 기술은 개발 및 운영 프로세스를 더욱 효율적으로 만들어주며, 애플리케이션의 배포와 스케일링을 쉽게 할 수 있습니다. 또한, 컨테이너는 애플리케이션을 격리된 환경에서 실행하기 때문에, 애플리케이션 간의 충돌을 방지하고, 보안적인 이슈를 줄일 수 있습니다.

필요성

  1. 자원 분리 및 격리: 컨테이너는 호스트 운영 체제와 하드웨어 자원을 공유하지만, 컨테이너 내에서 실행되는 애플리케이션은 격리된 환경에서 실행됩니다. 이를 통해 애플리케이션 간의 자원 충돌을 방지하고, 서로 영향을 미치지 않도록 할 수 있습니다.
  2. 포터빌리티: 컨테이너는 애플리케이션을 묶어서 이식 가능한 형태로 만들어줍니다. 이를 통해, 애플리케이션을 다른 운영 체제나 클라우드 환경으로 쉽게 이전하거나 배포할 수 있습니다.
  3. 개발 및 운영 프로세스의 효율성: 컨테이너는 애플리케이션을 격리된 환경에서 실행하기 때문에, 애플리케이션의 종속성 관리나 배포 프로세스를 더욱 효율적으로 만들어줍니다. 또한, 컨테이너는 가상 머신에 비해 더욱 경량적이므로, 애플리케이션 실행 시간을 줄여주고, 자원 사용량을 최적화할 수 있습니다.
  4. 스케일링: 컨테이너는 애플리케이션을 쉽게 복제하고, 배포하며, 스케일링할 수 있습니다. 이를 통해, 애플리케이션의 가용성과 확장성을 높일 수 있습니다.
  5. 보안: 컨테이너는 애플리케이션을 격리된 환경에서 실행하기 때문에, 애플리케이션 간의 충돌을 방지하고, 애플리케이션의 보안성을 높일 수 있습니다. 또한, 컨테이너는 애플리케이션의 종속성을 포함하고 있으므로, 애플리케이션에 필요한 라이브러리나 패키지의 버전 관리를 쉽게 할 수 있습니다.

2. Container Migration

정의

컨테이너 마이그레이션(Container Migration)은 일반적으로 하나의 호스트나 서버에서 다른 호스트나 서버로 컨테이너를 이동시키는 프로세스입니다. 이는 일반적으로 애플리케이션을 다른 환경으로 옮길 때, 확장성 및 가용성을 향상시키기 위해 수행됩니다.

컨테이너 마이그레이션은 대개 클라우드 인프라에서 많이 사용됩니다. 예를 들어, 클라우드 환경에서는 컨테이너 마이그레이션을 사용하여 애플리케이션을 보다 높은 가용성을 가진 가상 머신으로 옮길 수 있습니다. 이는 애플리케이션의 무중단 서비스를 유지하면서 리소스 사용량이 높은 환경에서 애플리케이션 성능을 향상시키는 데 도움이 됩니다.

필요성

  1. 자원 분리 및 격리: 컨테이너는 호스트 운영 체제와 하드웨어 자원을 공유하지만, 컨테이너 내에서 실행되는 애플리케이션은 격리된 환경에서 실행됩니다. 이를 통해 애플리케이션 간의 자원 충돌을 방지하고, 서로 영향을 미치지 않도록 할 수 있습니다.
  2. 포터빌리티: 컨테이너는 애플리케이션을 묶어서 이식 가능한 형태로 만들어줍니다. 이를 통해, 애플리케이션을 다른 운영 체제나 클라우드 환경으로 쉽게 이전하거나 배포할 수 있습니다.
  3. 개발 및 운영 프로세스의 효율성: 컨테이너는 애플리케이션을 격리된 환경에서 실행하기 때문에, 애플리케이션의 종속성 관리나 배포 프로세스를 더욱 효율적으로 만들어줍니다. 또한, 컨테이너는 가상 머신에 비해 더욱 경량적이므로, 애플리케이션 실행 시간을 줄여주고, 자원 사용량을 최적화할 수 있습니다.
  4. 스케일링: 컨테이너는 애플리케이션을 쉽게 복제하고, 배포하며, 스케일링할 수 있습니다. 이를 통해, 애플리케이션의 가용성과 확장성을 높일 수 있습니다.
  5. 보안: 컨테이너는 애플리케이션을 격리된 환경에서 실행하기 때문에, 애플리케이션 간의 충돌을 방지하고, 애플리케이션의 보안성을 높일 수 있습니다. 또한, 컨테이너는 애플리케이션의 종속성을 포함하고 있으므로, 애플리케이션에 필요한 라이브러리나 패키지의 버전 관리를 쉽게 할 수 있습니다.

장점

  1. 높은 가용성: 컨테이너 마이그레이션을 사용하면 애플리케이션을 실행하는 서버가 다운되거나 유지보수를 위해 종료되더라도 애플리케이션을 다른 서버로 즉시 이전할 수 있습니다. 이를 통해, 애플리케이션의 가용성을 높일 수 있습니다.
  2. 운영 효율성: 컨테이너 마이그레이션을 사용하면 애플리케이션을 실행하는 서버에서 다른 서버로 쉽게 이전할 수 있습니다. 이를 통해, 애플리케이션의 유지보수나 업그레이드 등을 위한 다운타임을 최소화하고, 운영 효율성을 높일 수 있습니다.
  3. 자원 최적화: 컨테이너 마이그레이션을 사용하면 자원이 부족한 서버에서 애플리케이션을 실행하는 서버로 쉽게 이전할 수 있습니다. 이를 통해, 자원을 최적화하고, 애플리케이션의 성능을 유지하면서 자원 사용량을 줄일 수 있습니다.
  4. 이식성: 컨테이너 마이그레이션을 사용하면 애플리케이션을 실행하는 환경을 쉽게 이전할 수 있습니다. 이를 통해, 애플리케이션을 다른 클라우드 환경이나 온프레미스 환경으로 쉽게 이전하거나 배포할 수 있습니다.
  5. 테스트와 개발: 컨테이너 마이그레이션을 사용하면 애플리케이션의 다양한 버전을 실행하는 서버로 쉽게 이전할 수 있습니다. 이를 통해, 애플리케이션을 테스트하거나 새로운 기능을 개발하는 등의 작업을 쉽게 할 수 있습니다.

3. CRIU

CRIU

CRIU는 Checkpoint/Restore In Userspace의 약어로, 리눅스 커널에서 프로세스의 상태를 저장하고 복원하는 기능을 제공하는 오픈 소스 도구입니다.

CRIU는 리눅스 컨테이너와 같은 경량 가상화 기술에서 많이 사용됩니다. 컨테이너의 상태를 CRIU로 저장하고 복원하여, 컨테이너를 다른 호스트로 이동시키거나, 일시 중지 및 재개 등의 작업을 수행할 수 있습니다. 이를 통해, 컨테이너의 이동과 상태 관리를 더욱 효율적으로 수행할 수 있습니다.

또한, CRIU는 다른 프로세스에 의해 사용되는 파일 디스크립터나 네트워크 소켓과 같은 리소스들을 저장할 수 있으며, 이러한 리소스를 통해 프로세스 간 이동을 수행할 수 있습니다. 이러한 기능들은 CRIU가 컨테이너 이동, 프로세스 이동 등의 작업에서 매우 유용하게 사용됩니다.

CRIU를 활용한 container migration 동작 과정

  1. 원본 컨테이너의 상태 스냅샷 생성: 먼저, CRIU는 원본 컨테이너의 상태를 스냅샷으로 생성합니다. 이 스냅샷에는 컨테이너의 메모리, 프로세스, 파일 디스크립터, 네트워크 연결 등의 상태 정보가 포함됩니다.
  2. 스냅샷 전송: 다음으로, 생성된 스냅샷을 목표 서버로 전송합니다. 이를 위해 CRIU는 네트워크를 통해 스냅샷 데이터를 압축하고 전송합니다.
  3. 목표 서버에서 스냅샷 복원: 전송된 스냅샷을 목표 서버에서 복원합니다. 이를 위해, CRIU는 스냅샷을 압축 해제하고, 복원할 컨테이너의 환경을 설정합니다.
  4. 목표 서버에서 컨테이너 실행: 마지막으로, 목표 서버에서 복원된 컨테이너를 실행합니다. 이를 위해, CRIU는 컨테이너의 상태 정보를 이용하여, 복원된 컨테이너를 다시 생성하고, 컨테이너 내부의 프로세스를 다시 시작합니다.
    위와 같은 과정을 통해, CRIU를 사용한 컨테이너 마이그레이션을 수행할 수 있습니다. 이를 통해, 컨테이너의 상태 정보를 빠르게 이전할 수 있으며, 이를 통해 애플리케이션의 가용성을 높일 수 있습니다.

CRIU를 오프로딩 하는 사례

  1. 컨테이너 이전 시간 감소: CRIU를 사용하여 컨테이너를 이전할 때, 스냅샷 생성, 복원 및 실행 등의 과정을 모두 목표 서버에서 수행하게 됩니다. 이에 따라, 원본 서버에서는 컨테이너 이전에 소요되는 시간을 크게 감소시킬 수 있습니다.
  2. 자원 활용성 향상: CRIU는 컨테이너의 상태 정보를 전송하고, 복원 및 실행하는 과정에서 대역폭과 네트워크 등의 자원을 많이 사용하게 됩니다. 이에 따라, 자원 활용성 측면에서 오프로딩을 통해 원본 서버의 부하를 줄이고, 목표 서버의 자원 활용성을 향상시킬 수 있습니다.
  3. 이중화 및 재해 복구: CRIU를 사용하여 컨테이너를 이전하는 경우, 이를 이용하여 이중화 및 재해 복구 등의 기능을 구현할 수 있습니다. 이를 통해, 애플리케이션의 가용성을 높일 수 있습니다.
  4. 가상 머신 이전: CRIU는 가상 머신도 이전할 수 있습니다. 이를 통해, 하이퍼바이저 레벨에서 가상 머신 이전을 수행할 수 있으며, 이를 이용하여 가상 머신의 이중화 및 재해 복구 등을 구현할 수 있습니다.
profile
그냥 기록하는 블로그

0개의 댓글