Personalizar o backup e a restauração de um aplicativo

Nesta página, descrevemos como usar recursos do ProtectedApplication para personalizar o comportamento de backups e restaurações no Google Distributed Cloud (GDC) isolado por air-gap.

As etapas descritas nesta página são opcionais e não são necessárias para configurar o backup e a restauração das suas cargas de trabalho. Os recursos ProtectedApplication são recursos opcionais do Kubernetes em namespaces que personalizam o backup e a restauração de aplicativos individuais com estado. Sem os recursos do ProtectedApplication, as seguintes restrições se aplicam:

  • Você restringe a granularidade do escopo de backup e restauração ao nível do namespace.
  • Nenhuma operação de limpeza e inatividade ocorre em cargas de trabalho durante a execução do backup.Isso pode resultar em máquinas virtuais com vários discos que não são consistentes com falhas após a restauração.

Os recursos ProtectedApplication são recursos opcionais de namespace do Kubernetes usados para personalizar o backup e a restauração de aplicativos individuais com estado. O recurso ProtectedApplication define quais recursos do Kubernetes pertencem a uma instância do aplicativo. É possível configurar manualmente uma orquestração especializada usando o comando kubectl para criar um backup e uma restauração desses aplicativos nos seguintes cenários:

  • Para identificar um conjunto de recursos em um namespace que possa ser armazenado em backup ou restaurado independentemente dos outros recursos desse namespace. Um ProtectedApplication é a entidade de namespace mais refinada que você pode identificar para um escopo de backup ou restauração.
  • Para fornecer uma orquestração de backup especializada sempre que o ProtectedApplication estiver no escopo de um backup. Em particular, se o ProtectedApplication contiver recursos PersistentVolumeClaim (PVC) diretamente ou por um modelo de um StatefulSet, você poderá executar hooks antes e depois de fazer backup dos volumes. Hooks são comandos que são executados em contêineres de aplicativos. Esses hooks são frequentemente usados para operações de limpeza, desativação ou reativação e fornecem um backup consistente do aplicativo.

Antes de começar

Para usar recursos ProtectedApplication, você precisa ter o seguinte:

  • É necessário definir o recurso ProtectedApplication antes de criar um plano de backup. Para mais informações, consulte Planejar um conjunto de backups.
  • O papel necessário de identidade e acesso:

    • Para usuários administradores da plataforma (PA, na sigla em inglês):
      • Administrador de backup de cluster de usuário: gerencia recursos de backup, como planos de backup e restauração em clusters de usuário. Peça ao administrador do IAM da organização para conceder a você o papel de administrador de backup de cluster de usuário (user-cluster-backup-admin).
    • Para usuários do operador de aplicativos (AO, na sigla em inglês):
      • Criador de backup: cria backups e restaurações manuais. Peça ao administrador do IAM do projeto para conceder a você o papel de criador de backup (backup-creator).
    • Para mais informações, consulte Definições de papéis.

Implantar recursos de aplicativos protegidos

Confira um exemplo de especificação Deployment com um recurso ProtectedApplication que faz backup de todos os recursos associados ao aplicativo durante o backup e restaura todos os recursos durante a restauração:

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

Especifique o ProtectedApplication na lista de selectedApplications no backupScope. Exemplo:

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

Este exemplo inclui os seguintes valores:

Valor Descrição
resourceSelection Define como identificar recursos que pertencem ao aplicativo protegido:
  • type: Especifique uma destas opções:
    • ApplicationName: faz backup de um aplicativo sig-apps no mesmo namespace.
    • Selector: faz backup de recursos que correspondem a um seletor específico no mesmo namespace.
  • applicationName: se type for ApplicationName, especifica o nome do aplicativo sig-apps no mesmo namespace.
  • selector: se type for Selector, especifica o seletor de rótulos para selecionar recursos no mesmo namespace.
components A lista de componentes do aplicativo protegido, como implantações ou conjuntos com estado:
  • name: o nome exclusivo do componente.
  • resourceKind: escolha entre Deployment ou StatefulSet.
  • resourceNames: a lista de nomes que identificam o resourceKind no namespace.

A seguir