Questa pagina descrive le diverse strategie di protezione delle applicazioni disponibili in Google Distributed Cloud (GDC) air-gapped.
Le strategie di protezione delle applicazioni ti consentono di eseguire hook specifici pre-esecuzione e post-esecuzione e definire un comportamento personalizzato per la sospensione, il backup o il ripristino di un workload stateful.
Esistono tre strategie di backup e ripristino che puoi utilizzare quando
definisci una risorsa ProtectedApplication:
- Eseguire il backup di tutto e ripristinare tutto
- Esegui il backup di uno e ripristina tutti
- Dump and load
Le definizioni delle strategie possono includere i seguenti valori:
| Tipo | Attributo | Descrizione | 
|---|---|---|
| BackupAllRestoreAll | Esegui il backup e il ripristino di tutti i contenuti del componente. | |
| backupPreHooks | Elenco degli hook da eseguire prima del backup. | |
| backupPostHooks | Elenco degli hook da eseguire dopo il backup. | |
| volumeSelector | Selettore di etichette che specifica i volumi permanenti di cui eseguire il backup. Se vuoto, vengono selezionate tutte le visualizzazioni di pagina. | |
| backupOneRestoreAll | Esegui il backup di una copia di un pod selezionato e utilizzala per ripristinare tutti i pod. | |
| backupTargetName | Il nome del Deploymento del
StatefulSetpreferito da utilizzare per il backup. | |
| backupPreHooks | Elenco degli hook da eseguire prima del backup. | |
| backupPostHooks | Elenco degli hook da eseguire dopo il backup. | |
| volumeSelector | Selettore di etichette che specifica i volumi permanenti di cui eseguire il backup. Se vuoto, vengono selezionate tutte le visualizzazioni di pagina. | |
| dumpAndLoad | Utilizza un volume dedicato per il backup e il ripristino. | |
| dumpTarget | Specifica il nome del DeploymentoStatefulSetpreferito
utilizzato per scaricare i dati dei componenti. Il pod
di destinazione viene selezionato in base alla composizione di questo componente:
 
 
 | |
| 
loadTarget
 | Specifica il nome del DeploymentoStatefulSetpreferito
utilizzato per caricare i dati dei componenti. Il pod
di destinazione viene selezionato in base alla composizione di questo componente:
 
 | |
| dumpHooks | Elenco degli hook utilizzati per il dump dei dati. | |
| backupPostHooks | Elenco degli hook da eseguire dopo il backup. | |
| loadHooks | Elenco degli hook utilizzati per caricare i dati di questo componente dal volume dedicato. Potrebbe anche includere passaggi di pulizia dopo il caricamento. Il pod di destinazione dell'esecuzione è uno dei pod selezionati
da LoadTarget. | |
| volumeSelector | Selettore di etichette che specifica i volumi permanenti di cui eseguire il backup. Se vuoto, vengono selezionate tutte le visualizzazioni di pagina. | 
Esegui il backup di tutto e ripristina tutto
Questa strategia esegue il backup di tutte le risorse dell'applicazione durante il backup e le ripristina tutte durante il ripristino. Questa strategia è più adatta alle applicazioni autonome, in cui non è presente alcuna replica tra i pod.
Per una strategia di backup e ripristino di tutto, includi le seguenti informazioni nella definizione della risorsa:
- Hook: definisci i comandi eseguiti prima e dopo l'esecuzione dei backup del volume, ad esempio i passaggi di quiescenza e annullamento della quiescenza dell'applicazione. Questi comandi vengono eseguiti su tutti i pod all'interno di un componente. 
- Selezione del volume: offre una granularità più precisa sui volumi di cui viene eseguito il backup e il ripristino all'interno del componente. I volumi non selezionati non vengono sottoposti a backup. Durante un ripristino, tutti i volumi ignorati durante il backup vengono ripristinati come volumi vuoti. 
Questo esempio crea una risorsa ProtectedApplication che sospende il file
system prima di eseguire il backup del volume dei log e lo riattiva dopo il backup:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
  name: nginx
  namespace: sales
spec:
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: nginx
  components:
  - name: nginx-app
    resourceKind: Deployment
    resourceNames: ["nginx"]
    strategy:
      type: BackupAllRestoreAll
      backupAllRestoreAll:
        backupPreHooks:
        - name: fsfreeze
          container: nginx
          Commands: [ /sbin/fsfreeze, -f, /var/log/nginx ]
        backupPostHooks:
        - name: fsunfreeze
          container: nginx
          commands: [ /sbin/fsfreeze, -u, /var/log/nginx ]
