Kubernetes クラスター内のコンテナがいつ、再起動するか、なぜ再起動するかを知るにはどうすればよいですか?

Kubernetes クラスター内のコンテナがいつ、再起動するか、なぜ再起動するかを知るにはどうすればよいですか?

Google Container Engine に単一ノードの Kubernetes クラスターがあり、試してみることができます。

これまでに 2 回、このコンテナでホストしている小さな個人用 Web サイトが数分間オフラインになりました。コンテナのログを表示すると、通常の起動シーケンスが最近完了したことがわかるので、コンテナが停止 (または強制終了?) して再起動したと考えられます。

なぜこのようなことが起こるのか、どうすればわかるのでしょうか?

コンテナが予期せず起動/停止したときにアラートを受け取る方法はありますか?

答え1

コンテナの最後の再起動ログを表示するには、以下を使用します。

kubectl ログ ポッド名 -c コンテナ名 --previous

Sreekanthが説明したように、kubectl get podsは再起動の回数を表示しますが、以下を実行することもできます。

kubectl ポッドのポッド名を記述します

また、ポッドのライフサイクルイベントに関して、kubelet から apiserver に送信されたイベントが表示されます。

/dev/termination-logに最終メッセージを書き込むこともできます。これは、次のように表示されます。ドキュメント

答え2

前の回答の他に、エラーを見つけるのに役立った別のコマンドは次のとおりです。

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

ポッド、ジョブ、ノードからのイベントもリストします

答え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は に開始された後に終了されましたWed, 23 Jun 2021 23:46:48 +1000が、最後に に開始されてから現在実行中で準備完了です。Wed, 23 Jun 2021 23:52:05 +1000

LAST RESTART列を追加するためのプル リクエストが kubernetes 1.22 マイルストーンにマージされました。kubectl get podsリリースされると利用できるようになります。こちらをご覧ください。 https://github.com/kubernetes/kubernetes/pull/100142

現在のバージョンを確認するには -kubernetes version

(2021年6月28日時点の最新リリースは1.21です)

再起動した場合

kubectl get po [your-pod-name]RESTARTS列 に数字がある場合は、ポッドはどこかの段階で再起動されました

なぜ再開したのか

kubectl describe pod [your-pod-name]は、高レベルの指標を示す を表示しますLast State。再起動前にポッドで何が起こったかを確認するには、 を使用しますkubectl logs your-pod-name --previous。これをファイルにパイプして検査することができます。例:

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

(上記の「再起動時」も参照)

関連情報