ポッド保留は、成熟度の高い Kubernetes クラスターでも広く見られます。 Kubernetes を扱う DevOps エンジニアに、彼らの悪夢を悩ませる最も一般的なエラーを特定するようにランダムに尋ねると、ポッド保留が非常に一般的な問題である可能性が高くなります (おそらく CrashLoopBackOff に次ぐ)。 アップデートをプッシュしようとしてそれが停止してしまうと、DevOps は不安に陥る可能性があります。解決策がかなり単純な場合でも、ポッドがハングしている理由を見つけ、適用する必要がある変更を理解することが重要です (Kubernetes のトラブルシューティングはめったに簡単ではありません)。 この記事では、この問題につながるさまざまな状況を明らかにし、DevOps チームが迅速に解決策を見つけ、そして最も重要なことに、可能であればこの問題を回避できるようにします。 Kubernetes Pod が保留中とはどういう意味ですか?Kubernetes の Pod のライフサイクルは、いくつかの異なるフェーズで構成されます。
ほとんどのポッドは、保留状態から実行状態に移行するのに数秒しかかからず、ほとんどの時間をその状態で過ごします。 この時点で、Pod は Kubernetes クラスターによって受け入れられています。ただし、1 つ以上のコンテナーはまだサービスを提供できる状態ではありません。これには、ポッドがスケジュールを待機するのにかかる時間と、ネットワーク経由でコンテナ イメージをダウンロードするのにかかる時間が含まれます。 ポッドが PendingtoRunning フェーズから進むことができない場合、ライフサイクルは停止し、進むのを妨げている問題が修正されるまでポッドを保持します。 kubectl を使用してポッドを一覧表示すると、Kubernetes ポッドがハングしていることを示す出力が表示されます。 問題を修正しない限り、ポッドは停止し、実行されなくなります。 Kubernetes ポッド保留の一般的な原因のトラブルシューティングPod の実行を妨げる理由はいくつかありますが、ここでは主に次の 3 つの問題について説明します。
最初のものが最も一般的ですが、最後のものはまれです。それぞれのケースを詳しく説明しましょう。 Kubernetes Pod Pending の原因となるスケジュールの問題Pod が作成されると、Kubernetes クラスターが最初に行うことは、いずれかのノードで Pod を実行するようにスケジュールすることです。このプロセスは通常非常に高速であり、ポッドはそれを実行するのに十分なリソースを持つノードにすぐに割り当てられます。 配置するには、クラスター内のポッドは、要求されていないリソースがさらに多いノードに割り当てられ、要求に対する SLO 準拠の応答で満たされた楽しく素晴らしい生活を続けます。 ただし、このプロセスが毎回機能する場合、クラスターがポッドを割り当てられない原因となる要因がいくつかあります。 最も一般的なものを確認してみましょう。 どのノードにもポッドを割り当てるのに十分なリソースがありませんKubernetes は、スケジューリング要求を使用して、fits ノードにポッドがあるかどうかを決定します。リソースの実際の使用状況は重要ではなく、他のポッドが要求したものだけが重要です。 有効なリクエスト ポッドのメモリと CPU に参加するのに十分なリクエスト可能なリソースがある場合、ポッドはノードにスケジュールされます。また、ノードが実行できるポッドの最大数に達していない必要があります。 ポッドのすべての要件を満たすノードがない場合、一部のリソースが解放されるまで、Kubernetes ポッドは保留状態のままになります。 スケジュール不可能なノードさまざまな問題 (ノードのストレス) または人間の行動 (ノードのブロッキング) により、ノードがスケジュール不能になる場合があります。これらのノードは、状態が変化するまでポッドをスケジュールしません。 汚染と寛容テイントは、異なるノードに割り当てることができるポッドを制限できる Kubernetes のメカニズムです。ノードに taint がある場合、そのノードでは許容範囲に一致するポッドのみが実行できます。 このメカニズムにより、異なるワークロードに異なるタイプのノード (GPU を備えたノード、異なる CPU/メモリ比のノードなど) を使用するなど、Kubernetes の特別な使用が可能になります。 それぞれの原因を個別に説明したとしても、スケジュールの問題はこれらの問題の組み合わせによって発生することがよくあります。一部のノードがいっぱいで他のノードが汚染されているためスケジュールできないことが多く、また、メモリ不足のためにノードをスケジュールできないこともあります。 スケジューリングの問題が何であるかを調べるには、ポッドに関してスケジューラによって生成されたイベントを確認する必要があります。このイベントには、ノードの割り当てを妨げている原因が詳細に説明されています。イベントを表示するには、kubectl describe を使用できます。次に例を示します。 正確な理由は出力のメッセージで確認できます。
この問題を解決するには、2 つの選択肢があります。
現在実行中のワークロードを更新する場合、考慮すべきもう 1 つの重要な要素として、アップグレード戦略があります。 この戦略により、Kubernetes は更新中にワークロードが通常よりも多くのポッドを作成できるようにし、新しいポッドが作成されている間、古いポッドを一定期間保持することができます。これは、ワークロードが一定期間、予想よりも多くのリソースを要求する可能性があることを意味します。クラスターに十分な予備リソースがない場合、更新はブロックされ、プロセスがブロック解除されるまで (またはロールバック タイムアウトによって更新が停止されるまで) 一部のポッドは保留状態になります。 画像の問題によりポッドは保留中ポッドがノードに割り当てられると、kubelet はポッド内のすべてのコンテナを起動しようとします。これを行うには、イメージをダウンロードして実行しようとします。 画像のダウンロードを妨げる可能性のあるエラーがいくつかあります。
依存関係の問題によりKubernetes Podがハングするポッドが起動する前に、kubelet は他の Kubernetes 要素とのすべての依存関係をチェックしようとします。これらの依存関係のいずれかを満たすことができない場合、依存関係が満たされるまでポッドは保留状態のままになります。 この場合、kubectl はポッドを次のように表示します。 このイベントでは、次のことがわかります。 メッセージ列には、不足している要素を正確に特定するのに十分な情報が表示されます。一般的な原因は次のとおりです:
結論はポッドが保留フェーズのままである理由を理解することは、Kubernetes でワークロードを安全にデプロイおよび更新するための鍵となります。問題を素早く特定し、展開を高速化できれば、頭痛の種が減り、ダウンタイムが短縮されます。 |
<<: Kubernetes (K8s) を使って昇進や昇給をより簡単にする方法
>>: StackShareからインスピレーションを得て、Linode Marketplaceで便利なツールを見つけましょう
A5ウェブマスターネットワーク(www.admin5.com)は6月13日、アリババグループとUCブ...
delimiter.com は、もともと中古の低価格サーバーのホスティングとレンタルを専門とする企業...
最近、同じ質問をする多くの顧客から連絡を受けました。彼らはウェブサイトに多くの時間を費やし、インター...
VMware Distributed Resource Scheduler (DRS) は、ワークロ...
国内主要ビットコイン取引プラットフォーム一覧新浪テクノロジー 張南規制当局からの連絡はなく、公式文書...
UltimateHostings は 2010 年に設立された VPS プロバイダーです。年末プロモ...
インターネットの健全な発展に伴い、検索エンジンは医薬品業界に対してますます高い基準を設定してきました...
Tmall のセレブショップを開いてみると、ほとんどすべてのショップの売上がひどいことがわかります。...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo が大規模なマ...
Baidu の「検索エンジン最適化ガイド 2.0」には、「インターネット上には、同じコンテンツやサー...
中国の新興企業であるaccloudsは、主にKVM仮想化ベースのVPSを運営しています。現在は、日本...
西安名物食品はもともとニューヨークの路上でタピオカミルクティーや西安の軽食を売る屋台だった。わずか数...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です理論的には、十分に長い SEO ...
最近、国内大手3社が相次いで2021年の業績を発表し、それぞれのクラウドコンピューティング事業に注力...
独立系共同購入ナビゲーションサイト「Tuan800」の最新データによると、今年11月の国内主流共同購...