Como posso saber quando/se/por que um contêiner em um cluster Kubernetes é reiniciado?

Como posso saber quando/se/por que um contêiner em um cluster Kubernetes é reiniciado?

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 +1000após ter sido iniciado às Wed, 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 RESTARTcoluna 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 RESTARTScoluna

Por que reiniciado

kubectl describe pod [your-pod-name]mostrará um Last Stateque 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')

informação relacionada