Eu tenho um cluster kubernetes de nó único no Google Container Engine para brincar.
Duas vezes agora, um pequeno site pessoal que hospedo nele ficou offline por alguns minutos. Quando vejo os logs do contêiner, vejo a sequência normal de inicialização concluída recentemente, então presumo que um contêiner morreu (ou foi morto?) E reiniciado.
Como posso descobrir o como e o porquê disso acontecer?
Existe uma maneira de obter um alerta sempre que um contêiner inicia/pára inesperadamente?
Você pode visualizar os logs da última reinicialização de um contêiner usando:
Conforme descrito por Sreekanth, kubectl get pods deve mostrar o número de reinicializações, mas você também pode executar
E mostrará os eventos enviados pelo kubelet ao apiserver sobre os eventos de ciclo de vida do pod.
Você também pode escrever uma mensagem final em /dev/termination-log, e isso aparecerá conforme descrito na documentação .
Além das respostas anteriores, outro comando que me ajudou a encontrar um erro é:
kubectl get event [--namespace=my-namespace]
Ele lista eventos de Pods, Jobs, Nodes também
Eu sigo estas etapas para definir o motivo da falha:
kubectl get pods listará todas as reinicializações do contêiner e o comando describe pode ser útil porque lista todos os eventos associados ao pod.
Sondas de vivacidade e de prontidão podem ser configuradas para melhor manuseio, verifique aqui
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Além disso, os ganchos podem ser configurados para serem consumidos no contêiner em pontos específicos do ciclo de vida do contêiner, verifique aqui
https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
Quando reiniciado
kubectl describe pod your-pod-name
Procure uma seção como esta:
A interpretação acima é a seguinte:
Wed, 23 Jun 2021 23:46:52 +1000
após ter iniciado emWed, 23 Jun 2021 23:46:48 +1000
, e agora está em execução e pronto, tendo sido iniciado pela última vez emWed, 23 Jun 2021 23:52:05 +1000
Uma solicitação pull agora foi mesclada no marco kubernetes 1.22, para adicionar
LAST RESTART
coluna akubectl get pods
, e estará disponível assim que for lançada - veja aqui. https://github.com/kubernetes/kubernetes/pull/100142Para ver sua versão atual -
kubernetes version
(1.21 é o último lançamento em 28 de junho de 2021)
Se reiniciado
kubectl get po [your-pod-name]
O pod foi reiniciado em algum estágio se houver algum número naRESTARTS
colunaPor que reiniciou
kubectl describe pod [your-pod-name]
mostrará umLast State
que lhe dá uma indicação de alto nível. Para ver o que aconteceu no pod antes de reiniciar, usekubectl logs your-pod-name --previous
. Você pode canalizar isso para um arquivo para inspeção, por exemplokubectl logs your-pod-name --previous > pod_previous_log.txt
(Veja também acima em 'Quando reiniciado')