3.5.4. 더 이상 사용되지 않는 API 업데이트

소스 클러스터에서 더 이상 사용되지 않는 API를 사용하는 경우 MTC(Migration Toolkit for Containers) 웹 콘솔에서 마이그레이션 계획을 생성할 때 다음 경고 메시지가 표시됩니다.

Some namespaces contain GVKs incompatible with destination cluster

세부 사항 보기를 클릭하여 네임스페이스 및 호환되지 않는 API를 볼 수 있습니다. 이 경고 메시지는 마이그레이션을 차단하지 않습니다.

MTC(Migration Toolkit for Containers)를 사용하여 마이그레이션하는 동안 더 이상 사용되지 않는 API는 Kubernetes 오브젝트의 Velero Backup #1에 저장됩니다. Velero Backup을 다운로드하고, 더 이상 사용되지 않는 API yaml 파일을 추출한 후 oc convert 명령으로 업데이트할 수 있습니다. 그런 다음 대상 클러스터에서 업데이트된 API를 생성할 수 있습니다.

프로세스

  1. 마이그레이션 계획을 실행합니다.
  2. MigPlan 사용자 정의 리소스 (CR)를 확인합니다.

    $ oc describe migplan <migplan_name> -n openshift-migration 1
    1
    MigPlan CR의 이름을 지정합니다.

    출력은 다음과 유사합니다.

    metadata:
      ...
      uid: 79509e05-61d6-11e9-bc55-02ce4781844a 1
    status:
      ...
      conditions:
      - category: Warn
        lastTransitionTime: 2020-04-30T17:16:23Z
        message: 'Some namespaces contain GVKs incompatible with destination cluster.
          See: `incompatibleNamespaces` for details'
        status: "True"
        type: GVKsIncompatible
      incompatibleNamespaces:
      - gvks: 2
        - group: batch
          kind: cronjobs
          version: v2alpha1
        - group: batch
          kind: scheduledjobs
          version: v2alpha1
    1
    MigPlan CR UID를 기록합니다.
    2
    gvks 섹션에 나열된 더 이상 사용되지 않는 API를 기록합니다.
  3. MigPlan UID와 관련된 MigMigration 이름을 가져옵니다.

    $ oc get migmigration -o json | jq -r '.items[] | select(.metadata.ownerReferences[].uid=="<migplan_uid>") | .metadata.name' 1
    1
    MigPlan CR UID를 지정합니다.
  4. MigMigration 이름과 연관된 MigMigration UID를 가져옵니다.

    $ oc get migmigration <migmigration_name> -o jsonpath='{.metadata.uid}' 1
    1
    MigMigration 이름을 지정합니다.
  5. MigMigration UID와 관련된 Velero Backup 이름을 가져옵니다.

    $ oc get backup.velero.io --selector migration-initial-backup="<migmigration_uid>" -o jsonpath={.items[*].metadata.name} 1
    1
    MigMigration UID를 지정합니다.
  6. 스토리지 공급자의 명령을 실행하여 Velero Backup의 콘텐츠를 로컬 머신으로 다운로드합니다.

    • AWS S3:

      $ aws s3 cp s3://<bucket_name>/velero/backups/<backup_name> <backup_local_dir> --recursive 1
      1
      버킷, 백업 이름 및 로컬 백업 디렉터리 이름을 지정합니다.
    • GCP:

      $ gsutil cp gs://<bucket_name>/velero/backups/<backup_name> <backup_local_dir> --recursive 1
      1
      버킷, 백업 이름 및 로컬 백업 디렉터리 이름을 지정합니다.
    • Azure:

      $ azcopy copy 'https://velerobackups.blob.core.windows.net/velero/backups/<backup_name>' '<backup_local_dir>' --recursive 1
      1
      백업 이름과 로컬 백업 디렉터리 이름을 지정합니다.
  7. Velero Backup 아카이브 파일을 추출합니다.

    $ tar -xfv <backup_local_dir>/<backup_name>.tar.gz -C <backup_local_dir>
  8. 더 이상 사용되지 않는 각 API의 오프라인 모드에서 oc convert를 실행합니다.

    $ oc convert -f <backup_local_dir>/resources/<gvk>.json
  9. 대상 클러스터에서 변환된 API를 생성합니다.

    $ oc create -f <gvk>.json