컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

구성 컨트롤러 리소스 마이그레이션

이 페이지에서는 구성 컨트롤러 클러스터 하나에서 다른 구성 컨트롤러 클러스터로 구성 커넥터 리소스를 마이그레이션하는 방법을 설명합니다. 기본 구성 컨트롤러 클러스터가 실패하여 바꿔야 하는 경우 또는 변경할 수 없는 클러스터 구성을 변경해야 하는 경우에는 리소스를 마이그레이션해야 할 수 있습니다.

이 페이지에서는 다음 용어를 사용합니다.

  • 소스 클러스터: 마이그레이션해야 하는 구성 커넥터 리소스가 포함된 클러스터입니다.
  • 대상 클러스터: 리소스를 마이그레이션할 클러스터입니다.

권장사항

  • 프로덕션 환경에서 변경하기 전에 테스트 환경에서 다음 단계를 완료합니다.
  • 구성 컨트롤러 클러스터를 여러 개 마이그레이션해야 하는 경우 중요도가 가장 낮은 클러스터부터 개별적으로 마이그레이션합니다.
  • 구성 동기화 클러스터가 여러 저장소에서 동기화되는 경우 각 저장소의 모든 리소스를 한 번에 마이그레이션합니다.

여러 시나리오의 마이그레이션 단계

모든 리소스 마이그레이션

모든 리소스를 마이그레이션하려면 다음 단계를 완료합니다.

  1. 대상 클러스터를 만듭니다.

  2. 소스 클러스터가 동기화되도록 구성된 Git 저장소로 변경사항 푸시를 중지합니다. 구성 동기화는 저장소에서 계속 동기화되어야 합니다. 소스 클러스터에서 동기화하는 Git 분기에 대한 변경사항만 중지해야 합니다.

  3. Git 저장소에 대한 최근 변경사항이 클러스터에서 동기화되었고 모든 리소스가 소스 클러스터에서 최신 상태인지 확인합니다.

    일부 리소스에 오류가 있으면 리소스를 개별적으로 분석해야 할 수 있습니다. 오류로 인해 리소스가 아직 생성되지 않았으면 나중에 대상 클러스터에서 실행 중인 구성 커넥터를 통해 생성됩니다. 이러한 오류는 일반적으로 무시해도 됩니다. 그러나 대부분의 오류에서는 마이그레이션을 시도하기 전에 근본 원인을 찾고 수정해야 합니다.

  4. 소스 클러스터가 구성된 동일한 저장소에서 읽도록 대상 클러스터에 구성 동기화를 설정합니다. 여러 동기화가 저장소 두 개 이상에서 동기화하도록 설정된 경우 동기화마다 이 작업을 수행합니다.

  5. nomos status 명령어를 사용하여 대상 클러스터가 Git 저장소의 모든 리소스를 동기화했는지 확인합니다.

  6. 리소스가 동기화되었으면 소스 클러스터에서 RepoSync를 삭제합니다.

  7. 모든 저장소 동기화가 마이그레이션된 후에 소스 구성 컨트롤러 클러스터를 삭제합니다.

일부 리소스 마이그레이션

일부 리소스를 마이그레이션하려면 다음 단계를 완료합니다.

  1. 앞선 모든 리소스 마이그레이션 섹션의 1~6단계를 완료합니다.

  2. 대상 클러스터로 마이그레이션해야 하는 리소스에 cnrm.cloud.google.com/deletion-policy: abandon 주석을 표시합니다. 이 주석은 구성 컨트롤러 클러스터에서 구성 커넥터 리소스가 삭제될 때 구성 커넥터에서 기본 리소스를 삭제하지 않도록 합니다.

  3. 소스 클러스터에서 폐기된 것으로 표시된 리소스를 삭제합니다. 이 삭제는 구성 동기화를 다시 시작하기 전에 Git 저장소에서 이러한 리소스가 삭제된 경우에만 작동합니다.

  4. 이러한 리소스를 다른 Git 저장소나 같은 저장소 내 다른 폴더로 이동합니다.

  5. 리소스를 이동한 위치에서 동기화할 대상 클러스터를 설정합니다. 이제 대상 클러스터가 이러한 리소스를 가져와서 관리할 수 있습니다.

개별 리소스 마이그레이션

구성 컨트롤러 클러스터를 삭제할 수 없는 경우(예: 리소스의 하위 집합을 다른 클러스터로만 마이그레이션하는 경우)에 개별 리소스를 삭제할 수 있습니다. 개별 리소스를 삭제하려면 구성 동기화를 중지한 후 삭제해야 하는 개별 리소스에 cnrm.cloud.google.com/deletion-policy: abandon 주석을 설정합니다.

서비스로 생성된 resourceID가 있는 리소스 마이그레이션

resourceID 필드가 명시적으로 제공되지 않은 리소스의 경우 다른 구성 커넥터 인스턴스에서 리소스를 가져오기 위해 resourceID를 지정하지 않아도 됩니다. 하지만 추가 단계가 필요한 서비스로 생성된 리소스 ID가 있는 리소스가 있습니다. resourceID가 서비스로 생성되더라도 다른 구성 커넥터 인스턴스에서 이러한 리소스를 가져오려면 제공해야 합니다. 이러한 리소스의 경우 대상 클러스터에서 리소스를 가져오려고 하기 전 Git 저장소에 resourceID를 추가해야 합니다.

충돌 방지 정책을 사용하여 리소스 마이그레이션

기본적으로 리소스에는 충돌 방지 정책이 중지되어 있습니다. 다음 주석을 설정하여 리소스에서 사용 설정할 수 있습니다.

cnrm.cloud.google.com/management-conflict-prevention-policy: "resource"

한번 설정된 다음에는 구성 커넥터가 기본 리소스에 대해 임대를 획득해야만 이를 변경할 수 있습니다. 즉, 임대가 소스 클러스터의 구성 커넥터에 있으므로 대상 클러스터가 임대를 즉시 획득할 수 없습니다. 40분 동안 임대가 부여됩니다. 하지만 20분 후에는 구성 커넥터에서 임대 갱신을 사전에 시도합니다. 이 동작으로 인해 소스 클러스터의 구성 커넥터가 정상이고 실행 중이면 대상 클러스터에서 임대를 획득할 수 없습니다. 대상 클러스터에서 임대를 획득하려면 먼저 소스 클러스터가 임대를 해제해야 합니다. 이렇게 하려면 소스 클러스터를 삭제하거나 소스 클러스터에서 리소스를 삭제하면 됩니다.

소스 클러스터에서 임대를 해제하면 대상 클러스터가 임대를 획득할 수 있습니다. 대상 클러스터는 최대 40분 후에 임대를 획득하고 리소스를 관리할 수 있습니다. 대상 클러스터에서 임대를 획득할 때까지 구성 커넥터 리소스를 변경할 수 없습니다.

다음 단계