この包括的なガイドでは、Kubernetes 環境における一般的な Pod の異常を診断し、解決するための体系的なアプローチを提供します。スケジューリングの問題、イメージの問題、起動の失敗、Readiness の懸念、リソースの制約などを対象としています。
クイックリファレンスガイド
このクイックリファレンスを使用して、症状に基づいて一般的な Pod の問題を特定し、解決します:
症状 | 考えられる原因 | 即時対応 |
| スケジューリングの制約またはリソース不足 | ノードリソースとスケジューリングポリシーの確認 |
| イメージレジストリの接続性または認証の問題 | imagePullSecrets とレジストリアクセスの検証 |
| アプリケーションの起動失敗または構成エラー | コンテナーログと起動コマンドの確認 |
| ヘルスチェックプローブの失敗 | readiness プローブ構成の検証 |
| 不十分なメモリ割り当てまたはメモリリーク | メモリ制限の調整とアプリケーションのメモリ使用量の確認 |
体系的な診断プロセス
この構造化されたアプローチに従って、Pod の異常を体系的に特定し、解決します:
フェーズ 1:初期評価
コンソールまたは kubectl を使用して Pod のステータスを確認します:
kubectl get pods -n <namespace>Pod のイベントを調べてエラーメッセージを確認します:
kubectl describe pod <pod-name> -n <namespace>コンテナーのログをレビューしてアプリケーションレベルのエラーを確認します:
kubectl logs <pod-name> -n <namespace> --previous
フェーズ 2:スケジューリングの問題
Pod が Pending ステータスのままになる
Pod が Pending ステータスのままの場合、スケジューリングの制約とリソースの可用性を調査します。
エラーメッセージ | 根本原因 | 解決手順 |
| クラスター内に利用可能な正常なノードがない |
|
| リソース要求がノードの容量を超えています |
|
| ノードのラベリングが Pod のスケジューリング要件と一致していません。 |
|
リソース最適化戦略
効果的なリソース管理により、スケジューリングの問題を防止し、クラスターの利用効率を最適化できます。
コンソールによる最適化
クラスターノード管理ページに移動します。
CPU/メモリのリクエスト割り当て率を確認します。
リソース使用率が低いワークロードを特定し、適切なサイズ(rightsizing)を実施します。
動的なレプリカ数調整のために Auto Scaling(HPA)を有効化します。
コマンドラインによる最適化
# ノードのリソース使用率を表示
kubectl top nodes
# Pod のリソースリクエストを確認
kubectl describe pod <pod-name> -n <namespace> | grep -A 10 "Resources:"
# 推奨事項のためのリソースプロファイリングを有効化
# (自動リソース最適化を実現するコンソール機能)フェーズ 3: イメージプルの失敗
一般的なイメージプルエラー
エラータイプ | 原因 | ソリューション |
| イメージレジストリへのネットワーク接続性の問題 | ノードからのレジストリ接続性をテストする |
| 認証失敗または認証情報の不足 | imagePullSecrets の構成を確認する |
| PullNever ポリシーでローカルにイメージが見つからない | プルポリシーを変更するか、イメージの可用性を確保する |
イメージプルのトラブルシューティング手順
イメージリポジトリの URL とタグの正確性を確認する
imagePullSecrets が存在し、正しく参照されていることを確認する
ワーカーノードからのレジストリ接続性をテストする:
crictl pull <registry-address>/<image>:<tag> curl -v https://<registry-address>レジストリ認証情報を検証する
レジストリへのアクセスを許可するネットワークポリシーを確認する
フェーズ 4:アプリケーションの起動に関する問題
CrashLoopBackOff の分析
コンテナーが繰り返しクラッシュする場合、アプリケーションまたは構成に根本的な問題が存在します。
調査手順
クラッシュ原因を特定するため、以前のコンテナーログを確認します:
kubectl logs <pod-name> --previous -n <namespace>コンテナーの起動コマンドおよび引数を確認します
環境変数および構成を検証します
必要な依存関係およびサービスの可用性を確認します
アプリケーションのヘルスチェック構成を確認します
よくあるクラッシュ原因
起動コマンドの欠落または誤り
構成ファイルのエラー、またはファイルの欠落
依存サービスの利用不可
権限不足またはセキュリティ制約による実行失敗
ポート競合またはバインド失敗
起動時のリソース制限違反
フェーズ 5: Readiness とヘルスチェックの問題
Pod は実行中だが準備未完了 (Ready: False)
Pod のステータスが Running と表示されているにもかかわらず readiness プローブに失敗する場合は、ヘルスチェックの構成を調査してください。
検証チェックリスト
readiness プローブのエンドポイントが存在し、正しく応答することを確認します。
プローブのタイムアウトと失敗のしきい値の設定を確認します。
プローブのエンドポイントへのネットワーク接続をチェックします。
プローブのポートがアプリケーションのリッスンポートと一致することを検証します。
プローブのパスがアプリケーションのルートと一致することを確認します。
一時的な回避策
調査中にトラフィックを許可するために、一時的に readiness プローブを無効化します:
コンソールから Pod のターミナルにアクセスするか、`kubectl exec` を使用します。
`curl` または `wget` コマンドを使用して、ヘルスエンドポイントを手動でテストします。
readiness チェックなしでアプリケーションが正しく機能していることを確認します。
根本原因を特定するために、メトリックとログを収集します。
調査結果に基づいて readiness プローブの構成を調整します。
問題が解決したら、readiness プローブを再度有効化します。
この回避策は、調査目的でのみ一時的に使用してください。本番環境では、必ず readiness プローブを再度有効化してください。
フェーズ6:リソースとメモリの問題
OOMKilled状態の分析
メモリ不足の状況はPodの終了を引き起こし、慎重なリソース管理が必要です。
調査手順
OOM killログを確認します。
kubectl logs <pod-name> --previous -n <namespace> | grep -i oomメモリ使用パターンとスパイクを分析します。
アプリケーションコード内のメモリリークを確認します。
JavaアプリケーションのJVMヒープ設定 (-Xmxパラメーター) を確認します。
メモリリソース制限を実際の使用量に対して検証します。
メモリ最適化
アプリケーションが正当により多くのRAMを必要とする場合は、メモリ制限を増やします。
メモリプロファイリングを実装して使用パターンを特定します。
アプリケーションのメモリ割り当てとGCを最適化します。
動的メモリ調整のために垂直Pod自動スケーリングを検討します。
サービス品質を確保するために適切なメモリリクエストを設定します。
よくある質問
実行中の Pod が正常に動作しない問題
アプリケーション構成の問題により、Pod が正常に動作しないまま実行されることがあります。
コンテナーの構成が想定通りであることを確認してください。
YAML 構成に構文エラーがないか確認してください。
環境変数の値とシークレットを検証してください。
サービスディスカバリーと DNS 名前解決を確認してください。
該当する場合、コンテナー間の通信をテストしてください。
Completed 状態について
ジョブや init コンテナーなどの特定のワークロードでは、プロセスが正常に終了すると Pod が Completed 状態に移行しますが、これは正常な動作です。
トラブルシューティングの一般的なインターフェイス
包括的な Pod のトラブルシューティングを行うには、Container Service for Kubernetes (ACK) コンソールから以下のインターフェイスにアクセスします。
操作 | コンソールインターフェイス |
Pod のステータスおよび基本情報を表示 | クラスター > ワークロード > Pod |
Pod の構成を確認 | Pod 詳細 ページ > 構成 タブ |
Pod のイベントを確認 | Pod 詳細 ページ > イベント タブ |
コンテナーのログにアクセス | Pod 詳細 ページ > ログ タブ |
コンテナーのターミナルに接続 | Pod 詳細 ページ > ターミナルアクセス |
Pod の診断機能を有効化 | Pod 詳細 ページ > 診断ツール |