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

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

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

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

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

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

시작하기 전에

ProtectedApplication 리소스를 사용하려면 다음이 필요합니다.

  • 백업 계획을 만들기 전에 ProtectedApplication 리소스를 정의해야 합니다. 자세한 내용은 백업 집합 계획을 참고하세요.
  • 필요한 ID 및 액세스 역할:

    • 플랫폼 관리자 (PA) 사용자의 경우:
      • 사용자 클러스터 백업 관리자: 사용자 클러스터의 백업 및 복원 계획과 같은 백업 리소스를 관리합니다. 조직 IAM 관리자에게 사용자 클러스터 백업 관리자 (user-cluster-backup-admin) 역할을 부여해 달라고 요청하세요.
    • 애플리케이션 운영자 (AO) 사용자의 경우:
      • 백업 생성자: 수동 백업을 만들고 복원합니다. 프로젝트 IAM 관리자에게 백업 생성자 (backup-creator) 역할을 부여해 달라고 요청하세요.
    • 자세한 내용은 역할 정의를 참고하세요.

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

다음은 백업 중에 애플리케이션과 연결된 모든 리소스를 백업하고 복원 중에 모든 리소스를 복원하는 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

backupScopeselectedApplications 목록에 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: typeApplicationName인 경우 동일한 네임스페이스 내에서 sig-apps 애플리케이션의 이름을 지정합니다.
  • selector: typeSelector인 경우 동일한 네임스페이스 내에서 리소스를 선택하는 라벨 선택기를 지정합니다.
components 보호된 애플리케이션의 구성요소 목록입니다(예: 배포 또는 스테이트풀 세트).
  • name: 구성요소의 고유 이름입니다.
  • resourceKind: Deployment 또는 StatefulSet 중에서 선택합니다.
  • resourceNames: 네임스페이스에서 resourceKind을 식별하는 이름 목록입니다.
  • strategy: 이 구성요소를 백업하거나 복원하는 방법에 관한 추가 세부정보입니다. 자세한 내용은 보호된 애플리케이션 전략을 참고하세요.

다음 단계