2장. OpenShift Container Platform 4.1에서 마이그레이션

2.1. Migration Toolkit for Containers 정보

MTC(Migration Toolkit for Containers)를 사용하여 OpenShift Container Platform 4.1에서 4.6으로 애플리케이션 워크로드를 마이그레이션할 수 있습니다. MTC를 사용하면 마이그레이션을 제어하고 애플리케이션 다운 타임을 최소화할 수 있습니다.

참고

소스 및 대상 클러스터가 올바르게 구성되어 있으면 동일한 버전의 OpenShift Container Platform 클러스터(예: 4.1에서 4.1로) 간에 마이그레이션할 수 있습니다.

MTC는 기본적으로 대상 클러스터에 설치되어 있습니다. 원격 클러스터에 MTC를 설치하도록 Migration Toolkit for Containers Operator를 구성할 수 있습니다.

Kubernetes 사용자 정의 리소스를 기반으로 하는 MTC 웹 콘솔 및 API를 사용하면 네임스페이스 단위로 스테이트풀(stateful) 및 스테이트리스(stateless) 애플리케이션 워크로드를 마이그레이션할 수 있습니다.

MTC는 소스 클러스터에서 대상 클러스터로 데이터를 마이그레이션하기 위한 파일 시스템 및 스냅샷 데이터 복사 방법을 지원합니다. 환경에 적합하고 스토리지 공급자가 지원하는 방법을 선택할 수 있습니다.

마이그레이션 후크를 사용하여 마이그레이션 중에 특정 시점에서 Ansible 플레이북을 실행할 수 있습니다. 마이그레이션 계획을 생성할 때 후크가 추가됩니다.

2.1.1. Migration Toolkit for Containers 워크플로

MTC(Migration Toolkit for Containers)를 사용하여 MTC 웹 콘솔 또는 Kubernetes API를 사용하여 Kubernetes 리소스, 영구 볼륨 데이터 및 내부 컨테이너 이미지를 OpenShift Container Platform 소스 클러스터에서 OpenShift Container Platform 4.6 대상 클러스터로 마이그레이션합니다.

(MTC)는 다음 리소스를 마이그레이션합니다.

  • 마이그레이션 계획에 지정된 네임스페이스입니다.
  • 네임스페이스 범위 리소스: MTC가 네임스페이스를 마이그레이션하면 서비스 또는 포드와 같은 해당 네임스페이스와 연결된 모든 오브젝트 및 리소스를 마이그레이션합니다. 또한 네임스페이스에 존재하지만 클러스터 수준에 없는 리소스가 클러스터 수준에 존재하는 리소스에 따라 달라지는 경우 MTC가 두 개의 리소스 모두를 마이그레이션합니다.

    예를 들어 SCC(보안 컨텍스트 제약 조건)는 클러스터 수준에 존재하는 리소스이며, 서비스 계정(SA)은 네임스페이스 수준에 존재하는 리소스입니다. MTC가 마이그레이션하는 네임스페이스에 SA가 있는 경우 MTC는 SA에 연결된 모든 SCC를 자동으로 찾고 해당 SCC도 마이그레이션합니다. 마찬가지로 MTC는 네임스페이스의 영구 볼륨에 연결된 영구 볼륨 클레임을 마이그레이션합니다.

  • CR(사용자 정의 리소스) 및 CRD(사용자 정의 리소스 정의) MTC는 네임스페이스 수준에서 존재하는 모든 CR과 해당 CR에 연결된 CRD를 자동으로 마이그레이션합니다.

