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

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

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

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

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

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

시작하기 전에

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

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

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

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

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

apiVersion: v1
kind: Namespace
metadata:
  name: USER_CLUSTER_NS
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: protected-application-deployment
  namespace: USER_CLUSTER_NS
  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: USER_CLUSTER_NS
  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_APP_NAME
  namespace: USER_CLUSTER_NS
spec:
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: protected
  components:
    - name: application-deployment
      resourceKind: Deployment
      resourceNames:
        - protected-application-deployment
      strategy:
        type: BackupAllRestoreAll

다음을 바꿉니다.

  • USER_CLUSTER_NS: 보호된 애플리케이션이 있는 사용자 클러스터 내의 네임스페이스입니다.
  • PROTECTED_APP_NAME: ProtectedApplication의 이름입니다.

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

설명
resourceSelection 보호된 애플리케이션에 속하는 리소스를 식별하는 방법을 정의합니다.
  • type: 다음 중 하나를 지정합니다.
    • ApplicationName: 동일한 네임스페이스 내에서 sig-apps 애플리케이션을 백업합니다.
    • Selector: 동일한 네임스페이스 내에서 지정된 선택기와 일치하는 리소스를 백업합니다.
  • applicationName: typeApplicationName인 경우 동일한 네임스페이스 내에서 sig-apps 애플리케이션의 이름을 지정합니다. 데이터 보호 사양이 적용되는 애플리케이션입니다.
  • selector: typeSelector인 경우 동일한 네임스페이스 내에서 리소스를 선택하는 라벨 선택기를 지정합니다.
components 배포 또는 스테이트풀 세트와 같은 보호된 애플리케이션의 구성요소 목록입니다.
  • name: 구성요소의 고유한 이름입니다.
  • resourceKind: Deployment 또는 StatefulSet 중에서 선택합니다.
  • resourceNames: 네임스페이스에서 resourceKind을 식별하는 이름 목록입니다.
  • strategy: 이 구성요소를 백업하거나 복원하는 방법에 관한 추가 세부정보입니다. 자세한 내용은 보호된 애플리케이션 전략을 참고하세요.

backupScopeselectedApplications 목록에 ProtectedApplication를 지정합니다. 예를 들면 다음과 같습니다.

apiVersion: backup.gdc.goog/v1
kind: BackupPlan
metadata:
  name: BACKUP_PLAN
  namespace: USER_CLUSTER_NS
spec:
  clusterName: USER_CLUSTER
  backupSchedule:
    cronSchedule: CRON_SCHEDULE
    paused: BACKUP_SCHEDULE_STATUS
  backupConfig:
    backupScope:
      selectedApplications:
        namespacedNames:
        - name: PROTECTED_APP_NAME
          namespace: USER_CLUSTER_NS
    backupRepository: BACKUP_REPOSITORY
    retentionPolicy:
      backupDeleteLockDays: BACKUP_DELETE_LOCK_DAYS
      backupRetainDays: BACKUP_RETAIN_DAYS

다음을 바꿉니다.

  • BACKUP_PLAN: 백업 계획의 이름입니다.
  • USER_CLUSTER: 사용자 클러스터의 이름입니다.
  • CRON_SCHEDULE: 백업을 예약할 시기를 나타내는 crontab 일정입니다(예: "*/30 * * * *"). 예약된 백업 간의 최소 간격은 10분입니다.
  • BACKUP_SCHEDULE_STATUS: true이면 정기 백업이 예약되지 않습니다.
  • PROTECTED_APP_NAME: ProtectedApplication 리소스에 지정한 이름입니다.
  • BACKUP_REPOSITORY: 백업을 저장하는 데 사용하는 백업 저장소의 이름입니다.
  • BACKUP_DELETE_LOCK_DAYS: 백업 생성 후 지정된 일수 동안 백업이 삭제되지 않도록 합니다(예: 10 days).
  • BACKUP_RETAIN_DAYS: 백업을 보관할 총 일수를 정의합니다. 이 기간이 지나면 백업이 자동으로 삭제됩니다. 이 값을 높게 설정하면 스토리지가 소진될 수 있고, 낮게 설정하면 데이터 손실 위험이 증가할 수 있습니다. 지정하지 않으면 이 값은 기본적으로 35로 설정됩니다. 보관 정책은 저장 위치의 보관 정책을 재정의하지 않으며 90일을 초과할 수도 없습니다.

다음 단계