アプリケーションのバックアップと復元をカスタマイズする

このページでは、ProtectedApplication リソースを使用して、Google Distributed Cloud(GDC)エアギャップでのバックアップと復元の動作をカスタマイズする方法について説明します。

このページで説明する手順は省略可能であり、ワークロードのバックアップと復元を正常に構成するために必須ではありません。ProtectedApplication リソースは、個々のステートフル アプリケーションのバックアップと復元をカスタマイズする Namespace 内の省略可能な Kubernetes リソースです。ProtectedApplication リソースがない場合、次の制限が適用されます。

  • バックアップと復元のスコープの粒度を Namespace レベルに制限します。
  • バックアップの実行中にワークロードでフラッシュ オペレーションと静止オペレーションは発生しません。このため、復元後に複数のディスクを持つ仮想マシンがクラッシュ整合性にならない可能性があります。

ProtectedApplication リソースは、個々のステートフル アプリケーションのバックアップと復元をカスタマイズするために使用される省略可能な Kubernetes Namespace リソースです。ProtectedApplication リソースは、アプリケーション インスタンスに属する Kubernetes リソースを定義します。kubectl コマンドを使用して、次のシナリオでアプリケーションのバックアップと復元を行うための専用のオーケストレーションを手動で設定できます。

  • 名前空間内の他のリソースから独立してバックアップまたは復元される、一連のリソースを特定します。ProtectedApplication は、バックアップまたは復元スコープで識別できる最もきめ細かい Namespace エンティティです。
  • ProtectedApplication がバックアップの範囲内にある場合は、常に専用のバックアップ オーケストレーションを提供します。特に、ProtectedApplicationPersistentVolumeClaim(PVC)リソースが直接含まれている場合、または StatefulSet のテンプレートを介して含まれている場合は、ボリュームのバックアップの前後にフックを実行できます。フックは、アプリケーション コンテナで実行されるコマンドです。これらのフックは、フラッシュ、停止、停止解除によく使用され、アプリケーション整合性のあるバックアップを提供します。

始める前に

ProtectedApplication リソースを使用するには、次のものが必要です。

  • バックアップ プランを作成する前に、ProtectedApplication リソースを定義する必要があります。詳細については、一連のバックアップを計画するをご覧ください。
  • 必要な ID とアクセスロール:

    • プラットフォーム管理者(PA)ユーザーの場合:
      • ユーザー クラスタ バックアップ管理者: ユーザー クラスタのバックアップ プランや復元プランなどのバックアップ リソースを管理します。組織の IAM 管理者に、ユーザー クラスタ バックアップ管理者(user-cluster-backup-admin)ロールを付与するよう依頼します。
    • アプリケーション オペレーター(AO)ユーザーの場合:
      • Backup Creator: 手動バックアップの作成と復元を行います。プロジェクト 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: 保護されたアプリケーションが存在するユーザー クラスタ内の Namespace。
  • PROTECTED_APP_NAME: ProtectedApplication の名前。

この例では、ProtectedApplication に次の値が含まれています。

説明
resourceSelection 保護されたアプリケーションに属するリソースを識別する方法を定義します。
  • type:: 次のいずれかを指定します。
    • ApplicationName: 同じ Namespace 内の sig-apps アプリケーションをバックアップします。
    • Selector: 同じ Namespace 内で指定されたセレクタに一致するリソースをバックアップします。
  • applicationName: typeApplicationName の場合、同じ Namespace 内の sig-apps アプリケーションの名前を指定します。これは、データ保護仕様が適用されるアプリです。
  • selector: typeSelector の場合、同じ Namespace 内のリソースを選択するラベル セレクタを指定します。
components 保護されたアプリケーションのコンポーネント(デプロイやステートフル セットなど)のリスト:
  • name: コンポーネントの一意の名前。
  • resourceKind: Deployment または StatefulSet のいずれかを選択します。
  • resourceNames: 名前空間内の resourceKind を識別する名前のリスト。

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 日を超えることはできません。

次のステップ