MTC 웹 콘솔을 사용하여 애플리케이션을 마이그레이션하는 데는 다음 단계가 포함됩니다.

  1. 모든 클러스터에 Migration Toolkit for Containers Operator를 설치합니다.

    인터넷 액세스가 제한되거나 없는 제한된 환경에서 Migration Toolkit for Containers Operator를 설치할 수 있습니다. 소스 및 대상 클러스터는 상호 액세스 권한 및 미러 레지스트리에 대한 네트워크 액세스 권한이 있어야 합니다.

  2. MTC가 데이터를 마이그레이션하는 데 사용하는 중간 오브젝트 스토리지인 복제 리포지토리를 구성합니다.

    소스 및 대상 클러스터는 마이그레이션 중에 복제 리포지토리에 대한 네트워크 액세스 권한이 있어야 합니다. 제한된 환경에서는 내부 호스팅 S3 스토리지 리포지토리를 사용할 수 있습니다. 프록시 서버를 사용하는 경우 복제 리포지토리와 클러스터 간의 네트워크 트래픽을 허용하도록 해당 서버를 구성해야 합니다.

  3. MTC 웹 콘솔에 소스 클러스터를 추가합니다.
  4. MTC 웹 콘솔에 복제 리포지토리를 추가합니다.
  5. 다음 데이터 마이그레이션 옵션 중 하나를 사용하여 마이그레이션 계획을 생성합니다.

    • 복사: MTC는 소스 클러스터에서 복제 리포지토리로 데이터를 복사하고 복제 리포지토리에서 대상 클러스터로 복사합니다.

      참고

      직접 이미지 마이그레이션 또는 직접 볼륨 마이그레이션을 사용하는 경우 소스 클러스터에서 대상 클러스터로 이미지 또는 볼륨이 직접 복사됩니다.

      마이그레이션 PV 사본
    • 이동: MTC는 소스 클러스터에서 원격 볼륨(예: NFS)을 마운트 해제하고 원격 볼륨을 가리키는 대상 클러스터에 PV 리소스를 생성한 다음 대상 클러스터에 원격 볼륨을 마운트합니다. 대상 클러스터에서 실행되는 애플리케이션은 소스 클러스터와 동일한 원격 볼륨을 사용합니다. 소스 및 대상 클러스터가 원격 볼륨에 액세스할 수 있어야 합니다.

      참고

      이 다이어그램에는 복제 리포지토리가 나타나지 않지만 마이그레이션에는 필수입니다.

      마이그레이션 PV 이동
  6. 다음 옵션 중 하나를 사용하여 마이그레이션 계획을 실행합니다.

    • 단계(선택 사항)는 애플리케이션을 중지하지 않고 데이터를 대상 클러스터에 복사합니다.

      스테이징은 여러 번 실행될 수 있으므로 마이그레이션 전에 대부분의 데이터가 대상에 복사됩니다. 따라서 마이그레이션의 기간과 애플리케이션 다운 타임이 최소화됩니다.

    • 마이그레이션은 소스 클러스터에서 애플리케이션을 중지하고 대상 클러스터에서 해당 리소스를 다시 만듭니다. 선택적으로 애플리케이션을 중지하지 않고 워크로드를 마이그레이션할 수 있습니다.
OCP 3에서 4로의 애플리케이션 마이그레이션

2.1.2. Migration Toolkit for Containers 사용자 정의 리소스

MTC(Migration Toolkit for Containers)는 다음과 같은 사용자 정의 리소스(CR)를 생성합니다.

마이그레이션 아키텍처 다이어그램

20 MigCluster (구성, MTC 클러스터): 클러스터 정의

20 MigStorage (구성, MTC 클러스터): 스토리지 정의

20 MigPlan (구성, MTC 클러스터): 마이그레이션 계획

MigPlan CR은 마이그레이션 중인 소스 및 대상 클러스터, 복제 리포지토리 및 네임스페이스를 설명합니다. 0, 1 또는 많은 MigMigration CR과 연관됩니다.

참고

MigPlan CR을 삭제하면 연결된 MigMigration CR이 삭제됩니다.

20 BackupStorageLocation (구성, MTC 클러스터): Velero 백업 오브젝트의 위치

20 VolumeSnapshotLocation (구성, MTC 클러스터): Velero 볼륨 스냅샷의 위치

20 MigMigration (작업, MTC 클러스터): 데이터를 준비하거나 마이그레이션할 때마다 생성되는 마이그레이션. 각 MigMigration CR은 MigPlan CR과 연결되어 있습니다.

20 백업 (작업, 소스 클러스터): 마이그레이션 계획을 실행할 때 MigMigration CR은 각 소스 클러스터에 두 개의 Velero 백업 CR을 생성합니다.

  • Kubernetes 오브젝트의 백업 CR #1
  • PV 데이터용 백업 CR #2

20 복원 (작업, 대상 클러스터): 마이그레이션 계획을 실행할 때 MigMigration CR은 대상 클러스터에 두 개의 Velero 복원 CR을 생성합니다.

  • PV 데이터에 대한 CR #1 복원(백업 CR #2 사용)
  • Kubernetes 오브젝트에 대한 CR #2 복원(백업 CR #1 사용)

2.1.3. 데이터 복사 방법 정보

Migration Toolkit for Containers(MTC)는 소스 클러스터에서 대상 클러스터로 데이터를 마이그레이션하기 위한 파일 시스템 및 스냅샷 데이터 복사 방법을 지원합니다. 환경에 적합하고 스토리지 공급자가 지원하는 방법을 선택할 수 있습니다.

2.1.3.1. 파일 시스템 복사 방법

MTC는 소스 클러스터에서 복제 리포지토리로 데이터 파일을 복사하고 다시 대상 클러스터로 복사합니다.

표 2.1. 파일 시스템 복사 방법 요약

