Kubernetes Pod が削除されるとはどういう意味ですか?これらは通常、リソース不足のために終了しますが、なぜこのようなことが起こるのでしょうか? 削除は、ノードに割り当てられたポッドを終了するように要求するプロセスです。 Kubernetes で最も一般的な状況の 1 つはプリエンプションです。これは、リソースが限られたノードに新しい Pod をスケジュールするには、通常、別の Pod を終了する必要がある状況です。 さらに、Kubernetes はリソースの使用状況を常にチェックし、ノードの圧力が高すぎる場合はノードの圧力の排除をトリガーします。 毎日、何千ものポッドが家から追い出されています。立ち往生し、道に迷った彼らは、これまでの生活様式を諦めなければなりませんでした。彼らの中にはホームレスになる人もいるかもしれない。今日の社会では、CPU とメモリに対する要件はますます高くなります。 この記事では、以下の点について紹介します。 ポッドの排除の理由: プリエンプションとノードのプレッシャー 先制的な立ち退き ポッド優先クラス ノードストレス除去 サービス品質 その他の種類の立ち退き Prometheus での Kubernetes ポッドの排除監視 Kubernetes で Pod の削除が発生する理由はいくつかありますが、最も重要なものは次のとおりです。 押収する ノードストレス除去 先制的な立ち退きプリエンプションのプロセスは次のとおりです。新しい Pod をスケジュールする必要があるが、十分なリソースを持つ適切なノードがない場合、kube-scheduler は、新しい Pod をスケジュールできることを確認するために、優先順位の低い Pod の一部を削除 (終了) できるかどうかを確認します。 まず、Kubernetes のスケジューリングがどのように機能するかを理解しましょう。 ポッドのスケジューリングKubernetes スケジューリングは、ポッドをノードに割り当てるプロセスです。 デフォルトでは、コントロール プレーン上で実行される、スケジューリングを担当する kube-scheduler と呼ばれる Kubernetes エンティティがあります。一致するノードが見つかるまで、ポッドは保留状態で開始されます。 ポッドをノードに割り当てるプロセスは、この順序に従います。
事前選考事前選択プロセス中に、kube-scheduler は現在の Pod を配置できるすべてのノードを選択します。ここでは、汚染や耐性などの特性が考慮されます。完了すると、そのポッドに適したノードのリストが表示されます。 スコアリングスコアリング プロセス中に、kube-scheduler は前の手順で取得したリストから各ノードにスコアを割り当てます。このようにして、候補ノードは最も適切なものから最も不適切なものの順に並べ替えられます。 2 つのノードのスコアが同じ場合、kube-scheduler はそれらをシャッフルします。 画像.png しかし、ポッドを実行するのに適したノードがない場合はどうなりますか?この場合、Kubernetes はプリエンプション プロセスを開始し、新しい Pod を割り当てられるように、優先度の低い Pod を排除しようとします。 ポッド優先クラスプリエンプション中に特定のポッドが排除されるのを防ぐにはどうすればよいですか?場合によっては、特定の Pod が重要であり、終了してはならないことがあります。 そのため、Kubernetes には優先クラスがあります。 優先度クラスは、数値の優先度値を特定のポッドにマッピングできる Kubernetes オブジェクトです。値が高いものはより重要と分類され、立ち退きの可能性が低くなります。 現在の優先クラスを照会するには、次の方法があります。 kubectl 優先度クラスを取得する テスト優先クラスここにはブルーベリー、ラズベリー、ストロベリーの 3 つのポッドがあります。 名前 準備完了 ステータス 再起動 年齢 優先クラスには、trueberry と falseberry の 2 つがあります。その中で、trueberry の方が優先度が高いです。 apiバージョン:スケジューリング.k8s .io / v1
つまり、プリエンプションが発生した場合、優先度の高いポッドのためのスペースを確保するために、ラズベリーとストロベリーが削除される可能性が高くなります。 次に、Pod 定義に優先クラスを含めて、Pod に優先クラスを割り当てます。 優先度クラス名: trueberry ここで、さらに 3 つの果物を追加してみましょう。すべての新しい果物には、trueberry と呼ばれる優先度の高いクラスが含まれます。 これら 3 つの新しいフルーツのメモリまたは CPU 要件はノードによって満たすことができないため、kubelet は新しいフルーツよりも優先度が低いすべての Pod を削除します。 Blueberry は優先度が高いため実行を続けます。 名前 準備完了 ステータス 再起動 年齢 最終結果は次のとおりです。 名前 準備完了 ステータス 再起動 年齢 ノードストレス除去プリエンプションに加えて、Kubernetes はディスク負荷、CPU、メモリ不足 (OOM) などのノード リソースを継続的にチェックします。 ノードのリソース消費量 (CPU やメモリなど) が特定のしきい値に達すると、Kubelet はリソースを解放するために Pod の削除を開始します。削除順序を決定する際には、サービス品質 (QoS) が考慮されます。 サービス品質 (QoS)Kubernetes では、ポッドに 3 つの QoS クラスのいずれかが割り当てられ、リソース不足によりポッドが排除される可能性が定義されます。 3 つの QoS は次のとおりです。
これらの QoS カテゴリは Pod にどのように割り当てられるのでしょうか?これは、CPU とメモリの制限と要求に基づいています。
保証ポッドに保証された QoS レベルが割り当てられている場合、その特性は次のようになります。
保証されたポッドは、通常の状況では、ノード内の別のポッドに割り当てられるために追い出されることはありません。 バースト可能Pod の QoS レベルが Burstable の場合、QoS レベルが割り当てられます。
Burstable Pod は排除される可能性がありますが、次のカテゴリよりも可能性は低くなります。 ベストエフォートPod には BestEffort の QoS クラスが割り当てられ、次のようになります。
ノード内でノード ストレス プロセスが発生した場合、BestEffort Pod が削除される可能性が最も高くなります。 重要: 一時ストレージなど、制限やリクエストで使用可能な他のリソースが存在する場合もありますが、それらは QoS クラスの計算には使用されません。 前述のように、ノード ストレスの排除では QoS クラスが考慮されます。内部で何が起きているかを示します。 kubelet は、次の順序で削除する Pod をキューに入れます。
Kubernetes は、2 番目のグループの Pod よりも先に、最初のグループの Pod を削除しようとします。 上記の内容から得られたいくつかの洞察。
その他の種類の立ち退きこの記事では、プリエンプションとノード圧力による削除に焦点を当てていますが、ポッドは他の方法でも削除できます。例: API によるエビクションKubernetes Eviction API [1]を使用すると、ノードの1つからオンデマンドでポッドの削除を要求できます。 汚染ベースの排除Kubernetes の taint と toleration を使用すると、Pod をノードに割り当てる方法を指示できます。ただし、既存のノードに NoExecute テイントを適用すると、それを許容しないすべての Pod が直ちに削除されます。 ノード排水ノードが使用できなくなったり、もうそのノードで作業したくないと思う場合があります。 kubectl cordon コマンドを使用すると、新しい Pod がスケジュールされるのを防ぐことができますが、現在のすべての Pod を一度に完全にクリアすることもできます。 kubectl drain nodename を実行すると、そのノード内のすべての Pod が、正常な終了期間に従って削除されます。 Kubernetes ポッドの排除監視クラウド ソリューションでは、Prometheus を使用して Pod の削除方法を簡単に監視できます。 kube_pod_status_reason { reasnotallow = "立ち退き" } > 0 これにより、クラスター内で削除されたすべてのポッドが表示されます。これを kube_pod_status_phase{phase="Failed"} と組み合わせて、ポッドが失敗した後に削除されたポッドにアラートを出すこともできます。 さらに詳しく知りたい場合は、Prometheus でのリソースの監視に関する次の記事を参照してください。
要約するご覧のとおり、エビクションは、限られたリソース (この場合は、ポッドが使用するノード) を制御できる Kubernetes のもう 1 つの機能です。 プリエンプション中、Kubernetes は優先度の低いポッドを排除して、新しいポッドをスケジュールするためのリソースを解放しようとします。優先度クラスを使用すると、どの Pod が排除される可能性が低いかによって、プリエンプション後に実行を継続する可能性が高いかを制御できます。 実行中、Kubernetes はノードの負荷をチェックし、必要に応じて Pod を削除します。 QoS クラスを使用すると、ノードに負荷がかかった場合にどの Pod が排除される可能性が高いかを制御できます。 メモリと CPU はノード内の重要なリソースであり、適切な量のメモリと CPU を使用するようにポッド、コンテナ、ノードを構成する必要があります。これらのリソースを適切に管理すれば、コストを節約できるだけでなく、どのような状況でも重要なプロセスが継続して実行されるようにすることができます。 【1】https://sysdig.com/blog/kubernetes-resource-limits/ 【2】https://sysdig.com/blog/kubernetes-capacity-planning/ |
<<: CIO 向けハイパフォーマンス コンピューティング ワークロードをクラウドに移行するためのガイド
>>: 2023 年のクラウド コンピューティング インフラストラクチャのトレンド
bluevm が最新の KVM VPS プロモーションをリリースした後、初心者の友人から使い方が分か...
現在のホスティング市場の価格はますます高くなっています。Bluehost に代表されるブログホストは...
「百度ウエイト」という言葉がますます注目を集めています。百度ウエイトが本当に存在するかどうかに関わら...
Linodeはどうですか? Linode Canada クラウド サーバーはいかがでしょうか?カナダ...
今日、クラウド ネイティブ テクノロジーは、企業に迅速な配信の利点をもたらすだけでなく、新たなセキュ...
今では、大規模なウェブサイトから小規模なセルフメディアプラットフォームまで、誰もが訪問者を維持する方...
1. 米国議会はフェイスブックのIPO初日の失敗について公聴会を開く予定北京時間6月15日朝のニュー...
キーワードランキングのみに重点を置き、コンテンツ(画像)の最適化を無視する企業ウェブサイトが増えてお...
Hostcat は、myserverplanet のボスから特別な VPS を受け取りました。1G ...
ビットコインに代表される暗号通貨の台頭に伴い、「ブロックチェーン」という概念も話題になっています。し...
全体の売上から判断すると、国内の共同購入業界は依然として活況を呈している。しかし、これはすべての共同...
8月18日、世界最高峰のデータサイエンスカンファレンス「KDD 2022」の受賞者が発表されました。...
[[318600]]導入 1960 年代と 1970 年代には、ソフトウェア開発者は、通常、メインフ...
Douban は成功した製品であると同時に、失敗した製品でもあります。 Douban がユーザー エ...
[[421933]] kafka_2.8.0 より前では、kafka を実行するには依然として zo...