이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭에서 사용할 수 있는 다양한 보호 애플리케이션 전략을 설명합니다.
보호된 애플리케이션 전략을 사용하면 특정 실행 전 및 실행 후 후크를 실행하고 상태 저장 워크로드의 중지, 백업 또는 복원을 위한 맞춤 동작을 정의할 수 있습니다.
ProtectedApplication
리소스를 정의할 때는 세 가지 백업 및 복원 전략을 사용할 수 있습니다.
전략 정의에는 다음 값이 포함될 수 있습니다.
유형 | 속성 | 설명 |
---|---|---|
BackupAllRestoreAll |
구성요소의 모든 항목을 백업하고 복원합니다. | |
backupPreHooks |
백업 전에 실행할 후크 목록입니다. | |
backupPostHooks |
백업 후에 실행할 후크 목록입니다. | |
volumeSelector |
백업할 영구 볼륨을 지정하는 라벨 선택기입니다. 비어 있으면 모든 PV가 선택됩니다. | |
backupOneRestoreAll |
선택한 포드의 사본 하나를 백업하고 이를 사용하여 모든 포드를 복원합니다. | |
backupTargetName |
백업에 사용할 기본 Deployment 또는
StatefulSet 의 이름입니다. |
|
backupPreHooks |
백업 전에 실행할 후크 목록입니다. | |
backupPostHooks |
백업 후에 실행할 후크 목록입니다. | |
volumeSelector |
백업할 영구 볼륨을 지정하는 라벨 선택기입니다. 비어 있으면 모든 PV가 선택됩니다. | |
dumpAndLoad |
백업 및 복원에 전용 볼륨을 사용합니다. | |
dumpTarget |
구성요소 데이터를 덤프하는 데 사용되는 기본 Deployment 또는 StatefulSet 의 이름을 지정합니다. 타겟 포드는 이 구성요소가 구성된 방식에 따라 선택됩니다.
|
|
loadTarget
|
구성요소 데이터를 로드하는 데 사용되는 기본 Deployment 또는 StatefulSet 의 이름을 지정합니다. 타겟 포드는 이 구성요소가 구성된 방식에 따라 선택됩니다.
|
|
dumpHooks |
데이터를 덤프하는 데 사용되는 후크 목록입니다. | |
backupPostHooks |
백업 후에 실행할 후크 목록입니다. | |
loadHooks |
전용 볼륨에서 이 구성요소의 데이터를 로드하는 데 사용되는 후크 목록입니다. 로드 완료 후 정리 단계도 포함될 수 있습니다. 실행 타겟 포드는 LoadTarget 에서 선택한 포드 중 하나입니다. |
|
volumeSelector |
백업할 영구 볼륨을 지정하는 라벨 선택기입니다. 비어 있으면 모든 PV가 선택됩니다. |
모두 백업 및 모두 복원
이 전략은 백업 중 애플리케이션 리소스를 모두 백업하고 복원 중 이 리소스를 모두 복원합니다. 이 전략은 독립형 애플리케이션에 가장 적합합니다. 독립형 애플리케이션은 포드 간 복제가 없습니다.
모두 백업 및 모두 복원 전략의 경우 리소스 정의에 다음 정보를 포함합니다.
후크: 애플리케이션 정지 및 정지 해제 단계와 같이 볼륨 백업 수행 전후에 실행되는 명령어를 정의합니다. 이러한 명령어는 구성요소 내에 있는 모든 포드에서 실행됩니다.
볼륨 선택: 구성요소 내에서 백업 및 복원되는 볼륨을 더 세밀하게 제어할 수 있습니다. 선택되지 않은 볼륨은 백업되지 않습니다. 백업 중 건너뛴 볼륨은 복원 중 빈 볼륨으로 복원됩니다.
이 예시에서는 로그 볼륨을 백업하기 전에 파일 시스템을 정지하고 백업 후 정지 해제하는 ProtectedApplication
리소스를 만듭니다.
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: nginx
namespace: sales
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: nginx
components:
- name: nginx-app
resourceKind: Deployment
resourceNames: ["nginx"]
strategy:
type: BackupAllRestoreAll
backupAllRestoreAll:
backupPreHooks:
- name: fsfreeze
container: nginx
Commands: [ /sbin/fsfreeze, -f, /var/log/nginx ]
backupPostHooks:
- name: fsunfreeze
container: nginx
commands: [ /sbin/fsfreeze, -u, /var/log/nginx ]
하나만 백업하여 모두 복원
이 전략은 선택한 포드의 사본 하나를 백업합니다. 이 단일 사본이 복원 중 모든 포드를 복원하기 위한 소스입니다. 이 메서드는 스토리지 비용 및 백업 시간을 줄이는 데 도움이 됩니다. 이 전략은 구성요소가 하나의 기본 PersistentVolumeClaim
과 여러 개의 보조 PersistentVolumeClaims
로 배포되는 고가용성 구성에서 사용됩니다.
하나만 백업하여 모두 복원 전략의 경우 리소스 정의에 다음 정보를 포함해야 합니다.
- 백업 대상: 데이터 백업에 사용할
Deployment
또는StatefulSet
를 지정합니다. 최상의 백업 포드가 자동으로 선택됩니다. 고가용성 구성에서는 보조PersistentVolumeClaim
에서 백업하는 것이 좋습니다. - 후크: 애플리케이션 정지 및 정지 해제 단계와 같이 볼륨 백업 수행 전후에 실행되는 명령어를 정의합니다. 이러한 명령어는 선택된 백업 포드에서만 실행됩니다.
- 볼륨 선택: 구성요소 내에서 백업 및 복원되는 볼륨을 더 세밀하게 제어할 수 있습니다.
구성요소가 여러 개의 Deployment
또는 StatefulSet
리소스로 구성된 경우 모든 리소스의 PersistentVolume
구조가 동일해야 하며 다음 규칙을 따라야 합니다.
- 모든
Deployment
또는StatefulSet
리소스에 사용되는PersistentVolumeClaim
리소스 수가 동일해야 합니다. - 동일한 색인에 있는
PersistentVolumeClaim
리소스의 목적이 동일해야 합니다.StatefulSet
리소스의 경우 색인이volumeClaimTemplate
에 정의됩니다.Deployment
리소스의 경우 색인이Volume
리소스에 정의되고 모든 비영구 볼륨을 건너뜁니다.
이러한 조건들을 고려하면 백업에 여러 개의 볼륨 집합을 선택할 수 있지만 각 볼륨 집합에서 하나의 볼륨만 선택됩니다.
이 예시에서는 기본 StatefulSet
하나와 보조 StatefulSet
하나로 이뤄진 구조를 가정해서 보조 StatefulSet
에 있는 단일 포드 내 볼륨의 백업과 다른 모든 볼륨에 대한 복원을 보여줍니다.
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: mariadb
namespace: mariadb
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: mariadb
components:
- name: mariadb
resourceKind: StatefulSet
resourceNames: ["mariadb-primary", "mariadb-secondary"]
strategy:
type: BackupOneRestoreAll
backupOneRestoreAll:
backupTargetName: mariadb-secondary
backupPreHooks:
- name: quiesce
container: mariadb
command: [...]
backupPostHooks:
- name: unquiesce
container: mariadb
command: [...]
덤프 및 로드
이 전략은 백업 및 복원 프로세스에 대해 전용 볼륨을 사용하며 덤프 데이터를 저장하는 구성요소에 연결된 전용 PersistentVolumeClaim
이 필요합니다. 덤프 및 로드 전략의 경우 리소스 정의에 다음 정보를 포함해야 합니다.
- 덤프 대상: 데이터를 덤프하는 데 사용할
Deployment
또는StatefulSet
를 지정합니다. 최상의 백업 포드가 자동으로 선택됩니다. 고가용성 구성에서는 보조PersistentVolumeClaim
에서 백업하는 것이 좋습니다. - 로드 대상: 데이터 로드를 위해 사용할
Deployment
또는StatefulSet
를 지정합니다. 최상의 백업 포드가 자동으로 선택됩니다. 로드 대상은 덤프 대상과 동일할 필요가 없습니다. - 후크: 볼륨 백업 전후에 실행되는 명령어를 정의합니다. 덤프 및 로드 전략에서는 특정 후크를 정의해야 합니다.
- 덤프 후크: 백업 전 전용 볼륨으로 데이터를 덤프하는 후크를 정의합니다. 이 후크는 선택된 덤프 포드에서만 실행됩니다.
- 로드 후크: 애플리케이션 시작 후 데이터를 로드하는 후크를 정의합니다. 이 후크는 선택된 로드 포드에서만 실행됩니다.
- 선택사항 - 포스트 백업 후크: 정리 단계와 같이 전용 볼륨이 백업된 후 실행되는 후크를 정의합니다. 이 후크는 선택된 덤프 포드에서만 실행됩니다.
- 볼륨 선택: 덤프 데이터를 저장하는 모든 전용 볼륨을 지정합니다. 각 덤프 및 로드 포드에 대해 볼륨을 하나만 선택해야 합니다.
애플리케이션이 Deployments
로 구성된 경우 각 Deployment
에는 정확히 하나의 복제본이 있어야 합니다.
이 예시에서는 기본 StatefulSet
하나와 기본 및 보조 StatefulSets
에 대한 전용 PersistentVolumeClaims
가 있는 보조 StatefulSet
로 이뤄진 구조를 가정해서 덤프 및 로드 전략을 보여줍니다.
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
name: mariadb
namespace: mariadb
spec:
resourceSelection:
type: Selector
selector:
matchLabels:
app: mariadb
components:
- name: mariadb-dump
resourceKind: StatefulSet
resourceNames: ["mariadb-primary", "mariadb-secondary"]
backupStrategy:
type: DumpAndLoad
DumpAndLoad:
loadTarget: mariadb-primary
dumpTarget: mariadb-secondary
dumpHooks:
- name: db_dump
container: mariadb
commands:
- bash
- "-c"
- |
mysqldump -u root --all-databases > /backup/mysql_backup.dump
loadHooks:
- name: db_load
container: mariadb
commands:
- bash
- "-c"
- |
mysql -u root < /backup/mysql_backup.sql
volumeSelector:
matchLabels:
gkebackup.gke.io/backup: dedicated-volume