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.
- Verifique se você preparou o ambiente e acionou um snapshot da sua carga de trabalho. Para mais informações, consulte os seguintes recursos:
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:
Exclua o pod:
kubectl delete -f POD_NAME.yamlSubstitua
POD_NAMEpelo nome do pod, por exemplo,my-app.Aplique o pod novamente:
kubectl apply -f POD_NAME.yamlConfira os registros para confirmar a restauração do snapshot:
kubectl logs my-app --namespace NAMESPACEA saída depende de como você configurou o aplicativo. No aplicativo de exemplo em Python, os registros mostram
GKE Pod Snapshot: restorequando 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 comandokubectl 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.