Como reiniciar um deployment no Kubernetes
O Kubernetes não tem um comando de "reiniciar pod": ele troca pods. O jeito certo de reiniciar uma aplicação é o rollout restart, que cria pods novos aos poucos, seguindo a estratégia do Deployment, sem derrubar tudo de uma vez.
1. Reinicie
kubectl rollout restart deployment/<nome> -n <namespace>
kubectl rollout restart statefulset/<nome> -n <namespace>
kubectl rollout restart daemonset/<nome> -n <namespace> 2. Acompanhe
O status espera até todos os pods novos ficarem prontos, ou mostra onde travou:
kubectl rollout status deployment/<nome> -n <namespace>
kubectl get pods -n <namespace> -w O que o rollout restart faz
Ele grava a anotação kubectl.kubernetes.io/restartedAt no template dos pods. O template muda, o Deployment cria um ReplicaSet novo e troca os pods respeitando maxSurge, maxUnavailable e as probes de readiness. Se os pods novos não ficam prontos, os antigos continuam atendendo.
Quando reiniciar resolve
- Depois de mudar um ConfigMap ou Secret usado como variável de ambiente: o pod só lê as variáveis ao iniciar.
- Para pegar uma imagem nova com a mesma tag, quando imagePullPolicy é Always.
- Para destravar uma aplicação que perdeu conexão e não se recupera sozinha. Se precisa disso sempre, falta uma liveness probe.
As outras formas, e por que evitar
- kubectl delete pod <pod>: o ReplicaSet cria outro na hora. Serve para um pod só, mas apagar todos de uma vez derruba o serviço.
- kubectl scale --replicas=0 e depois de volta: derruba tudo até os pods novos subirem. Só quando a aplicação não pode ter duas versões rodando juntas.
Voltar se der errado
kubectl rollout undo deployment/<nome> -n <namespace>
kubectl rollout history deployment/<nome> -n <namespace> Sem terminal, no Kubepier
No plano Pro do Kubepier, o botão Reiniciar faz o mesmo que o kubectl rollout restart em Deployments, StatefulSets e DaemonSets, e a lista de pods mostra os novos subindo, de qualquer cluster, no navegador ou no celular.