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

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

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

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

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

  • 名前空間内の他のリソースから独立してバックアップまたは復元される、一連のリソースを特定する。ProtectedApplication は、バックアップまたは復元のスコープで識別できる最も詳細な Namespace エンティティです。
  • 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: 同じ Namespace 内の sig-apps アプリケーションをバックアップします。
    • Selector: 同じ Namespace 内の特定のセレクタに一致するリソースをバックアップします。
  • applicationName: type が ApplicationName の場合、同じ Namespace 内の sig-apps Application の名前を指定します。
  • selector: type が Selector の場合、同じ Namespace 内のリソースを選択するラベルセレクタを指定します。
components 保護されたアプリケーションのコンポーネント(Deployment、StatefulSet など)のリスト。
  • name: コンポーネントの一意の名前。
  • resourceKind: Deployment または StatefulSet を選択します。
  • resourceNames: 名前空間内の resourceKind を識別する名前のリスト。

次のステップ