혜택제한
  • 클러스터는 다른 스토리지 클래스를 보유할 수 있습니다.
  • 모든 S3 스토리지 공급자에 대해 지원됨.
  • 체크섬을 통한 선택적 데이터 확인.
  • 성능이 크게 증가하는 직접 볼륨 마이그레이션을 지원합니다.
  • 스냅샷 복사 방법보다 느림.
  • 선택적 데이터 확인으로 성능이 크게 저하합니다.

2.1.3.2. 스냅샷 복사 방법

MTC는 소스 클러스터 데이터의 스냅샷을 클라우드 공급자의 복제 리포지토리에 복사합니다. 대상 클러스터에서 데이터가 복원됩니다.

AWS, Google Cloud Provider 및 Microsoft Azure는 스냅샷 복사 방법을 지원합니다.

표 2.2. 스냅샷 복사 방법 요약

혜택제한
  • 파일 시스템 복사 방법보다 빠름.
  • 클라우드 공급자는 스냅샷을 지원해야 합니다.
  • 클러스터는 동일한 클라우드 공급자에 있어야 합니다.
  • 클러스터는 동일한 위치 또는 지역에 있어야 합니다.
  • 클러스터는 동일한 스토리지 클래스를 보유해야 합니다.
  • 스토리지 클래스는 스냅샷과 호환 가능해야 합니다.
  • 직접 볼륨 마이그레이션을 지원하지 않습니다.

2.1.3.3. 직접 볼륨 마이그레이션 및 직접 이미지 마이그레이션

직접 이미지 마이그레이션직접 볼륨 마이그레이션을 사용하여 소스 클러스터에서 대상 클러스터로 직접 이미지 및 데이터를 마이그레이션할 수 있습니다.

직접 마이그레이션은 소스 클러스터에서 복제 리포지토리로 파일을 백업하고 복제 리포지토리에서 대상 클러스터로 파일을 복원하는 중간 단계를 뛰어넘기 때문에 상당한 성능 이점을 지닙니다.

직접 마이그레이션은 Rsync를 사용하여 파일을 전송합니다.

참고

직접 이미지 마이그레이션 및 직접 볼륨 마이그레이션에는 추가 사전 요구 사항이 있습니다.

2.1.4. 마이그레이션 후크 정보

MTC(Migration Toolkit for Containers)를 사용하여 마이그레이션하는 동안 특정 시점에서 사용자 정의 코드를 실행하도록 마이그레이션 후크를 사용할 수 있습니다. 마이그레이션의 다른 단계에서 각 후크가 실행되고 단일 마이그레이션 계획에 최대 4개의 마이그레이션 후크를 추가할 수 있습니다.

마이그레이션 후크는 애플리케이션 정지 사용자 정의, 지원되지 않는 데이터 유형을 수동으로 마이그레이션 및 마이그레이션 후 애플리케이션 업데이트와 같은 작업을 수행합니다.

마이그레이션 후크는 다음 마이그레이션 단계 중 하나에서 소스 또는 대상 클러스터에서 실행됩니다.

  • PreBackup: 소스 클러스터에서 리소스를 백업하기 전에
  • PostBackup: 소스 클러스터에서 리소스를 백업한 후
  • PreRestore: 대상 클러스터에서 리소스를 복원하기 전
  • PostRestore: 대상 클러스터에서 리소스가 복원된 후

Ansible 플레이북 또는 사용자 정의 후크 컨테이너를 사용하여 후크를 생성할 수 있습니다.

Ansible 플레이북

Ansible 플레이북은 후크 컨테이너에 구성 맵으로 마운트됩니다. 후크 컨테이너는 MigPlan 사용자 정의 리소스(CR)에 지정된 클러스터, 서비스 계정 및 네임스페이스를 사용하여 작업으로 실행됩니다. 작업은 기본 6번의 재시도 한도에 도달하거나 성공적으로 완료될 때까지 계속 실행됩니다. 이는 초기 포드가 제거되거나 종료된 경우에도 계속됩니다.

기본 Ansible 런타임 이미지는 registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel7:1.4 입니다. 이 이미지는 Ansible Runner 이미지를 기반으로 하며 Ansible Kubernetes 리소스에 대해 python-openshift 및 업데이트된 oc바이너리를 포함합니다.

선택 사항: 기본 이미지 대신 추가 Ansible 모듈 또는 도구가 포함된 사용자 지정 Ansible 런타임 이미지를 사용할 수 있습니다.

사용자 정의 후크 컨테이너

Ansible 플레이북 또는 사용자 정의 코드가 포함된 사용자 정의 후크 컨테이너를 생성할 수 있습니다.