Trident Protect를 사용하여 애플리케이션을 복원합니다
Trident Protect를 사용하여 스냅샷 또는 백업에서 애플리케이션을 복원할 수 있습니다. 애플리케이션을 동일한 클러스터로 복구할 경우 기존 스냅샷에서 복구하는 속도가 빨라집니다.
Application Restore 시 해당 Application에 설정된 모든 execution hook이 App으로 복구된다. 복원 후 실행 후크가 있는 경우 복구 작업의 일부로 자동으로 실행됩니다. |
복원 및 페일오버 작업 중 네임스페이스 주석 및 레이블
복원 및 페일오버 작업 중에 대상 네임스페이스의 레이블과 주석이 소스 네임스페이스의 레이블 및 주석과 일치하도록 만듭니다. 대상 네임스페이스에 없는 소스 네임스페이스의 레이블 또는 주석이 추가되고 이미 존재하는 모든 레이블 또는 주석이 소스 네임스페이스의 값과 일치하도록 덮어쓰여집니다. 대상 네임스페이스에만 있는 레이블이나 주석은 변경되지 않습니다.
RedHat OpenShift를 사용하는 경우 OpenShift 환경에서 네임스페이스 주석의 중요한 역할을 주목해야 합니다. 네임스페이스 주석을 사용하면 복원된 Pod가 OpenShift SCC(Security Context Constraint)에서 정의한 적절한 권한 및 보안 구성을 준수하고 권한 문제 없이 볼륨에 액세스할 수 있습니다. 자세한 내용은 를 "OpenShift 보안 컨텍스트 제약 조건 문서"참조하십시오. |
복원 또는 페일오버 작업을 수행하기 전에 Kubernetes 환경 변수를 설정하여 타겟 네임스페이스의 특정 주석을 덮어쓰지 않도록 할 수 있습니다 RESTORE_SKIP_NAMESPACE_ANNOTATIONS
. 예를 들면 다음과 같습니다.
kubectl set env -n trident-protect deploy/trident-protect-controller-manager RESTORE_SKIP_NAMESPACE_ANNOTATIONS=<annotation_key_to_skip_1>,<annotation_key_to_skip_2>
플래그가 있는 Helm을 사용하여 소스 애플리케이션을 설치한 경우 --create-namespace
레이블 키에 특수 치료가 name
제공됩니다. 복구 또는 페일오버 프로세스 중에 Trident Protect는 이 레이블을 대상 네임스페이스에 복제하지만 소스의 값이 소스 네임스페이스와 일치하면 대상 네임스페이스 값으로 업데이트합니다. 이 값이 소스 네임스페이스와 일치하지 않으면 변경 없이 대상 네임스페이스로 복사됩니다.
예
다음 예제에서는 각각 다른 주석과 레이블이 있는 소스 및 대상 네임스페이스를 보여 줍니다. 작업 전후에 대상 네임스페이스의 상태와 대상 네임스페이스에서 주석과 레이블이 결합되거나 덮어써지는 방법을 확인할 수 있습니다.
복구 또는 페일오버 작업 전
다음 표에서는 복구 또는 페일오버 작업 이전의 예제 소스 및 대상 네임스페이스의 상태를 보여 줍니다.
네임스페이스 | 주석 | 라벨 |
---|---|---|
네임스페이스 ns-1(소스) |
|
|
네임스페이스 ns-2(대상) |
|
|
복구 작업 후
다음 표에서는 복구 또는 페일오버 작업 후의 예제 대상 네임스페이스의 상태를 보여 줍니다. 일부 키가 추가되고, 일부 키가 덮어쓰여졌으며, name
대상 네임스페이스와 일치하도록 레이블이 업데이트되었습니다.
네임스페이스 | 주석 | 라벨 |
---|---|---|
네임스페이스 ns-2(대상) |
|
|
백업에서 다른 네임스페이스로 복원합니다
BackupRestore CR을 사용하여 다른 네임스페이스로 백업을 복원할 경우 Trident Protect는 새 네임스페이스에서 응용 프로그램을 복원하지만 복원된 응용 프로그램은 Trident Protect로 자동으로 보호되지 않습니다. 복원된 응용 프로그램을 보호하려면 복원된 응용 프로그램에 대해 Trident Protect로 보호되도록 응용 프로그램 CR을 만들어야 합니다.
기존 리소스가 있는 다른 네임스페이스로 백업을 복원해도 백업의 리소스와 이름을 공유하는 리소스는 변경되지 않습니다. 백업의 모든 리소스를 복구하려면 타겟 네임스페이스를 삭제하고 다시 생성하거나 백업을 새 네임스페이스로 복원하십시오. |
-
CR(사용자 정의 리소스) 파일을 만들고 이름을 `trident-protect-backup-restore-cr.yaml`지정합니다.
-
생성한 파일에서 다음 속성을 구성합니다.
-
metadata.name: (required) 이 사용자 정의 리소스의 이름입니다. 사용자 환경에 맞는 고유하고 합리적인 이름을 선택하십시오.
-
* spec.appArchivePath * : 백업 컨텐츠가 저장되는 AppVault 내부의 경로입니다. 다음 명령을 사용하여 이 경로를 찾을 수 있습니다.
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
* spec.appVaultRef *: (required) 백업 내용이 저장된 AppVault의 이름입니다.
-
spec.namespaceMapping: 복구 작업의 소스 네임스페이스를 대상 네임스페이스에 매핑하는 것입니다.
my-source-namespace`및 를 `my-destination-namespace
사용자 환경의 정보로 바꿉니다. -
spec.storageClassMapping: 복원 작업의 소스 스토리지 클래스를 대상 스토리지 클래스로 매핑하는 것입니다.
destinationStorageClass`및 를 `sourceStorageClass
사용자 환경의 정보로 바꿉니다.apiVersion: protect.trident.netapp.io/v1o kind: BackupRestore metadata: name: my-cr-name namespace: my-destination-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(선택 사항) 복원할 응용 프로그램의 특정 리소스만 선택해야 하는 경우 특정 레이블로 표시된 리소스를 포함하거나 제외하는 필터링을 추가합니다.
-
resourceFilter.resourceSelectionCriteria:(필터링에 필요)
include or exclude
resourceMatchers에 정의된 리소스를 포함하거나 제외하는 데 사용합니다. 다음 resourceMatchers 매개 변수를 추가하여 포함하거나 제외할 리소스를 정의합니다.-
resourceFilter.resourceMatchers: resourceMatcher 개체의 배열입니다.
-
resourceMatchers[].group:(Optional) 필터링할 리소스의 그룹입니다.
-
* resourceMatchers [].kind *: (Optional) 필터링할 리소스의 종류입니다.
-
resourceMatchers [ ].version: (Optional) 필터링할 리소스의 버전입니다.
-
resourceMatchers[].names:(Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 이름입니다.
-
*resourceMatchers [].namespaces *: (Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 네임스페이스입니다.
-
resourceMatchers [ ].labelSelectors: (Optional) 에 정의된 대로 리소스의 Kubernetes metadata.name 필드에 있는 레이블 선택기 문자열입니다. "Kubernetes 문서" 예를 들면 다음과 `"trident.netapp.io/os=linux"`같습니다.
예를 들면 다음과 같습니다.
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
파일을 올바른 값으로 채운 후
trident-protect-backup-restore-cr.yaml
CR:kubectl apply -f trident-protect-backup-restore-cr.yaml
-
대괄호 안의 값을 환경의 정보로 대체하여 백업을 다른 네임스페이스로 복원합니다. 이
namespace-mapping
인수는 콜론으로 구분된 네임스페이스를 사용하여 소스 네임스페이스를 올바른 대상 네임스페이스에 형식 `source1:dest1,source2:dest2`으로 매핑합니다. 예를 들면 다음과 같습니다.tridentctl protect create backuprestore <my_restore_name> --backup <backup_namespace>/<backup_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
백업에서 원래 네임스페이스로 복구합니다
언제든지 원래 네임스페이스로 백업을 복원할 수 있습니다.
-
CR(사용자 정의 리소스) 파일을 만들고 이름을 `trident-protect-backup-ipr-cr.yaml`지정합니다.
-
생성한 파일에서 다음 속성을 구성합니다.
-
metadata.name: (required) 이 사용자 정의 리소스의 이름입니다. 사용자 환경에 맞는 고유하고 합리적인 이름을 선택하십시오.
-
* spec.appArchivePath * : 백업 컨텐츠가 저장되는 AppVault 내부의 경로입니다. 다음 명령을 사용하여 이 경로를 찾을 수 있습니다.
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
* spec.appVaultRef *: (required) 백업 내용이 저장된 AppVault의 이름입니다.
예를 들면 다음과 같습니다.
apiVersion: protect.trident.netapp.io/v1 kind: BackupInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name
-
-
(선택 사항) 복원할 응용 프로그램의 특정 리소스만 선택해야 하는 경우 특정 레이블로 표시된 리소스를 포함하거나 제외하는 필터링을 추가합니다.
-
resourceFilter.resourceSelectionCriteria:(필터링에 필요)
include or exclude
resourceMatchers에 정의된 리소스를 포함하거나 제외하는 데 사용합니다. 다음 resourceMatchers 매개 변수를 추가하여 포함하거나 제외할 리소스를 정의합니다.-
resourceFilter.resourceMatchers: resourceMatcher 개체의 배열입니다.
-
resourceMatchers[].group:(Optional) 필터링할 리소스의 그룹입니다.
-
* resourceMatchers [].kind *: (Optional) 필터링할 리소스의 종류입니다.
-
resourceMatchers [ ].version: (Optional) 필터링할 리소스의 버전입니다.
-
resourceMatchers[].names:(Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 이름입니다.
-
*resourceMatchers [].namespaces *: (Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 네임스페이스입니다.
-
resourceMatchers [ ].labelSelectors: (Optional) 에 정의된 대로 리소스의 Kubernetes metadata.name 필드에 있는 레이블 선택기 문자열입니다. "Kubernetes 문서" 예를 들면 다음과 `"trident.netapp.io/os=linux"`같습니다.
예를 들면 다음과 같습니다.
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
파일을 올바른 값으로 채운 후
trident-protect-backup-ipr-cr.yaml
CR:kubectl apply -f trident-protect-backup-ipr-cr.yaml
-
대괄호 안의 값을 환경의 정보로 대체하여 백업을 원래 네임스페이스로 복원합니다.
backup`인수에 네임스페이스 및 백업 이름이 형식으로 `<namespace>/<name>
사용됩니다. 예를 들면 다음과 같습니다.tridentctl protect create backupinplacerestore <my_restore_name> --backup <namespace/backup_to_restore>
스냅샷에서 다른 네임스페이스로 복구합니다
사용자 지정 리소스(CR) 파일을 사용하여 스냅샷에서 데이터를 다른 네임스페이스 또는 원래 소스 네임스페이스로 복원할 수 있습니다. SnapshotRestore CR을 사용하여 스냅샷을 다른 네임스페이스로 복구하는 경우 Trident Protect는 새 네임스페이스에서 애플리케이션을 복원하지만 복원된 애플리케이션은 Trident Protect로 자동으로 보호되지 않습니다. 복원된 응용 프로그램을 보호하려면 복원된 응용 프로그램에 대해 Trident Protect로 보호되도록 응용 프로그램 CR을 만들어야 합니다.
-
CR(사용자 정의 리소스) 파일을 만들고 이름을 `trident-protect-snapshot-restore-cr.yaml`지정합니다.
-
생성한 파일에서 다음 속성을 구성합니다.
-
metadata.name: (required) 이 사용자 정의 리소스의 이름입니다. 사용자 환경에 맞는 고유하고 합리적인 이름을 선택하십시오.
-
* spec.appVaultRef *: (required) 스냅샷 내용이 저장된 AppVault의 이름입니다.
-
* spec.appArchivePath *: 스냅샷 내용이 저장되는 AppVault 내부 경로입니다. 다음 명령을 사용하여 이 경로를 찾을 수 있습니다.
kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
spec.namespaceMapping: 복구 작업의 소스 네임스페이스를 대상 네임스페이스에 매핑하는 것입니다.
my-source-namespace`및 를 `my-destination-namespace
사용자 환경의 정보로 바꿉니다. -
spec.storageClassMapping: 복원 작업의 소스 스토리지 클래스를 대상 스토리지 클래스로 매핑하는 것입니다.
destinationStorageClass`및 를 `sourceStorageClass
사용자 환경의 정보로 바꿉니다.apiVersion: protect.trident.netapp.io/v1 kind: SnapshotRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(선택 사항) 복원할 응용 프로그램의 특정 리소스만 선택해야 하는 경우 특정 레이블로 표시된 리소스를 포함하거나 제외하는 필터링을 추가합니다.
-
resourceFilter.resourceSelectionCriteria:(필터링에 필요)
include or exclude
resourceMatchers에 정의된 리소스를 포함하거나 제외하는 데 사용합니다. 다음 resourceMatchers 매개 변수를 추가하여 포함하거나 제외할 리소스를 정의합니다.-
resourceFilter.resourceMatchers: resourceMatcher 개체의 배열입니다.
-
resourceMatchers[].group:(Optional) 필터링할 리소스의 그룹입니다.
-
* resourceMatchers [].kind *: (Optional) 필터링할 리소스의 종류입니다.
-
resourceMatchers [ ].version: (Optional) 필터링할 리소스의 버전입니다.
-
resourceMatchers[].names:(Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 이름입니다.
-
*resourceMatchers [].namespaces *: (Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 네임스페이스입니다.
-
resourceMatchers [ ].labelSelectors: (Optional) 에 정의된 대로 리소스의 Kubernetes metadata.name 필드에 있는 레이블 선택기 문자열입니다. "Kubernetes 문서" 예를 들면 다음과 `"trident.netapp.io/os=linux"`같습니다.
예를 들면 다음과 같습니다.
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
파일을 올바른 값으로 채운 후
trident-protect-snapshot-restore-cr.yaml
CR:kubectl apply -f trident-protect-snapshot-restore-cr.yaml
-
대괄호 안의 값을 사용자 환경의 정보로 대체하여 스냅샷을 다른 네임스페이스로 복원합니다.
-
snapshot`인수에 네임스페이스 및 스냅숏 이름이 형식으로 `<namespace>/<name>
사용됩니다. -
이
namespace-mapping
인수는 콜론으로 구분된 네임스페이스를 사용하여 소스 네임스페이스를 올바른 대상 네임스페이스에 형식 `source1:dest1,source2:dest2`으로 매핑합니다.예를 들면 다음과 같습니다.
tridentctl protect create snapshotrestore <my_restore_name> --snapshot <namespace/snapshot_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
-
스냅샷에서 원래 네임스페이스로 복구합니다
언제든지 스냅샷을 원래 네임스페이스로 복구할 수 있습니다.
-
CR(사용자 정의 리소스) 파일을 만들고 이름을 `trident-protect-snapshot-ipr-cr.yaml`지정합니다.
-
생성한 파일에서 다음 속성을 구성합니다.
-
metadata.name: (required) 이 사용자 정의 리소스의 이름입니다. 사용자 환경에 맞는 고유하고 합리적인 이름을 선택하십시오.
-
* spec.appVaultRef *: (required) 스냅샷 내용이 저장된 AppVault의 이름입니다.
-
* spec.appArchivePath *: 스냅샷 내용이 저장되는 AppVault 내부 경로입니다. 다음 명령을 사용하여 이 경로를 찾을 수 있습니다.
kubectl get snapshots <SNAPSHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
apiVersion: protect.trident.netapp.io/v1 kind: SnapshotInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path
-
-
(선택 사항) 복원할 응용 프로그램의 특정 리소스만 선택해야 하는 경우 특정 레이블로 표시된 리소스를 포함하거나 제외하는 필터링을 추가합니다.
-
resourceFilter.resourceSelectionCriteria:(필터링에 필요)
include or exclude
resourceMatchers에 정의된 리소스를 포함하거나 제외하는 데 사용합니다. 다음 resourceMatchers 매개 변수를 추가하여 포함하거나 제외할 리소스를 정의합니다.-
resourceFilter.resourceMatchers: resourceMatcher 개체의 배열입니다.
-
resourceMatchers[].group:(Optional) 필터링할 리소스의 그룹입니다.
-
* resourceMatchers [].kind *: (Optional) 필터링할 리소스의 종류입니다.
-
resourceMatchers [ ].version: (Optional) 필터링할 리소스의 버전입니다.
-
resourceMatchers[].names:(Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 이름입니다.
-
*resourceMatchers [].namespaces *: (Optional) 필터링할 리소스의 Kubernetes metadata.name 필드에 있는 네임스페이스입니다.
-
resourceMatchers [ ].labelSelectors: (Optional) 에 정의된 대로 리소스의 Kubernetes metadata.name 필드에 있는 레이블 선택기 문자열입니다. "Kubernetes 문서" 예를 들면 다음과 `"trident.netapp.io/os=linux"`같습니다.
예를 들면 다음과 같습니다.
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
파일을 올바른 값으로 채운 후
trident-protect-snapshot-ipr-cr.yaml
CR:kubectl apply -f trident-protect-snapshot-ipr-cr.yaml
-
대괄호 안의 값을 사용자 환경의 정보로 대체하여 스냅샷을 원래 네임스페이스로 복원합니다. 예를 들면 다음과 같습니다.
tridentctl protect create snapshotinplacerestore <my_restore_name> --snapshot <snapshot_to_restore>
복구 작업의 상태를 확인합니다
명령줄을 사용하여 진행 중이거나, 완료되었거나, 실패한 복구 작업의 상태를 확인할 수 있습니다.
-
다음 명령을 사용하여 복원 작업의 상태를 검색하여 대괄호의 값을 사용자 환경의 정보로 바꿉니다.
kubectl get backuprestore -n <namespace_name> <my_restore_cr_name> -o jsonpath='{.status}'