2.4. 애플리케이션 마이그레이션
MTC(Migration Toolkit for Containers) 웹 콘솔을 사용하거나 명령줄에서 애플리케이션을 마이그레이션할 수 있습니다.
2.4.1. 사전 요구 사항
MTC(Migration Toolkit for Containers)에는 다음과 같은 사전 요구 사항이 있습니다.
-
모든 클러스터에서
cluster-admin
권한이 있는 사용자로 로그인합니다. - MTC 버전은 모든 클러스터에서 동일해야 합니다.
클러스터:
- 소스 클러스터를 최신 MTC z-stream 릴리스로 업그레이드해야 합니다.
-
migration-controller
pod가 실행 중인 클러스터는 다른 클러스터에 대한 무제한 액세스 권한이 있어야 합니다. - 클러스터에는 무제한 네트워크 액세스 권한이 있어야 합니다.
- 클러스터에 복제 리포지토리에 대한 무제한 네트워크 액세스 권한이 있어야 합니다.
- 클러스터는 포트 443에서 OpenShift 경로를 사용하여 통신할 수 있어야 합니다.
- 클러스터에 중요한 조건이 없어야 합니다.
- 클러스터가 ready 상태여야 합니다.
볼륨 마이그레이션:
- PV(영구 볼륨)가 유효해야 합니다.
- PV를 영구 볼륨 클레임에 바인딩해야 합니다.
- move 방법을 사용하여 PV를 복사하는 경우 클러스터에 원격 볼륨에 대한 무제한 네트워크 액세스 권한이 있어야 합니다.
스냅샷 복사 방법을 사용하여 PV를 복사하는 경우 다음과 같은 사전 요구 사항이 적용됩니다.
- 클라우드 공급자는 스냅샷을 지원해야 합니다.
- 볼륨에는 동일한 클라우드 프로바이더가 있어야 합니다.
- 볼륨은 동일한 지리적 지역에 있어야 합니다.
- 볼륨에는 동일한 스토리지 클래스가 있어야 합니다.
- 프록시 환경에서 직접 볼륨 마이그레이션을 수행하는 경우 Stunnel TCP 프록시를 구성해야 합니다.
- 직접 이미지 마이그레이션을 수행하는 경우 소스 클러스터의 내부 레지스트리를 외부 트래픽에 노출해야 합니다.
2.4.1.1. CA 인증서 번들 파일 생성
자체 서명 인증서를 사용하여 MTC(Migration Toolkit for Containers)의 클러스터 또는 복제 리포지토리를 보호하는 경우 다음 오류 메시지와 함께 인증서 확인에 실패할 수 있습니다. 알 수 없는 기관에서 서명한 인증서
.
사용자 정의 CA 인증서 번들 파일을 생성하고 클러스터 또는 복제 리포지토리를 추가할 때 MTC 웹 콘솔에 업로드할 수 있습니다.
프로세스
원격 끝점에서 CA 인증서를 다운로드하여 CA 번들 파일로 저장합니다.
$ echo -n | openssl s_client -connect <host_FQDN>:<port> \ 1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <ca_bundle.cert> 2
2.4.1.2. 직접 볼륨 마이그레이션을 위한 프록시 구성
프록시 뒤에서 소스 클러스터에서 직접 볼륨 마이그레이션을 수행하는 경우 MigrationController
사용자 정의 리소스(CR)에서 Stunnel 프록시를 구성해야 합니다. Stunnel은 인증서를 변경하지 않고 TCP 연결을 위해 소스 클러스터와 대상 클러스터 간에 투명 터널을 생성합니다.
직접 볼륨 마이그레이션은 하나의 프록시만 지원합니다. 대상 클러스터가 프록시 뒤에 있는 경우 소스 클러스터는 대상 클러스터의 경로에 액세스할 수 없습니다.
사전 요구 사항
-
모든 클러스터에서
cluster-admin
권한이 있는 사용자로 로그인합니다.
절차
-
MigrationController
Pod가 실행되는 클러스터에 로그인합니다. MigrationController
CR 매니페스트를 가져옵니다.$ oc get migrationcontroller <migration_controller> -n openshift-migration
stunnel_tcp_proxy
매개변수를 추가합니다.apiVersion: migration.openshift.io/v1alpha1 kind: MigrationController metadata: name: migration-controller namespace: openshift-migration ... spec: stunnel_tcp_proxy: <stunnel_proxy> 1
- 1
- Stunnel 프록시를 지정합니다.
http://<user_name>:<password>@<ip_address>:<port>
-
매니페스트를
migration-controller.yaml
로 저장합니다. 업데이트된 매니페스트를 적용합니다.
$ oc replace -f migration-controller.yaml -n openshift-migration
2.4.1.3. 마이그레이션 후크의 Ansible 플레이북 작성
마이그레이션 후크로 사용할 Ansible 플레이북을 작성할 수 있습니다. MTC 웹 콘솔을 사용하거나 MigPlan
사용자 정의 리소스(CR) 매니페스트에서 spec.hooks
매개변수의 값을 지정하여 후크가 마이그레이션 계획에 추가됩니다.
Ansible 플레이북은 후크 컨테이너에 구성 맵으로 마운트됩니다. 후크 컨테이너는 MigPlan
CR에 지정된 클러스터, 서비스 계정 및 네임스페이스를 사용하여 작업으로 실행됩니다. 후크 컨테이너는 클러스터에서 실행되기 전에 작업에 인증이 필요하지 않도록 지정된 서비스 계정 토큰을 사용합니다.
2.4.1.3.1. Ansible 모듈
Ansible shell
모듈을 사용하여 oc
명령을 실행할 수 있습니다.
shell
모듈 예
- hosts: localhost gather_facts: false tasks: - name: get pod name shell: oc get po --all-namespaces
k8s_info
와 같은 kubernetes.core
모듈을 사용하여 Kubernetes 리소스와 상호 작용할 수 있습니다.
k8s_facts
모듈 예
- hosts: localhost gather_facts: false tasks: - name: Get pod k8s_info: kind: pods api: v1 namespace: openshift-migration name: "{{ lookup( 'env', 'HOSTNAME') }}" register: pods - name: Print pod name debug: msg: "{{ pods.resources[0].metadata.name }}"
fail
모듈을 사용하여 0이 아닌 종료 상태가 정상적으로 생성되지 않는 경우 후크의 성공 또는 실패 여부를 확인할 수 있습니다. 후크는 작업으로 실행되며 후크의 성공 또는 실패 상태는 작업 컨테이너의 종료 상태를 기반으로 합니다.
fail
모듈 예
- hosts: localhost gather_facts: false tasks: - name: Set a boolean set_fact: do_fail: true - name: "fail" fail: msg: "Cause a failure" when: do_fail
2.4.1.3.2. 환경 변수
MigPlan
CR 이름과 마이그레이션 네임스페이스는 환경 변수로 후크 컨테이너에 전달됩니다. 이러한 변수는 lookup
플러그인을 사용하여 액세스할 수 있습니다.
환경 변수 예
- hosts: localhost gather_facts: false tasks: - set_fact: namespaces: "{{ (lookup( 'env', 'migration_namespaces')).split(',') }}" - debug: msg: "{{ item }}" with_items: "{{ namespaces }}" - debug: msg: "{{ lookup( 'env', 'migplan_name') }}"