8.2. 직접 볼륨 마이그레이션을 위한 rsync 구성
MTC의 직접 볼륨 마이그레이션(DVM)은 두 PV 간의 직접 연결을 사용하여 소스와 대상 PV(영구 볼륨) 간에 파일을 동기화하는 Rsync를 사용합니다.
rsync는 파일과 디렉터리를 로컬 및 원격 대상으로 전송할 수 있는 명령줄 도구입니다.
DVM에서 사용하는 rsync
명령은 예상대로 작동하는 클러스터에 최적화되어 있습니다.
MigrationController
CR은 다음 변수를 노출하여 직접 볼륨 마이그레이션에서 rsync_options
를 구성합니다.
Variable | 유형 | 기본값 | 설명 |
---|---|---|---|
| int | 설정되지 않음 |
양의 정수로 설정하면 |
| bool |
|
Rsync 명령에서 |
| bool |
|
Rsync 명령에 |
| bool |
|
Rsync 명령에 |
| bool |
|
|
| string |
| Rsync Pod에서 자세한 로깅을 활성화합니다. |
| string | 빈 | 임의의 다른 옵션에 대해 예약되어 있습니다. |
-
위의 변수를 통해 설정된 옵션을 설정하는 것은 모든 마이그레이션에 대해 전역 적입니다. Operator가
MigrationController
CR을 성공적으로 조정하면 향후 모든 마이그레이션에 구성이 적용됩니다. 진행 중인 마이그레이션은 현재 어떤 단계에 있는지에 따라 업데이트된 설정을 사용할 수 있습니다. 따라서 마이그레이션을 실행하기 전에 설정을 적용하는 것이 좋습니다. 사용자는 필요에 따라 항상 설정을 업데이트할 수 있습니다. -
rsync_opt_extras
변수를 주의해서 사용합니다. 이 변수를 사용하여 전달되는 모든 옵션은rsync
명령에 추가됩니다. 두 개 이상의 옵션을 지정할 때 공백을 추가해야 합니다. 옵션을 지정할 때 오류가 발생하면 마이그레이션에 실패할 수 있습니다. 그러나 향후 마이그레이션에 필요한 만큼MigrationController
CR을 업데이트할 수 있습니다. -
rsync_opt_info
플래그를 사용자 정의하면 MTC의 진행 상황 보고 기능에 부정적인 영향을 미칠 수 있습니다. 그러나 진행률 보고를 제거하면 성능 이점이 있을 수 있습니다. 이 옵션은 Rsync 작업의 성능이 허용되지 않는 것으로 관찰되는 경우에만 사용해야 합니다.
DVM에서 사용하는 기본 구성은 다양한 환경에서 테스트됩니다. 클러스터가 정상이고 제대로 작동하는 경우 대부분의 프로덕션 사용 사례에 허용됩니다. 기본 설정이 작동하지 않고 Rsync 작업이 실패하는 경우 이러한 구성 변수를 사용해야 합니다.
8.2.1. Rsync Pod의 리소스 제한 구성
MigrationController
CR은 다음 변수를 노출하여 Rsync에 대한 리소스 사용 요구 사항 및 제한을 구성합니다.
Variable | 유형 | Default | 설명 |
---|---|---|---|
| string |
| 소스 rsync Pod의 CPU 제한 |
| string |
| 소스 rsync Pod의 메모리 제한 |
| string |
| 소스 rsync Pod의 cpu 요청 |
| string |
| 소스 rsync Pod의 메모리 요청 |
| string |
| 대상 rsync Pod의 cpu 제한 |
| string |
| 대상 rsync Pod의 cpu 요청 |
| string |
| 대상 rsync Pod의 메모리 제한 |
| string |
| 대상 rsync Pod의 메모리 요청 |
8.2.1.1. Rsync Pod에 대한 추가 그룹 구성
PVC(영구 볼륨 클레임)에서 공유 스토리지를 사용하는 경우 Pod에서 액세스를 허용하기 위해 Rsync Pod 정의에 추가 그룹을 추가하여 스토리지에 대한 액세스를 구성할 수 있습니다.
Variable | 유형 | Default | 설명 |
---|---|---|---|
| string | 설정되지 않음 | 소스 Rsync Pod에 대한 쉼표로 구분된 추가 그룹 목록 |
| string | 설정되지 않음 | 대상 Rsync Pod에 대한 쉼표로 구분된 추가 그룹 목록 |
예를 들어 MigrationController
CR을 업데이트하여 이전 값을 설정할 수 있습니다.
spec: src_supplemental_groups: "1000,2000" target_supplemental_groups: "2000,3000"
8.2.1.2. rsync 재시도 구성
MTC 1.4.3 이상에서는 실패한 Rsync 작업을 다시 시도할 수 있는 새로운 기능이 도입되었습니다.
기본적으로 마이그레이션 컨트롤러는 모든 데이터가 소스에서 대상 볼륨으로 전송되거나 지정된 재시도 횟수가 충족될 때까지 Rsync를 다시 시도합니다. 기본 재시도 제한은 20
으로 설정됩니다.
대규모 볼륨의 경우 재시도 횟수 제한이
충분하지 않을 수 있습니다.
MigrationController
CR에서 다음 변수를 사용하여 재시도 제한을 늘릴 수 있습니다.
apiVersion: migration.openshift.io/v1alpha1 kind: MigrationController metadata: name: migration-controller namespace: openshift-migration spec: [...] rsync_backoff_limit: 40
이 예에서는 재시도 제한이 40
으로 증가했습니다.
8.2.1.3. Rsync를 루트 또는 루트가 아닌 사용자로 실행
OpenShift Container Platform 환경에는 기본적으로 PodSecurityAdmission
컨트롤러가 활성화되어 있습니다. 이 컨트롤러를 사용하려면 클러스터 관리자가 네임스페이스 레이블을 통해 Pod 보안 표준을 적용해야 합니다. 클러스터의 모든 워크로드는 Privileged
,Baseline
또는 Restricted
의 Pod 보안 표준 수준 중 하나를 실행해야 합니다. 모든 클러스터에는 자체 기본 정책 세트가 있습니다.
모든 환경에서 데이터 전송을 성공적으로 수행하기 위해 MTC(Migration Toolkit for Containers) 1.ECDHE에서는 기본적으로 Rsync Pod를 루트가 아닌 사용자로 실행하는 등 Rsync Pod에 변경 사항을 도입했습니다. 이렇게 하면 더 높은 권한이 필요하지 않은 워크로드에도 데이터 전송이 가능합니다. 이러한 변경은 가능한 한 가장 낮은 수준의 권한으로 워크로드를 실행하는 것이 가장 좋기 때문에 이루어졌습니다.
8.2.1.3.1. 데이터 전송을 위해 루트가 아닌 기본 작업을 수동으로 덮어쓰기
대부분의 경우 Rsync Pod를 루트가 아닌 사용자로 실행해도 소스 측에서 워크로드를 루트 사용자로 실행할 때 데이터 전송이 실패할 수 있습니다. MTC는 데이터 전송을 위해 루트가 아닌 기본 작업을 수동으로 재정의하는 두 가지 방법을 제공합니다.
- 모든 마이그레이션에 대해 대상 클러스터에서 Rsync Pod를 루트로 실행하도록 모든 마이그레이션을 구성합니다.
- 마이그레이션당 대상 클러스터에서 Rsync Pod를 루트로 실행합니다.
두 경우 모두 마이그레이션 전에 더 높은 권한으로 워크로드를 실행하는 네임스페이스의 소스 측에 다음 레이블을 설정해야 합니다(실행,감사
, 경고).
Pod Security Admission and setting values for labels에 대한 자세한 내용은 Pod 보안 승인 동기화 제어를 참조하십시오.
8.2.1.3.2. 모든 마이그레이션에 대해 MigrationController CR을 루트 또는 루트가 아닌 사용자로 구성
기본적으로 Rsync는 루트가 아닌 상태로 실행됩니다.
대상 클러스터에서 Rsync를 루트로 실행하도록 MigrationController
CR을 구성할 수 있습니다.
프로세스
다음과 같이
MigrationController
CR을 구성합니다.apiVersion: migration.openshift.io/v1alpha1 kind: MigrationController metadata: name: migration-controller namespace: openshift-migration spec: [...] migration_rsync_privileged: true
이 구성은 향후 모든 마이그레이션에 적용됩니다.
8.2.1.3.3. MigMigration CR을 마이그레이션당 루트 또는 루트가 아닌 사용자로 구성
대상 클러스터에서 다음과 같은 루트가 아닌 옵션을 사용하여 Rsync를 루트 또는 루트가 아닌 사용자로 실행하도록 MigMigration
CR을 구성할 수 있습니다.
- 특정 사용자 ID(UID)
- 특정 그룹 ID(GID)
프로세스
Rsync를 루트로 실행하려면 다음 예에 따라
MigMigration
CR을 구성합니다.apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: migration-controller namespace: openshift-migration spec: [...] runAsRoot: true
Rsync를 특정 UID(User ID) 또는 특정 그룹 ID(GID)로 실행하려면 다음 예에 따라
MigMigration
CR을 구성합니다.apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: migration-controller namespace: openshift-migration spec: [...] runAsUser: 10010001 runAsGroup: 3
8.2.2. MigCluster 설정
MTC에서 생성된 모든 MigCluster
리소스에 대해 migration-cluster-config
라는 ConfigMap
은 MigCluster 리소스가 나타내는 클러스터의 Migration Operator 네임스페이스에 생성됩니다.
migration-cluster-config
를 사용하면 MigCluster 특정 값을 구성할 수 있습니다. Migration Operator는 migration-cluster-config
를 관리합니다.
MigrationController
CR에 노출된 변수를 사용하여 ConfigMap
의 모든 값을 구성할 수 있습니다.
Variable | 유형 | 필수 항목 | 설명 |
---|---|---|---|
| string | 없음 | Pod 단계에 사용할 이미지(IndirectVolumeMigration에만 적용 가능) |
| string | 없음 | 마이그레이션 레지스트리에 사용할 이미지 |
| string | 없음 |
데이터 전송을 위한 끝점 유형( |
| string | 없음 | Rsync Pod에 사용할 이미지( DirectVolumeMigration에만 적용 가능) |
| bool | 없음 | Rsync Pod를 권한 있는 것으로 실행할지 여부 |
| bool | 없음 |
Rsync Pod를 슈퍼 권한 있는 컨테이너로 실행할지 여부( |
| string | 없음 | 클러스터의 하위 도메인 |
| int | 없음 | 마이그레이션 레지스트리 배포를 위한 준비 시간 제한(초) |
| int | 없음 | 마이그레이션 레지스트리 배포를 위한 활성 제한 시간(초) |
| string | 없음 | MigCluster에서 노출된 레지스트리의 유효성을 검사하는 하위 경로(예: /v2) |