ポッドの再始動が繰り返し失敗するまたはポッドが予期せず除去されるのはなぜですか?
仮想プライベート・クラウド クラシック・インフラストラクチャー
ポッドは正常ですが、予期せずに除去されたり、再始動ループから抜け出せなくなったりします。 場合によっては、コンテナは CrashLoopBackOff
。
コンテナーがリソース制限を超えているか、または、ポッドがより優先度の高いポッドに置き換えられている可能性があります。 Kubernetes コンテナが繰り返し起動に失敗すると、 CrashLoopBackOff
状態になり、ポッド内で持続的な再起動ループが発生していることを示す。 このエラーは、コンテナの正常な起動を妨げるさまざまな問題が原因で発生することが多い。 一般的な原因としては、メモリ不足、リソースの過負荷、デプロイメントエラー、DNSエラーなどのサードパーティサービスの問題、依存関係の欠落、ポートの競合によるコンテナの失敗などが考えられる。
以下のセクションを参照してください。
コンテナー・リソース制限の修正
- ポッドの名前を取得します。 ラベルを使用していた場合は、それを使用して結果をフィルタリングできます。
kubectl get pods --selector='app=wasliberty'
- ポッドに対して describe を実行して、Restart Count を検索します。
kubectl describe pod
- ポッドが短時間で何回も再始動していた場合は、その状況をフェッチします。
kubectl get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
- 理由を確認します。 例えば、
OOM Killed
はメモリ不足を意味し、リソース制限のためにコンテナがクラッシュしていることを示す。 - リソースが満たされるようにワーカープールのサイズを変更するなどして、クラスタに容量を追加します。 詳しくは、 クラシック・ワーカー・プールのサイズ変更 または VPC ワーカー・プールのサイズ変更 を参照してください。
優先度が高いポッドによるポッド置換の修正
ポッドがより優先度の高いポッドに置き換えられているかどうかを確認するには、以下のようにします。
-
ポッドの名前を取得します。
kubectl get pods
-
ポッドの YAML を記述します。
kubectl get pod <pod_name> -o yaml
-
priorityClassName
フィールドを調べます。-
priorityClassName
フィールドに値がない場合、対象ポッドの優先度クラスはglobalDefault
です。 クラスター管理者がglobalDefault
優先度クラスを設定しなかった場合、デフォルトはゼロ (0)、つまり最も低い優先度です。 より高い優先度クラスを持つポッドによって、対象ポッドが置き換わる (または削除される) ことがあります。 -
priorityClassName
フィールドに値がある場合は、優先度クラスを取得します。kubectl get priorityclass <priority_class_name> -o yaml
-
value
フィールドを書き留め、ポッドの優先度を調べます。
-
-
クラスター内の既存の優先度クラスをリストします。
kubectl get priorityclasses
-
それぞれの優先度クラスについて YAML ファイルを取得し、
value
フィールドを書き留めます。kubectl get priorityclass <priority_class_name> -o yaml
-
対象ポッドの優先度クラスの値を他の優先度クラスの値と比較し、優先度が他のクラスより高いか低いかを調べます。
-
クラスター内の他のポッドについてもステップ 1 から 3 を繰り返し、使用されている優先度クラスを確認します。 これらの他のポッドの優先度クラスが対象ポッドより高い場合、対象ポッドおよび優先度が高い各ポッドに十分なリソースが用意されるまで、対象ポッドはプロビジョンされません。
-
クラスタ管理者に連絡して、クラスタに容量を追加し、正しい優先クラスが割り当てられていることを確認してください。