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"
spec:
src_supplemental_groups: "1000,2000"
target_supplemental_groups: "2000,3000"
8.2.1.2. rsync 재시도 구성 링크 복사링크가 클립보드에 복사되었습니다!
MTC(Migration Toolkit for Containers) 1.4.3 이상에서는 실패한 Rsync 작업을 다시 시도할 수 있는 새로운 기능이 도입되었습니다.
기본적으로 마이그레이션 컨트롤러는 모든 데이터가 소스에서 대상 볼륨으로 전송되거나 지정된 재시도 횟수가 충족될 때까지 Rsync를 다시 시도합니다. 기본 재시도 제한은 20
으로 설정됩니다.
볼륨이 큰 경우 재시도 횟수가 20
회로 제한되어 있기 때문에 충분하지 않을 수 있습니다.
MigrationController
CR에서 다음 변수를 사용하여 재시도 제한을 늘릴 수 있습니다.
이 예에서는 재시도 제한이 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를 루트로 실행합니다.
두 경우 모두 마이그레이션하기 전에 권한이 높은 워크로드를 실행하는 네임스페이스의 소스 측에 다음 레이블을 설정해야 합니다. 즉, enforce
, audit
, warn
을 적용합니다.
8.2.1.3.2. Pod 보안 승인 정보 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에는 Kubernetes Pod 보안 승인이 포함됩니다. 전역적으로 정의되거나 네임스페이스 수준에서 정의되지 않은 Pod 보안 승인은 클러스터에 허용되지 않으며 실행할 수 없습니다.
전역적으로 privileged
있는 프로필이 적용되며, restricted
프로필은 경고 및 감사에 사용됩니다.
네임스페이스 수준에서 Pod 보안 승인 설정을 구성할 수도 있습니다.
기본 프로젝트에서 워크로드를 실행하거나 기본 프로젝트에 대한 액세스를 공유하지 마세요. 기본 프로젝트는 핵심 클러스터 구성 요소를 실행하기 위해 예약되어 있습니다.
다음 기본 프로젝트는 높은 권한이 있는 것으로 간주됩니다. default
, kube-public
, kube-system
, openshift
, openshift-infra
, openshift-node
및 openshift.io/run-level
레이블이 0
또는 1
로 설정된 기타 시스템 생성 프로젝트입니다. Pod 보안 승인, 보안 컨텍스트 제약 조건, 클러스터 리소스 할당량 및 이미지 참조 확인과 같은 승인 플러그인에 의존하는 기능은 높은 권한 있는 프로젝트에서 작동하지 않습니다.
8.2.1.3.2.1. Pod 보안 승인 모드 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스에 대해 다음 Pod 보안 승인 모드를 구성할 수 있습니다.
모드 | 레이블 | 설명 |
---|---|---|
|
| 설정된 프로필을 준수하지 않는 경우 허용에서 Pod를 거부합니다. |
|
| Pod가 설정된 프로필을 준수하지 않는 경우 감사 이벤트 로그 |
|
| Pod가 설정된 프로필을 준수하지 않는 경우 경고 표시 |
8.2.1.3.2.2. Pod 보안 승인 프로필 링크 복사링크가 클립보드에 복사되었습니다!
각 Pod 보안 승인 모드를 다음 프로필 중 하나로 설정할 수 있습니다.
프로필 | 설명 |
---|---|
| 최소 제한 정책; 알려진 권한 에스컬레이션 허용 |
| 최소한의 제한 정책; 알려진 권한 에스컬레이션을 방지 |
| 가장 제한적인 정책; 현재 Pod 강화 모범 사례를 따릅니다. |
8.2.1.3.2.3. 권한이 있는 네임스페이스 링크 복사링크가 클립보드에 복사되었습니다!
다음 시스템 네임스페이스는 항상 privileged
있는 Pod 보안 승인 프로필로 설정됩니다.
-
default
-
kube-public
-
kube-system
이러한 권한 있는 네임스페이스의 Pod 보안 프로필을 변경할 수 없습니다.
권한 있는 네임스페이스 구성의 예
8.2.1.3.3. 모든 마이그레이션에 대해 MigrationController CR을 루트 또는 루트가 아닌 사용자로 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Rsync는 루트가 아닌 상태로 실행됩니다.
대상 클러스터에서 Rsync를 루트로 실행하도록 MigrationController
CR을 구성할 수 있습니다.
프로세스
다음과 같이
MigrationController
CR을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 구성은 향후 모든 마이그레이션에 적용됩니다.
8.2.1.3.4. MigMigration CR을 마이그레이션당 루트 또는 루트가 아닌 사용자로 구성 링크 복사링크가 클립보드에 복사되었습니다!
대상 클러스터에서 다음과 같은 루트가 아닌 옵션을 사용하여 Rsync를 루트 또는 루트가 아닌 사용자로 실행하도록 MigMigration
CR을 구성할 수 있습니다.
- 특정 사용자 ID(UID)
- 특정 그룹 ID(GID)
프로세스
Rsync를 루트로 실행하려면 다음 예에 따라
MigMigration
CR을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rsync를 특정 UID(User ID) 또는 특정 그룹 ID(GID)로 실행하려면 다음 예에 따라
MigMigration
CR을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2.2. MigCluster 설정 링크 복사링크가 클립보드에 복사되었습니다!
MTC(Migration Toolkit for Containers)에서 생성된 모든 MigCluster
리소스에 대해 MigCluster 리소스가 나타내는 클러스터의 Migration Operator 네임스페이스에 migration-cluster-config
라는 ConfigMap
이 생성됩니다.
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) |