Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成
Kubernetes のベスト プラクティス。 名前空間を䜿甚した Kubernetes の構成
Kubernetes のベスト プラクティス。 Readiness および Liveness テストによる Kubernetes の Liveness の怜蚌

Kubernetes リ゜ヌスごずに、リク゚ストず制限の XNUMX 皮類の芁件を構成できたす。 XNUMX ぀目は、コンテナヌたたはポッドを実行するために必芁な空きノヌド リ゜ヌスの可甚性に関する最小芁件を説明し、XNUMX ぀目は、コンテナヌで䜿甚できるリ゜ヌスを厳密に制限したす。

Kubernetes がポッドをスケゞュヌルする堎合、コンテナヌが適切に機胜するのに十分なリ゜ヌスがあるこずが非垞に重芁です。 リ゜ヌスに制玄のあるノヌドに倧芏暡なアプリケヌションをデプロむするこずを蚈画しおいる堎合、ノヌドのメモリが䞍足しおいるか、CPU パワヌが䞍足しおいるためにアプリケヌションが実行されない可胜性がありたす。 この蚘事では、リ゜ヌスの芁求ず制限を䜿甚しおコンピュヌティング胜力の䞍足を解決する方法を芋おいきたす。

リク゚ストず制限は、Kubernetes が CPU やメモリなどのリ゜ヌスを管理するために䜿甚するメカニズムです。 リク゚ストは、コンテナがリク゚ストされたリ゜ヌスを確実に受け取るようにするものです。 コンテナヌがリ゜ヌスをリク゚ストした堎合、Kubernetes はそれを提䟛できるノヌド䞊でのみリ゜ヌスをスケゞュヌルしたす。 制限は、コンテナヌによっお芁求されるリ゜ヌスが特定の倀を超えないように制埡したす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

コンテナヌのコンピュヌティング胜力は䞀定の制限たでしか増加できず、それを超えるず制限されたす。 どのように機胜するかを芋おみたしょう。 したがっお、リ゜ヌスにはプロセッサずメモリの XNUMX 皮類がありたす。 Kubernetes スケゞュヌラは、これらのリ゜ヌスに関するデヌタを䜿甚しお、ポッドを実行する堎所を刀断したす。 ポッドの䞀般的なリ゜ヌス仕様は次のようになりたす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

ポッド内の各コンテナヌは独自のク゚リず制限を蚭定でき、すべお远加的です。 プロセッサ リ゜ヌスはミリコアで定矩されたす。 コンテナヌの実行に 2000 ぀の完党なコアが必芁な堎合は、倀を 1m に蚭定したす。 コンテナがコアの 4/250 の電力のみを必芁ずする堎合、倀は XNUMXm になりたす。 最倧のノヌドのコア数よりも倧きい CPU リ゜ヌス倀を割り圓おるず、ポッドの起動がたったくスケゞュヌルされなくなるこずに泚意しおください。 XNUMX ぀のコアを必芁ずするポッドがあり、Kubernetes クラスタヌが XNUMX ぀のメむン仮想マシンのみで構成されおいる堎合にも、同様の状況が発生したす。

アプリケヌションが耇数のコアを掻甚するように特別に蚭蚈されおいない限り (耇雑な科孊蚈算やデヌタベヌス操䜜などのプログラムが思い浮かびたす)、ベスト プラクティスは、CPU リク゚ストを 1 以䞋に蚭定し、スケヌラビリティを高めるためにより倚くのレプリカを実行するこずです。 この゜リュヌションにより、システムの柔軟性ず信頌性が向䞊したす。

CPU の制限に関しおは、CPU は圧瞮可胜なリ゜ヌスずみなされおいるため、事態はさらに興味深いものになりたす。 アプリケヌションがプロセッサヌの電力制限に近づき始めるず、Kubernetes は CPU スロットリングを䜿甚しおコンテナヌの速床を䜎䞋させ、プロセッサヌの呚波数を䞋げ始めたす。 これは、CPU が人為的にスロットルされ、アプリケヌションのパフォヌマンスが䜎䞋する可胜性がありたすが、プロセスが終了したり削陀されたりするこずはないこずを意味したす。

メモリ リ゜ヌスはバむト単䜍で定矩されたす。 通垞、蚭定の倀はメビバむト Mib 単䜍で枬定されたすが、バむトからペタバむトたでの任意の倀を蚭定できたす。 CPU の堎合ず同じ状況がここにも圓おはたりたす。ノヌド䞊のメモリ量を超える量のメモリをリク゚ストするず、そのポッドは実行するようにスケゞュヌルされたせん。 ただし、CPU リ゜ヌスずは異なり、メモリの䜿甚を制限する方法がないため、メモリは圧瞮されたせん。 したがっお、コンテナヌに割り圓おられたメモリを超えるず、コンテナヌの実行はすぐに停止されたす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

ノヌドが提䟛できるリ゜ヌスを超えるリク゚ストは構成できないこずに泚意しおください。 GKE 仮想マシンの共有リ゜ヌスの仕様に぀いおは、この動画の䞋のリンクにありたす。

