Skip to main content
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Gerenciar ganchos de execução do Trident Protect

Colaboradores netapp-aruldeepa

Um gancho de execução é uma ação personalizada que você pode configurar para ser executada em conjunto com uma operação de proteção de dados de um aplicativo gerenciado. Por exemplo, se você tiver um aplicativo de banco de dados, poderá usar um gancho de execução para pausar todas as transações do banco de dados antes de um instantâneo e retomar as transações após a conclusão do instantâneo. Isso garante instantâneos consistentes com o aplicativo.

Tipos de ganchos de execução

O Trident Protect suporta os seguintes tipos de ganchos de execução, com base em quando eles podem ser executados:

  • Pré-instantâneo

  • Pós-instantâneo

  • Pré-backup

  • Pós-backup

  • Pós-restauração

  • Pós-failover

Ordem de execução

Quando uma operação de proteção de dados é executada, os eventos de gancho de execução ocorrem na seguinte ordem:

  1. Todos os ganchos de execução de pré-operação personalizados aplicáveis são executados nos contêineres apropriados. Você pode criar e executar quantos ganchos de pré-operação personalizados precisar, mas a ordem de execução desses ganchos antes da operação não é garantida nem configurável.

  2. Congelamentos do sistema de arquivos ocorrem, se aplicável. "Saiba mais sobre como configurar o congelamento do sistema de arquivos com o Trident Protect.".

  3. A operação de proteção de dados é realizada.

  4. Sistemas de arquivos congelados são descongelados, se aplicável.

  5. Todos os ganchos de execução pós-operação personalizados aplicáveis são executados nos contêineres apropriados. Você pode criar e executar quantos ganchos pós-operação personalizados precisar, mas a ordem de execução desses ganchos após a operação não é garantida nem configurável.

Se você criar vários ganchos de execução do mesmo tipo (por exemplo, pré-instantâneo), a ordem de execução desses ganchos não será garantida. Entretanto, a ordem de execução de ganchos de diferentes tipos é garantida. Por exemplo, a seguir está a ordem de execução de uma configuração que possui todos os diferentes tipos de ganchos:

  1. Ganchos pré-instantâneos executados

  2. Ganchos pós-instantâneos executados

  3. Ganchos de pré-backup executados

  4. Ganchos pós-backup executados

Observação O exemplo de ordem anterior só se aplica quando você executa um backup que não utiliza um snapshot existente.
Observação Você deve sempre testar seus scripts de gancho de execução antes de habilitá-los em um ambiente de produção. Você pode usar o comando 'kubectl exec' para testar os scripts convenientemente. Depois de habilitar os ganchos de execução em um ambiente de produção, teste os snapshots e backups resultantes para garantir que sejam consistentes. Você pode fazer isso clonando o aplicativo em um namespace temporário, restaurando o snapshot ou backup e, em seguida, testando o aplicativo.
Observação Se um gancho de execução pré-snapshot adicionar, alterar ou remover recursos do Kubernetes, essas alterações serão incluídas no snapshot ou backup e em qualquer operação de restauração subsequente.

Notas importantes sobre ganchos de execução personalizados

Considere o seguinte ao planejar ganchos de execução para seus aplicativos.

  • Um gancho de execução deve usar um script para executar ações. Muitos ganchos de execução podem referenciar o mesmo script.

  • O Trident Protect exige que os scripts usados ​​pelos ganchos de execução sejam escritos no formato de scripts shell executáveis.

  • O tamanho do script é limitado a 96 KB.

  • O Trident Protect utiliza as configurações de ganchos de execução e quaisquer critérios correspondentes para determinar quais ganchos são aplicáveis ​​a uma operação de snapshot, backup ou restauração.

Observação Como os ganchos de execução geralmente reduzem ou desabilitam completamente a funcionalidade do aplicativo em que estão sendo executados, você deve sempre tentar minimizar o tempo que seus ganchos de execução personalizados levam para serem executados. Se você iniciar uma operação de backup ou snapshot com ganchos de execução associados, mas depois cancelá-la, os ganchos ainda poderão ser executados se a operação de backup ou snapshot já tiver começado. Isso significa que a lógica usada em um gancho de execução pós-backup não pode assumir que o backup foi concluído.

Filtros de gancho de execução

Ao adicionar ou editar um gancho de execução para um aplicativo, você pode adicionar filtros ao gancho de execução para gerenciar quais contêineres o gancho corresponderá. Os filtros são úteis para aplicativos que usam a mesma imagem de contêiner em todos os contêineres, mas podem usar cada imagem para uma finalidade diferente (como o Elasticsearch). Os filtros permitem que você crie cenários em que os ganchos de execução são executados em alguns contêineres idênticos, mas não necessariamente em todos. Se você criar vários filtros para um único gancho de execução, eles serão combinados com um operador lógico AND. Você pode ter até 10 filtros ativos por gancho de execução.

