Eu tenho um cluster Kubernetes de nó único no mecanismo de contêiner do Google para brincar.
Duas vezes agora, um pequeno site pessoal que hospedo nele ficou offline por alguns minutos. Quando visualizo 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 como e por que isso aconteceu?
Existe uma maneira de receber um alerta sempre que um contêiner inicia/para inesperadamente?
Responder1
Você pode visualizar os últimos logs de reinicialização de um contêiner usando:
kubectl registra podname -c containername --anterior
Conforme descrito por Sreekanth, kubectl get pods deve mostrar o número de reinicializações, mas você também pode executar
kubectl descreve pod podname
E mostrará eventos enviados pelo kubelet ao apiserver sobre os eventos do ciclo de vida do pod.
Você também pode escrever uma mensagem final em /dev/termination-log, e ela aparecerá conforme descrito emos documentos.
Responder2
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 e nós também
Responder3
Sigo estas etapas para definir o motivo da falha:
# print out a pod logs (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs)
kubectl logs {name_of_pod} -n {namespace} --since=2h --timestamps
# print the logs for the _previous_ instance of the container in a pod if it exists
kubectl logs -p {name_of_pod} -n {namespace} --previous
# check events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#describe)
kubectl describe pod {pod_name} -n {namespace}
# look at the 'Events' at the end of the output
# ..
# Events:
# Type Reason Age From Message
# ---- ------ ---- ---- -------
# Warning BackOff 40m kubelet, gke-xx Back-off restarting failed container
# ..
# observe all events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get)
kubectl get events -n {namespace} --sort-by=.metadata.creationTimestamp
# check logs, etc. in pod container (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#exec)
kubectl exec -it {pod_name} -n {namespace} -- sh
Responder4
Quando reiniciado
kubectl describe pod your-pod-name
Procure uma seção como esta:
State: Running
Started: Wed, 23 Jun 2021 23:52:05 +1000
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Wed, 23 Jun 2021 23:46:48 +1000
Finished: Wed, 23 Jun 2021 23:46:52 +1000
Ready: True
A interpretação do acima é a seguinte:
- O pod foi encerrado
Wed, 23 Jun 2021 23:46:52 +1000
após ter sido iniciado àsWed, 23 Jun 2021 23:46:48 +1000
, e agora está em execução e pronto, tendo sido iniciado pela última vez àsWed, 23 Jun 2021 23:52:05 +1000
Uma solicitação pull agora foi incorporada ao marco do Kubernetes 1.22, para adicionar LAST RESTART
coluna ao kubectl get pods
, e estará disponível assim que for lançado - veja aqui.
https://github.com/kubernetes/kubernetes/pull/100142
Para ver sua versão atual -kubernetes version
(1.21 é a versão mais recente em 28 de junho de 2021)
Se reiniciado
kubectl get po [your-pod-name]
O pod foi reiniciado em algum momento se houver algum número na RESTARTS
coluna
Por que reiniciado
kubectl describe pod [your-pod-name]
mostrará um Last State
que fornece uma indicação de alto nível. Para ver o que aconteceu no pod antes de ele ser reiniciado, use kubectl logs your-pod-name --previous
. Você pode canalizar isso para um arquivo para inspeção, por exemplo
kubectl logs your-pod-name --previous > pod_previous_log.txt
(Veja também acima em 'Quando reiniciado')