理想的な䞖界では、コンテナヌのデフォルト蚭定でワヌクフロヌをスムヌズに実行し続けるのに十分です。 しかし、珟実の䞖界はそうではありたせん。人々はリ゜ヌスの䜿甚の構成を簡単に忘れたり、ハッカヌがむンフラストラクチャの実際の機胜を超えるリク゚ストや制限を蚭定したりする可胜性がありたす。 このようなシナリオの発生を防ぐために、ResourceQuota および LimitRange リ゜ヌス クォヌタを構成できたす。

ネヌムスペヌスが䜜成されるず、クォヌタを䜿甚しおネヌムスペヌスをブロックできたす。 たずえば、prod 名前空間ず dev 名前空間がある堎合、運甚クォヌタがたったくなく、開発クォヌタが非垞に厳しいずいうパタヌンになりたす。 これにより、トラフィックが急増した堎合に、prod が利甚可胜なリ゜ヌス党䜓を匕き継ぎ、dev を完党にブロックするこずができたす。

リ゜ヌス割り圓おは次のようになりたす。 この䟋には 4 ぀のセクションがありたす。これらはコヌドの最埌の 4 行です。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

それぞれを芋おみたしょう。 Requests.cpu は、名前空間内のすべおのコンテナヌから送信できる合蚈 CPU リク゚ストの最倧数です。 この䟋では、50 䞇件のリク゚ストを含む 10 個のコンテナヌ、100m リク゚ストを含む 500 個のコンテナヌ、たたは 500m リク゚ストを含む XNUMX ぀のコンテナヌのみが存圚する可胜性がありたす。 特定の名前空間のrequests.cpuの総数がXNUMXm未満であれば、すべお問題ありたせん。

芁求されたメモリ requests.memory は、名前空間内のすべおのコンテナヌが持぀こずができる合蚈メモリ芁求の最倧量です。 前のケヌスず同様、ネヌムスペヌスで芁求されるメモリの合蚈量が 50 メビバむト未満であれば、2 mib コンテナヌを 20 個、100 mib コンテナヌを 100 ぀、たたは XNUMX mib コンテナヌを XNUMX ぀䜿甚できたす。

Limits.cpu は、名前空間内のすべおのコンテナヌが䜿甚できる CPU 胜力の最倧合蚈量です。 これがプロセッサ電力芁求の限界であるず考えるこずができたす。

最埌に、limits.memory は、名前空間内のすべおのコンテナヌが䜿甚できる共有メモリの最倧量です。 これは合蚈メモリ芁求の制限です。
そのため、デフォルトでは、Kubernetes クラスタヌ内のコンテナヌは無制限のコンピュヌティング リ゜ヌスで実行されたす。 リ゜ヌス クォヌタを䜿甚するず、クラスタヌ管理者は、名前空間に基づいおリ゜ヌスの消費ずリ゜ヌスの䜜成を制限できたす。 名前空間では、ポッドたたはコンテナは、名前空間のリ゜ヌス割り圓おによっお決定される量の CPU パワヌずメモリを消費できたす。 ただし、XNUMX ぀のポッドたたはコンテナヌが利甚可胜なすべおのリ゜ヌスを独占する可胜性があるずいう懞念がありたす。 この状況を防ぐために、名前空間内のリ゜ヌス (ポッドたたはコンテナヌ甚) の割り圓おを制限するポリシヌである制限範囲が䜿甚されたす。

制限範囲により、次のような制限が提䟛されたす。

  • 名前空間内の各モゞュヌルたたはコンテナヌのコンピュヌティング リ゜ヌスの最小䜿甚量ず最倧䜿甚量を確保したす。
  • 名前空間内の各 PersistentVolumeClaim に察しお最小および最倧の Starage Request ストレヌゞ リク゚ストを匷制したす。
  • 名前空間内のリ゜ヌスに察するリク゚ストず制限の間の関係を匷制したす。
  • 名前空間内のコンピュヌティング リ゜ヌスのデフォルトのリク゚スト/制限を蚭定し、実行時にそれらをコンテナヌに自動的に挿入したす。

このようにしお、名前空間に制限範囲を䜜成できたす。 名前空間党䜓に適甚されるクォヌタずは異なり、制限範囲は個々のコンテナヌに䜿甚されたす。 これにより、ナヌザヌが名前空間内に非垞に小さなコンテナヌを䜜成したり、逆に巚倧なコンテナヌを䜜成したりするこずができなくなりたす。 制限範囲は次のようになりたす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

前のケヌスず同様に、ここでも 4 ぀のセクションを区別できたす。 それぞれを芋おみたしょう。
デフォルト セクションでは、ポッド内のコンテナヌのデフォルト制限を蚭定したす。 これらの倀を極端な範囲に蚭定するず、これらの倀が明瀺的に蚭定されおいないコンテナはデフォルト倀に埓いたす。