Cada filtro que você adiciona a um gancho de execução usa uma expressão regular para corresponder aos contêineres no seu cluster. Quando um gancho corresponde a um contêiner, o gancho executará seu script associado naquele contêiner. Expressões regulares para filtros usam a sintaxe Regular Expression 2 (RE2), que não oferece suporte à criação de um filtro que exclua contêineres da lista de correspondências. Para obter informações sobre a sintaxe que o Trident Protect suporta para expressões regulares em filtros de gancho de execução, consulte "Suporte à sintaxe de Expressão Regular 2 (RE2)" .

Observação Se você adicionar um filtro de namespace a um gancho de execução executado após uma operação de restauração ou clonagem e a origem e o destino da restauração ou clonagem estiverem em namespaces diferentes, o filtro de namespace será aplicado somente ao namespace de destino.

Exemplos de ganchos de execução

Visite o "Projeto NetApp Verda GitHub" para baixar ganchos de execução reais para aplicativos populares, como Apache Cassandra e Elasticsearch. Você também pode ver exemplos e obter ideias para estruturar seus próprios ganchos de execução personalizados.

Crie um gancho de execução

Você pode criar um gancho de execução personalizado para um aplicativo usando o Trident Protect. Você precisa ter permissões de Proprietário, Administrador ou Membro para criar ganchos de execução.

Use um CR
Passos
  1. Crie o arquivo de recurso personalizado (CR) e dê um nome a ele. trident-protect-hook.yaml .

  2. Configure os seguintes atributos para corresponder ao seu ambiente Trident Protect e à configuração do cluster:

    • metadata.name: (Obrigatório) O nome deste recurso personalizado; escolha um nome único e adequado ao seu ambiente.

    • spec.applicationRef: (Obrigatório) O nome do aplicativo Kubernetes para o qual o gancho de execução será executado.

    • spec.stage: (Obrigatório) Uma string que indica em qual etapa da ação o gancho de execução deve ser executado. Valores possíveis:

      • Pré

      • Publicar

    • spec.action: (Obrigatório) Uma string que indica qual ação o gancho de execução tomará, assumindo que todos os filtros de gancho de execução especificados sejam correspondidos. Valores possíveis:

      • Instantâneo

      • Backup

      • Restaurar

      • Failover

    • spec.enabled: (Opcional) Indica se este gancho de execução está habilitado ou desabilitado. Caso não seja especificado, o valor padrão é verdadeiro.

    • spec.hookSource: (Obrigatório) Uma string contendo o script de gancho codificado em base64.

    • spec.timeout: (Opcional) Um número que define por quanto tempo, em minutos, o gancho de execução pode ser executado. O valor mínimo é de 1 minuto, e o valor padrão é de 25 minutos caso não seja especificado.

    • spec.arguments: (Opcional) Uma lista YAML de argumentos que você pode especificar para o gancho de execução.

    • spec.matchingCriteria: (Opcional) Uma lista opcional de pares de chave-valor de critérios, cada par constituindo um filtro de gancho de execução. Você pode adicionar até 10 filtros por gancho de execução.

    • spec.matchingCriteria.type: (Opcional) Uma string que identifica o tipo de filtro do gancho de execução. Valores possíveis:

      • Imagem do contêiner

      • Nome do contêiner

      • Nome do Pod

      • PodLabel

      • Nome do Namespace

    • spec.matchingCriteria.value: (Opcional) Uma string ou expressão regular que identifica o valor do filtro do gancho de execução.

      Exemplo de YAML:

    apiVersion: protect.trident.netapp.io/v1
    kind: ExecHook
    metadata:
      name: example-hook-cr
      namespace: my-app-namespace
      annotations:
        astra.netapp.io/astra-control-hook-source-id: /account/test/hookSource/id
    spec:
      applicationRef: my-app-name
      stage: Pre
      action: Snapshot
      enabled: true
      hookSource: IyEvYmluL2Jhc2gKZWNobyAiZXhhbXBsZSBzY3JpcHQiCg==
      timeout: 10
      arguments:
        - FirstExampleArg
        - SecondExampleArg
      matchingCriteria:
        - type: containerName
          value: mysql
        - type: containerImage
          value: bitnami/mysql
        - type: podName
          value: mysql
        - type: namespaceName
          value: mysql-a
        - type: podLabel
          value: app.kubernetes.io/component=primary
        - type: podLabel
          value: helm.sh/chart=mysql-10.1.0
        - type: podLabel
          value: deployment-type=production
  3. Após preencher o arquivo CR com os valores corretos, aplique o CR:

    kubectl apply -f trident-protect-hook.yaml
Use a CLI
Passos
  1. Crie o gancho de execução, substituindo os valores entre colchetes por informações do seu ambiente. Por exemplo:

    tridentctl-protect create exechook <my_exec_hook_name> --action <action_type> --app <app_to_use_hook> --stage <pre_or_post_stage> --source-file <script-file> -n <application_namespace>

