애플리케이션 백업 및 복원 맞춤설정

이 문서에서는 ProtectedApplication 리소스를 사용하여 Google Distributed Cloud (GDC) 에어 갭에서 백업 및 복원 동작을 맞춤설정하는 방법을 설명합니다.

이 단계는 선택사항이며 워크로드의 백업 및 복원을 구성하는 데 필요하지 않습니다. ProtectedApplication 리소스는 개별 스테이트풀(Stateful) 애플리케이션의 백업 및 복원을 맞춤설정하는 네임스페이스의 선택적 Kubernetes 리소스입니다. ProtectedApplication 리소스가 없으면 다음 제한사항이 적용됩니다.

  • 백업 및 복원 범위 세분화 수준을 네임스페이스 수준으로 제한합니다.
  • 백업 실행 중에는 워크로드에서 플러시 및 정지 작업이 발생하지 않습니다.이로 인해 여러 디스크가 있는 가상 머신이 복원 후 비정상 종료 일관성이 없을 수 있습니다.

ProtectedApplication 리소스는 개별 스테이트풀(Stateful) 애플리케이션의 백업 및 복원을 맞춤설정하는 데 사용되는 선택적 Kubernetes 네임스페이스 리소스입니다. ProtectedApplication 리소스는 애플리케이션 인스턴스에 속하는 Kubernetes 리소스를 정의합니다. kubectl 명령어를 사용하여 구체적인 조정 사항을 수동으로 설정하여 다음 시나리오에서 이러한 애플리케이션의 백업 및 복원을 만들 수 있습니다.

  • 한 네임스페이스에서 다른 리소스와 독립적으로 백업 또는 복원될 수 있는 리소스 집합 식별. ProtectedApplication은 백업 또는 복원 범위에 대해 식별할 수 있는 가장 세분화된 네임스페이스 항목입니다.
  • ProtectedApplication가 백업 범위에 속할 때마다 특수한 백업 조정을 제공합니다. 특히 ProtectedApplication에 PersistentVolumeClaim (PVC) 리소스가 직접 포함되거나 StatefulSet의 템플릿을 통해 포함된 경우 볼륨을 백업하기 전후에 후크를 실행할 수 있습니다. 후크는 애플리케이션 컨테이너에서 실행되는 명령어입니다. 이러한 후크는 플러시, 정지 또는 정지 해제 작업에 자주 사용되며 애플리케이션에 일관된 백업을 제공합니다.

시작하기 전에

백업 계획을 만들기 전에 ProtectedApplication 리소스를 정의하세요. 자세한 내용은 백업 집합 계획을 참조하세요.

IAM 역할 요청

ProtectedApplication 리소스를 사용하려면 IAM 조직 관리자 또는 IAM 프로젝트 관리자에게 다음 역할 중 하나를 부여해 달라고 요청하세요.

  • 사용자 클러스터 백업 관리자 (user-cluster-backup-admin): 사용자 클러스터에서 백업 및 복원 계획과 같은 백업 리소스를 만들고, 가져오고, 나열하고, 감시하고, 업데이트하고, 패치하고, 삭제합니다. IAM 조직 관리자에게 문의하여 이 역할을 요청하세요.

  • 백업 생성자 (backup-creator): 수동 백업 요청 및 수동 복원 요청을 만들고, 가져오고, 나열하고, 감시하고, 업데이트하고, 패치하고, 삭제합니다. IAM 프로젝트 관리자에게 문의하여 이 역할을 요청하세요.

보호되는 애플리케이션 리소스 배포

다음 yaml 스니펫은 백업 중 애플리케이션과 연결된 모든 리소스를 백업하고 복원 중 모든 리소스를 복원하는 ProtectedApplication 리소스가 있는 Deployment 사양의 예시입니다.

apiVersion: v1
kind: Namespace
metadata:
  name: "applications"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: protected-application-deployment
  namespace: applications
  labels:
    app: protected
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: unprotected-application-deployment
  namespace: applications
  labels:
    app: unprotected
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---

apiVersion: gkebackup.gke.io/v1
kind: ProtectedApplication
metadata:
  name: protected-application-test
  namespace: applications
spec:
  applicationName: protectedApplication
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: protected
  components:
    - name: protect-application-deployment
      resourceKind: Deployment
      resourceNames:
        - protected-application-deployment
      strategy:
        type: BackupAllRestoreAll
        backupAllRestoreAll: {}

backupScope의 selectedApplications 목록에서 ProtectedApplication를 지정합니다. 예를 들면 다음과 같습니다.

apiVersion: backup.gdc.goog/v1
kind: BackupPlan
metadata:
  name: protected-application-backupplan-test
  namespace: applications
spec:
  clusterName: "cluster-sample"
  backupSchedule:
    cronSchedule: "*/30 * * * *"
    paused: true
  backupConfig:
    backupScope:
      selectedApplications:
        namespacedNames:
        - name: protected-application-test
          namespace: applications
    backupRepository: "backup-repository"
  retentionPolicy:
    backupDeleteLockDays: 10
    backupRetainDays: 10

이 예시에는 다음 값이 포함됩니다.

값 설명
resourceSelection 보호되는 애플리케이션에 속하는 리소스를 식별하는 방법을 정의합니다.
  • type: 다음 중 하나를 지정합니다.
    • ApplicationName: 동일한 네임스페이스 내에서 sig-apps 애플리케이션을 백업합니다.
    • Selector: 동일한 네임스페이스 내에서 지정된 선택기와 일치하는 리소스를 백업합니다.
  • applicationName: type가 ApplicationName인 경우 동일한 네임스페이스 내에서 sig-apps 애플리케이션의 이름을 지정합니다.
  • selector: type가 Selector인 경우 동일한 네임스페이스 내에서 리소스를 선택할 라벨 선택기를 지정합니다.
components 배포 또는 스테이트풀셋과 같은 보호된 애플리케이션의 구성요소 목록:
  • name: 구성요소의 고유한 이름입니다.
  • resourceKind: Deployment 또는 StatefulSet 중에서 선택합니다.
  • resourceNames: 네임스페이스에서 resourceKind를 식별하는 이름 목록입니다.

다음 단계