Esegui il backup di uno e ripristina tutti
Questa strategia esegue il backup di una copia di un pod selezionato. Questa singola copia è l'origine per il ripristino di tutti i pod durante un ripristino. Questo metodo può contribuire a ridurre
i costi di archiviazione e i tempi di backup. Questa strategia funziona in una configurazione ad alta disponibilità quando un componente viene implementato con un PersistentVolumeClaim primario e più PersistentVolumeClaims secondari.
Per una strategia di backup e ripristino di tutti i dati, devi includere le seguenti informazioni nella definizione della risorsa:
- Destinazione del backup: specifica quale DeploymentoStatefulSetutilizzare per eseguire il backup dei dati. Viene selezionato automaticamente il pod migliore per il backup. In una configurazione ad alta disponibilità, Google consiglia di eseguire il backup da unPersistentVolumeClaimsecondario.
- Hook: definisce i comandi eseguiti prima e dopo l'esecuzione dei backup dei volumi, ad esempio i passaggi di quiescenza e annullamento della quiescenza dell'applicazione. Questi comandi vengono eseguiti solo sul pod di backup selezionato.
- Selezione del volume: offre una granularità più precisa per i volumi di cui viene eseguito il backup e il ripristino all'interno del componente.
Se un componente è configurato con più risorse Deployment o StatefulSet,
tutte le risorse devono avere la stessa struttura PersistentVolume
e rispettare queste regole:
- Il numero di risorse PersistentVolumeClaimutilizzate da tutte le risorseDeploymentoStatefulSetdeve essere lo stesso.
- Lo scopo delle risorse PersistentVolumeClaimnello stesso indice deve essere lo stesso. Per le risorseStatefulSet, l'indice è definito involumeClaimTemplate. Per le risorseDeployment, l'indice è definito nelle risorseVolumee tutti i volumi non permanenti vengono ignorati.
Tenendo conto di queste considerazioni, è possibile selezionare più set di volumi per il backup, ma viene selezionato un solo volume da ogni set di volumi.
Questo esempio, che presuppone un'architettura di un StatefulSet primario e un StatefulSet secondario, mostra un backup dei volumi all'interno di un singolo pod in un StatefulSet secondario e poi un ripristino di tutti gli altri volumi:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
  name: mariadb
  namespace: mariadb
spec:
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: mariadb
  components:
  - name: mariadb
    resourceKind: StatefulSet
    resourceNames: ["mariadb-primary", "mariadb-secondary"]
    strategy:
      type: BackupOneRestoreAll
      backupOneRestoreAll:
        backupTargetName: mariadb-secondary
        backupPreHooks:
        - name: quiesce
          container: mariadb
          command: [...]
        backupPostHooks:
        - name: unquiesce
          container: mariadb
          command: [...]
Dump and load
Questa strategia utilizza un volume dedicato per i processi di backup e ripristino e richiede un PersistentVolumeClaim dedicato collegato a un componente che archivia i dati di dump. Per una strategia di dump e caricamento, includi le seguenti informazioni nella
definizione della risorsa:
- Destinazione dump:specifica quale DeploymentoStatefulSetdeve essere utilizzato per eseguire il dump dei dati. Viene selezionato automaticamente il pod migliore per il backup. In una configurazione ad alta disponibilità, è consigliabile eseguire il backup da unPersistentVolumeClaimsecondario.
- Destinazione di caricamento:specifica quale DeploymentoStatefulSetdeve essere utilizzato per caricare i dati. Viene selezionato automaticamente il pod migliore per il backup. La destinazione di caricamento non deve necessariamente corrispondere alla destinazione di dump.
- Hook:definisce i comandi eseguiti prima e dopo l'esecuzione dei backup del volume. Esistono hook specifici che devi definire per le strategie di dump e caricamento:
- Dump hooks:definisce gli hook che scaricano i dati nel volume dedicato prima del backup. Questo hook viene eseguito solo sul pod dump selezionato.
- Hook di caricamento:definisce gli hook che caricano i dati dopo l'avvio dell'applicazione. Questo hook viene eseguito solo sul pod di caricamento selezionato.
- (Facoltativo) Hook post-backup: definisce gli hook eseguiti dopo il backup dei volumi dedicati, ad esempio i passaggi di pulizia. Questo hook viene eseguito solo sul pod di dump selezionato.
 
- Selezione del volume:specifica tutti i volumi dedicati che archiviano i dati di dump. Devi selezionare un solo volume per ogni pod di dump e caricamento.
Se l'applicazione è costituita da Deployments, ogni Deployment deve avere
esattamente una replica.
Questo esempio, che presuppone un'architettura di un StatefulSet primario e un
StatefulSet secondario con PersistentVolumeClaims dedicati sia per StatefulSet
primario che secondario StatefulSets, mostra una strategia di dump e caricamento:
kind: ProtectedApplication
apiVersion: gkebackup.gke.io/v1
metadata:
  name: mariadb
  namespace: mariadb
spec:
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: mariadb
  components:
  - name: mariadb-dump
    resourceKind: StatefulSet
    resourceNames: ["mariadb-primary", "mariadb-secondary"]
    backupStrategy:
      type: DumpAndLoad
      DumpAndLoad:
        loadTarget: mariadb-primary
        dumpTarget: mariadb-secondary
        dumpHooks:
        - name: db_dump
          container: mariadb
          commands:
          - bash
          - "-c"
          - |
            mysqldump -u root --all-databases > /backup/mysql_backup.dump
        loadHooks:
        - name: db_load
          container: mariadb
          commands:
          - bash
          - "-c"
          - |
            mysql -u root < /backup/mysql_backup.sql
    volumeSelector:
      matchLabels:
        gkebackup.gke.io/backup: dedicated-volume