如何判斷 kubernetes 叢集中的容器何時/是否/為何重新啟動?

如何判斷 kubernetes 叢集中的容器何時/是否/為何重新啟動?

我在 google 容器引擎中有一個單節點 kubernetes 叢集可以使用。

我在其中託管的一個小型個人網站已經兩次離線幾分鐘了。當我查看容器的日誌時,我看到正常的啟動序列最近完成,因此我假設容器死亡(或被殺死?)並重新啟動。

我怎麼能弄清楚發生這種情況的方式和原因?

有沒有辦法在容器意外啟動/停止時收到警報?

答案1

您可以使用以下命令查看容器的上次重新啟動日誌:

kubectl 日誌 podname -c 容器名稱 --previous

正如 Sreekanth 所描述的,kubectl get pods 應該顯示重新啟動的次數,但你也可以運行

kubectl 描述 pod podname

它將向您顯示 kubelet 傳送到 apiserver 的有關 pod 生命週期事件的事件。

您也可以將最終訊息寫入 /dev/termination-log,這將按中所述顯示文件

答案2

除了前面的答案之外,另一個幫助我找到錯誤的命令是:

kubectl get event [--namespace=my-namespace]

它還列出了來自 Pod、作業、節點的事件

答案3

我按照以下步驟來定義失敗的原因:

# 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

答案4

重新啟動時

kubectl describe pod your-pod-name

尋找這樣的部分:

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 

上述解釋如下:

  • Wed, 23 Jun 2021 23:46:52 +1000該 Pod啟動後被終止Wed, 23 Jun 2021 23:46:48 +1000,現在正在運行並準備就緒,上次啟動於Wed, 23 Jun 2021 23:52:05 +1000

拉取請求現已合併到 kubernetes 1.22 里程碑中,以將LAST RESTART列新增至kubectl get pods,一旦發布即可使用 - 請參閱此處。 https://github.com/kubernetes/kubernetes/pull/100142

要查看您目前的版本 -kubernetes version

(1.21 是截至 2021 年 6 月 28 日的最新版本)

如果重新啟動

kubectl get po [your-pod-name]RESTARTS如果列 中有任何數字,則 Pod 在某個階段重新啟動

為什麼重啟

kubectl describe pod [your-pod-name]將顯示Last State,為您提供高等級的指示。若要查看 Pod 重新啟動之前發生的情況,請使用kubectl logs your-pod-name --previous。您可以將其傳輸到文件以進行檢查,例如

kubectl logs your-pod-name --previous > pod_previous_log.txt

(另請參閱上文「重新啟動時」下的內容)

相關內容