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
(上記の「再起動時」も参照)