Executar manualmente um gancho de execução

Você pode executar manualmente um gancho de execução para fins de teste ou se precisar executá-lo novamente após uma falha. Você precisa ter permissões de Proprietário, Administrador ou Membro para executar ganchos de execução manualmente.

A execução manual de um gancho de execução consiste em duas etapas básicas:

  1. Crie um backup de recursos, que coleta recursos e cria um backup deles, determinando onde o gancho será executado.

  2. Execute o gancho de execução no backup.

Passo 1: Crie um backup de recursos
Use um CR
Passos
  1. Crie o arquivo de recurso personalizado (CR) e dê um nome a ele. trident-protect-resource-backup.yaml .

  2. Configure os seguintes atributos para corresponder ao seu ambiente Trident Protect e à configuração do cluster:

    • metadata.name: (Obrigatório) O nome deste recurso personalizado; escolha um nome único e adequado ao seu ambiente.

    • spec.applicationRef: (Obrigatório) O nome do aplicativo Kubernetes para o qual o backup do recurso será criado.

    • spec.appVaultRef: (Obrigatório) O nome do AppVault onde o conteúdo do backup está armazenado.

    • spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do backup é armazenado. Você pode usar o seguinte comando para encontrar esse caminho:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'

      Exemplo de YAML:

    ---
    apiVersion: protect.trident.netapp.io/v1
    kind: ResourceBackup
    metadata:
      name: example-resource-backup
    spec:
      applicationRef: my-app-name
      appVaultRef: my-appvault-name
      appArchivePath: example-resource-backup
  3. Após preencher o arquivo CR com os valores corretos, aplique o CR:

    kubectl apply -f trident-protect-resource-backup.yaml
Use a CLI
Passos
  1. Crie o backup, substituindo os valores entre colchetes pelas informações do seu ambiente. Por exemplo:

    tridentctl protect create resourcebackup <my_backup_name> --app <my_app_name> --appvault <my_appvault_name> -n <my_app_namespace> --app-archive-path <app_archive_path>
  2. Veja o status do backup. Você pode usar este comando de exemplo repetidamente até que a operação seja concluída:

    tridentctl protect get resourcebackup -n <my_app_namespace> <my_backup_name>
  3. Verifique se o backup foi bem-sucedido:

    kubectl describe resourcebackup <my_backup_name>
Etapa 2: Execute o gancho de execução
Use um CR
Passos
  1. Crie o arquivo de recurso personalizado (CR) e dê um nome a ele. trident-protect-hook-run.yaml .

  2. Configure os seguintes atributos para corresponder ao seu ambiente Trident Protect e à configuração do cluster:

    • metadata.name: (Obrigatório) O nome deste recurso personalizado; escolha um nome único e adequado ao seu ambiente.

    • spec.applicationRef: (Obrigatório) Certifique-se de que este valor corresponda ao nome do aplicativo do ResourceBackup CR que você criou na etapa 1.

    • spec.appVaultRef: (Obrigatório) Certifique-se de que este valor corresponda ao appVaultRef do ResourceBackup CR que você criou na etapa 1.

    • spec.appArchivePath: Certifique-se de que esse valor corresponda ao appArchivePath do ResourceBackup CR que você criou na etapa 1.

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.action: (Obrigatório) Uma string que indica qual ação o gancho de execução tomará, assumindo que todos os filtros de gancho de execução especificados sejam correspondidos. Valores possíveis:

      • Instantâneo

      • Backup

      • Restaurar

      • Failover

    • spec.stage: (Obrigatório) Uma string que indica em qual etapa da ação o gancho de execução deve ser executado. Esta sequência de ganchos não utilizará ganchos em nenhuma outra etapa. Valores possíveis:

      • Pré

      • Publicar

        Exemplo de YAML:

    ---
    apiVersion: protect.trident.netapp.io/v1
    kind: ExecHooksRun
    metadata:
      name: example-hook-run
    spec:
      applicationRef: my-app-name
      appVaultRef: my-appvault-name
      appArchivePath: example-resource-backup
      stage: Post
      action: Failover
  3. Após preencher o arquivo CR com os valores corretos, aplique o CR:

    kubectl apply -f trident-protect-hook-run.yaml
Use a CLI
Passos
  1. Crie a solicitação de execução manual do gancho (hook):

    tridentctl protect create exechooksrun <my_exec_hook_run_name> -n <my_app_namespace> --action snapshot --stage <pre_or_post> --app <my_app_name> --appvault <my_appvault_name> --path <my_backup_name>
  2. Verifique o status da execução do gancho (hook). Você pode executar este comando repetidamente até que a operação seja concluída:

    tridentctl protect get exechooksrun -n <my_app_namespace> <my_exec_hook_run_name>
  3. Descreva o objeto exechooksrun para ver os detalhes finais e o status:

    kubectl -n <my_app_namespace> describe exechooksrun <my_exec_hook_run_name>