自訂應用程式的備份與還原作業

本文說明如何使用 ProtectedApplication 資源,自訂 Google Distributed Cloud (GDC) 實體隔離方案中的備份和還原行為。

這些步驟為選用,不一定要完成,也能成功設定工作負載的備份和還原功能。ProtectedApplication 資源是命名空間中的選用 Kubernetes 資源,可自訂個別有狀態應用程式的備份和還原作業。如果沒有 ProtectedApplication 資源,則適用下列限制:

  • 將備份和還原範圍精細程度限制在命名空間層級。
  • 備份執行期間,工作負載不會執行清除和靜止作業。這可能會導致具有多個磁碟的虛擬機器在還原後不具備崩潰一致性。

ProtectedApplication 資源是選用的 Kubernetes 命名空間資源,用於自訂個別有狀態應用程式的備份和還原作業。ProtectedApplication 資源會定義哪些 Kubernetes 資源屬於應用程式執行個體。您可以使用 kubectl 指令,在下列情境中建立備份及還原這些應用程式,手動設定專門的自動化調度管理:

  • 識別命名空間中的一組資源,這些資源可能獨立於該命名空間中的其他資源進行備份或還原。ProtectedApplication 是最精細的命名空間實體,可用於識別備份或還原範圍。
  • 只要 ProtectedApplication 屬於備份範圍,即可提供專門的備份自動化調度管理。具體來說,如果 ProtectedApplication 直接或透過 StatefulSet 的範本包含 PersistentVolumeClaim (PVC) 資源,您可以在備份磁碟區前後執行掛鉤。掛鉤是在應用程式容器中執行的指令。這些掛鉤通常用於清除、靜止或取消靜止作業,並提供應用程式一致的備份。

事前準備

請先定義 ProtectedApplication 資源,再建立備份方案。詳情請參閱「規劃一組備份」。

要求 IAM 角色

如要使用 ProtectedApplication 資源,請要求 IAM 機構組織管理員或 IAM 專案管理員授予您下列其中一個角色:

  • 使用者叢集備份管理員 (user-cluster-backup-admin):建立、取得、列出、監控、更新、修補及刪除備份資源,例如使用者叢集中的備份和還原方案。請與 IAM 機構組織管理員聯絡,要求取得這個角色。

  • 備份建立者 (backup-creator):建立、取得、列出、監控、更新、修補及刪除手動備份要求和手動還原要求。如要取得這個角色,請與 IAM 專案管理員聯絡。

部署受保護的應用程式資源

下列 YAML 程式碼片段是 Deployment 規格範例,其中包含 ProtectedApplication 資源,可在備份期間備份與應用程式相關聯的所有資源,並在還原期間還原所有資源:

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 受保護應用程式的元件清單,例如 Deployment 或 StatefulSet:
  • name:元件的專屬名稱。
  • resourceKind:選擇 Deployment 或 StatefulSet。
  • resourceNames:用於識別命名空間中 resourceKind 的名稱清單。

後續步驟