Restaurar uma carga de trabalho de um snapshot de pod

Saiba como restaurar uma carga de trabalho de um snapshot de pod salvo, gerenciar os snapshots atuais e desativar os snapshots de pod do Google Kubernetes Engine (GKE).

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Gerenciar snapshots

Quando você cria um snapshot de pod, um recurso personalizado PodSnapshot é criado para armazenar o estado do pod naquele momento. O campo status desse recurso indica se a operação de snapshot foi bem-sucedida e se o snapshot está disponível para restaurações.

Para conferir todos os recursos PodSnapshot em um namespace, execute o seguinte comando:

kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE

A saída será assim:

NAME                                   STATUS                  POLICY           AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4   AllSnapshotsAvailable   example-policy   47h

Restaurar uma carga de trabalho de um snapshot

Para restaurar sua carga de trabalho do snapshot mais recente, exclua o pod atual depois que um snapshot for criado e, em seguida, reimplante o pod. Como alternativa, implante um novo pod com uma especificação idêntica. O GKE restaura automaticamente o pod do snapshot correspondente.

As etapas a seguir mostram como um pod é restaurado de um snapshot correspondente ao excluir e reimplantar o pod:

  1. Exclua o pod:

    kubectl delete -f POD_NAME.yaml
    

    Substitua POD_NAME pelo nome do pod, por exemplo, my-app.

  2. Aplique o pod novamente:

    kubectl apply -f POD_NAME.yaml
    
  3. Confira os registros para confirmar a restauração do snapshot:

    kubectl logs my-app --namespace NAMESPACE
    

    A saída depende de como você configurou o aplicativo. No aplicativo de exemplo em Python, os registros mostram GKE Pod Snapshot: restore quando uma operação de restauração ocorre.

Restaurar de um snapshot específico

Por padrão, o GKE restaura as cargas de trabalho do recurso PodSnapshot mais recente que corresponde ao pod. Quando um snapshot é criado, o GKE gera automaticamente um nome exclusivo (UUID) para o recurso PodSnapshot, que você pode conferir executando kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.

Para restaurar uma carga de trabalho de um recurso PodSnapshot mais antigo ou específico, adicione a anotação podsnapshot.gke.io/ps-name à especificação do pod da carga de trabalho, especificando o nome do recurso PodSnapshot a ser usado para restaurar a carga de trabalho:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  namespace: NAMESPACE
  labels:
    app: my-app
  annotations:
    podsnapshot.gke.io/ps-name: "POD_SNAPSHOT_NAME"
spec:
  serviceAccountName: KSA_NAME
  runtimeClassName: gvisor
  containers:
  ...

Substitua:

  • POD_SNAPSHOT_NAME: o nome do snapshot que você quer restaurar. Para conferir os nomes dos snapshots, execute o comando kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
  • NAMESPACE: o namespace do pod.
  • KSA_NAME: o nome da KSA.

Para que o GKE use o snapshot especificado para restauração, a condição de status do recurso PodSnapshot precisa ser Ready e estar no mesmo namespace do pod. Se o PodSnapshot não for Ready ou não existir no mesmo namespace do pod, a carga de trabalho vai realizar uma inicialização a frio em vez de restaurar de um snapshot.

Correspondência e compatibilidade de snapshots

Quando o GKE restaura um pod de um snapshot, ele precisa determinar qual snapshot é compatível. A compatibilidade é determinada por regras como a ordem de seleção, os critérios de correspondência (com base no escopo whole-pod x rootfs-only) e a correspondência de regras de agrupamento.

Para uma referência detalhada sobre requisitos de correspondência, critérios de compatibilidade e os campos de especificação que influenciam a compatibilidade, consulte Correspondência e compatibilidade de snapshots de pods.

Desativar snapshots

A remoção do CRD PodSnapshotPolicy impede que os pods sejam capturados e restaurados. Os pods em execução não são afetados pela exclusão de recursos. No entanto, se você excluir a política enquanto um pod estiver sendo salvo ou restaurado, ele poderá entrar em um estado de falha.

Para desativar a criação de snapshots e a restauração de novos pods regidos por uma política, exclua o PodSnapshotPolicy executando o seguinte comando:

kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE

Substitua SNAPSHOT_POLICY pelo nome do PodSnapshotPolicy que você quer excluir, por exemplo, example-pod-snapshot-policy.

Também é possível excluir um recurso PodSnapshot específico para que os pods não sejam mais restaurados desse snapshot específico. A exclusão do recurso PodSnapshot também remove os arquivos armazenados no Cloud Storage.

Para impedir que um snapshot específico seja usado em restaurações futuras, exclua o objeto PodSnapshot executando o seguinte comando:

kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE

Substitua POD_SNAPSHOT_NAME pelo nome do snapshot que você quer excluir, por exemplo, example-podsnapshot.

A seguir

Saiba como resolver problemas com snapshots de pods.