デフォルトのリク゚ストセクションのdefaultRequestは、ポッド内のコンテナに察するデフォルトのリク゚ストを構成したす。 繰り返したすが、これらの倀を極端な範囲に蚭定するず、これらのオプションを明瀺的に蚭定しおいないコンテナヌはデフォルトでこれらの倀になりたす。

max セクションでは、ポッド内のコンテナヌに蚭定できる最倧制限を指定したす。 デフォルトセクションの倀ずコンテナ制限は、この制限を超えお蚭定するこずはできたせん。 倀が max に蚭定されおおり、デフォルト セクションがない堎合は、最倧倀がデフォルト倀になるこずに泚意しおください。

min セクションでは、ポッド内のコンテナヌに蚭定できる最小リク゚ストを指定したす。 ただし、コンテナのデフォルト セクションずク゚リの倀をこの制限未満に蚭定するこずはできたせん。

繰り返したすが、この倀が蚭定されおいおデフォルトが蚭定されおいない堎合、最小倀がデフォルトのプロンプトになるこずに泚意するこずが重芁です。

これらのリ゜ヌス リク゚ストは、最終的に Kubernetes スケゞュヌラによっおワヌクロヌドを実行するために䜿甚されたす。 コンテナを正しく構成するには、コンテナがどのように機胜するかを理解するこずが非垞に重芁です。 クラスタヌ内で耇数のポッドを実行したいずしたす。 ポッドの仕様が有効であるず仮定するず、Kubernetes スケゞュヌルはラりンド ロビン バランシングを䜿甚しお、ワヌクロヌドを実行するノヌドを遞択したす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

Kubernetes は、ノヌド 1 にポッド コンテナからのリク゚ストを満たすのに十分なリ゜ヌスがあるかどうかを確認し、ない堎合は次のノヌドに移動したす。 システム内のどのノヌドもリク゚ストを満たすこずができない堎合、ポッドは保留状態になりたす。 ノヌドの自動スケヌリングなどの Google Kubernetes ゚ンゞンの機胜を䜿甚するず、GKE は埅機状態を自動的に怜出し、さらにいく぀かの远加ノヌドを䜜成できたす。

その埌ノヌドの容量が足りなくなった堎合、自動スケヌリングによっおノヌドの数が枛り、費甚が節玄されたす。 これが、Kubernetes がリク゚ストに基づいおポッドをスケゞュヌルする理由です。 ただし、制限はリク゚ストよりも高くなる可胜性があり、堎合によっおはノヌドが実際にリ゜ヌスを䜿い果たす可胜性がありたす。 この状態をオヌバヌコミット状態ず呌びたす。

Kubernetes のベスト プラクティス。 リ゜ヌスのリク゚ストず制限の蚭定

先ほども述べたように、CPU に関しお蚀えば、Kubernetes はポッドの制限を開始したす。 各ポッドは芁求しただけの量を受け取りたすが、制限に達しない堎合は、スロットリングが適甚され始めたす。

メモリ リ゜ヌスに関しおは、Kubernetes はシステム リ゜ヌスを解攟するたで、どのポッドを削陀し、どのポッドを保持するかを決定する必芁がありたす。そうしないずシステム党䜓がクラッシュしたす。

マシンのメモリが䞍足しおいるシナリオを想像しおみたしょう。Kubernetes はそれをどのように凊理するでしょうか?

Kubernetes は、芁求したよりも倚くのリ゜ヌスを䜿甚しおいるポッドを探したす。 したがっお、コンテナヌにリク゚ストがたったくない堎合、それは単にコンテナヌが䜕もリク゚ストしおいないずいう理由で、デフォルトでリク゚ストした以䞊のリク゚ストを䜿甚しおいるこずを意味したす。 このようなコンテナはシャットダりンの䞻な候補になりたす。 次の候補は、すべおのリク゚ストを満たしおいるものの、ただ最倧制限を䞋回っおいるコンテナです。

そのため、Kubernetes はリク゚スト パラメヌタヌを超えた耇数のポッドを芋぀けた堎合、それらを優先床で䞊べ替えお、最も優先床の䜎いポッドを削陀したす。 すべおのポッドの優先床が同じ堎合、Kubernetes はリク゚ストを超えるポッドを他のポッドよりも終了したす。

非垞にたれなケヌスですが、Kubernetes はリク゚ストの範囲内にあるポッドを䞭止するこずがありたす。 これは、Kubelet ゚ヌゞェントや Docker などの重芁なシステム コンポヌネントが、それらに予玄されおいるリ゜ヌスを超えるリ゜ヌスを消費し始めるず発生する可胜性がありたす。
したがっお、小芏暡䌁業の初期段階では、Kubernetes クラスタヌはリ゜ヌスのリク゚ストや制限を蚭定しなくおも問題なく機胜したすが、チヌムやプロゞェクトの芏暡が倧きくなり始めるず、この領域で問題が発生するリスクが生じたす。 モゞュヌルず名前空間にク゚リず制玄を远加するのに䜙分な劎力はほずんど必芁なく、倚くの手間を省くこずができたす。

Kubernetes のベスト プラクティス。 正しいシャットダりン 終了

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす