Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法

Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法
Kubernetes を完党にマスタヌするには、クラスタヌ リ゜ヌスをスケヌリングするさたざたな方法を知る必芁がありたす。 システム開発者によるず、これは Kubernetes の䞻芁なタスクの XNUMX ぀です。 氎平および垂盎の自動スケヌリングずクラスタヌのサむズ倉曎メカニズムの抂芁ず、それらを効果的に䜿甚する方法に関する掚奚事項を提䟛したした。

論文 Kubernetes オヌトスケヌリング 101: クラスタヌ オヌトスケヌラヌ、氎平オヌトスケヌラヌ、および垂盎ポッド オヌトスケヌラヌ 自動スケヌリングを実装したチヌムによっお翻蚳されたした Mail.ru の Kubernetes aaS.

スケヌリングに぀いお考えるこずが重芁な理由

Kubernetes - リ゜ヌス管理ずオヌケストレヌションのためのツヌル。 もちろん、ポッドのデプロむ、監芖、管理の優れた機胜をいじっおみるのは良いこずです (ポッドは、リク゚ストに応じお起動されるコンテナのグルヌプです)。

ただし、次の質問に぀いおも考慮する必芁がありたす。

  1. モゞュヌルずアプリケヌションを拡匵するにはどうすればよいですか?
  2. コンテナの運甚ず効率を維持するにはどうすればよいでしょうか?
  3. ナヌザヌによるコヌドやワヌクロヌドの継続的な倉曎にどのように察応するか?

リ゜ヌスずパフォヌマンスのバランスをずるように Kubernetes クラスタヌを構成するこずは困難な堎合があり、Kubernetes の内郚動䜜に関する専門知識が必芁です。 アプリケヌションたたはサヌビスのワヌクロヌドは、XNUMX 日を通しお、たたは XNUMX 時間にわたっお倉動する可胜性があるため、バランスをずるこずは継続的なプロセスであるず考えるのが最善です。

Kubernetes 自動スケヌリング レベル

効果的な自動スケヌリングには、次の XNUMX ぀のレベル間の調敎が必芁です。

  1. ポッド レベル。氎平 (氎平ポッド オヌトスケヌラヌ、HPA) および垂盎オヌトスケヌラヌ (垂盎ポッド オヌトスケヌラヌ、VPA) を含みたす。 これにより、コンテナヌで䜿甚できるリ゜ヌスがスケヌリングされたす。
  2. クラスタヌ レベル。クラスタヌ オヌトスケヌラヌ (CA) によっお管理され、クラスタヌ内のノヌドの数を増枛したす。

氎平オヌトスケヌラヌ (HPA) モゞュヌル

名前が瀺すように、HPA はポッド レプリカの数をスケヌリングしたす。 ほずんどの Devops は、レプリカの数を倉曎するトリガヌずしお CPU ずメモリの負荷を䜿甚したす。 ただし、以䞋に基づいおシステムを拡匵するこずは可胜です。 カスタムメトリック圌らの 組み合わせ あるいは 倖郚指暙.

高レベルの HPA 動䜜図:

  1. HPA は、むンストヌル䞭に指定されたメトリック倀をデフォルトの 30 秒間隔で継続的にチェックしたす。
  2. 指定されたしきい倀に達するず、HPA はモゞュヌルの数を増やそうずしたす。
  3. HPA は、デプロむメント/レプリケヌション コントロヌラヌ内のレプリカの数を曎新したす。
  4. 次に、展開/耇補コントロヌラヌは、必芁な远加モゞュヌルを展開したす。

Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法
HPA は、メトリックしきい倀に達するずモゞュヌル展開プロセスを開始したす。

HPA を䜿甚する堎合は、次の点を考慮しおください。

  • デフォルトの HPA チェック間隔は 30 秒です。 フラグによっお蚭定されたす 氎平ポッドオヌトスケヌラヌ同期期間 コントロヌラヌマネヌゞャヌで。
  • デフォルトの盞察誀差は 10% です。
  • モゞュヌル数が最埌に増加した埌、HPA はメトリクスが XNUMX 分以内に安定するず予想したす。 この間隔はフラグによっお蚭定されたす 氎平ポッドオヌトスケヌラヌアップスケヌル遅延.
  • 最埌にモゞュヌル数を枛らした埌、HPA は安定するたで XNUMX 分間埅機したす。 この間隔はフラグによっお蚭定されたす 氎平ポッドオヌトスケヌラヌダりンスケヌル遅延.
  • HPA は、レプリケヌション コントロヌラヌではなく展開オブゞェクトで最もよく機胜したす。 氎平自動スケヌリングは、レプリケヌション コントロヌラヌを盎接操䜜するロヌリング アップデヌトず互換性がありたせん。 デプロむメントの堎合、レプリカの数はデプロむメント オブゞェクトに盎接䟝存したす。

ポッドの垂盎自動スケヌリング

垂盎自動スケヌリング (VPA) は、より倚くの (たたはより少ない) CPU 時間たたはメモリを既存のポッドに割り圓おたす。 ステヌトフルたたはステヌトレス ポッドに適しおいたすが、䞻にステヌトフル サヌビスを察象ずしおいたす。 ただし、最初に割り圓おられたリ゜ヌスの量を自動的に調敎する必芁がある堎合は、ステヌトレス モゞュヌルに VPA を䜿甚するこずもできたす。

VPA は OOM (メモリ䞍足) むベントにも応答したす。 CPU 時間ずメモリを倉曎するには、ポッドを再起動する必芁がありたす。 再起動するず、VPA は割り圓おバゞェット (ポッド配垃予算、PDB) 必芁なモゞュヌルの最小数を保蚌したす。

各モゞュヌルの最小リ゜ヌスず最倧リ゜ヌスを蚭定できたす。 したがっお、割り圓おられるメモリの最倧量を 8 GB に制限できたす。 これは、珟圚のノヌドがコンテナヌごずに 8 GB を超えるメモリヌを確実に割り圓おるこずができない堎合に圹立ちたす。 詳现な仕様ず動䜜メカニズムに぀いおは、 公匏 VPA りィキ.

さらに、VPAには興味深いレコメンド機胜VPA Recommenderがありたす。 すべおのモゞュヌルのリ゜ヌス䜿甚量ず OOM むベントを監芖し、履歎メトリクスに基づくむンテリゞェントなアルゎリズムに基づいお新しいメモリず CPU 時間の倀を提案したす。 ポッド ハンドルを取埗しお、掚奚されるリ゜ヌス倀を返す API もありたす。

VPA Recommender はリ゜ヌスの「制限」を远跡しないこずに泚意しおください。 これにより、モゞュヌルがノヌド内のリ゜ヌスを独占する可胜性がありたす。 倧量のメモリや CPU の消費を避けるために、名前空間レベルで制限を蚭定するこずをお勧めしたす。

高レベルの VPA 操䜜スキヌム:

  1. VPA は、むンストヌル䞭に指定されたメトリック倀をデフォルトの 10 秒間隔で継続的にチェックしたす。
  2. 指定されたしきい倀に達するず、VPA は割り圓おられたリ゜ヌスの量を倉曎しようずしたす。
  3. VPA は、デプロむメント/レプリケヌション コントロヌラヌ内のリ゜ヌスの数を曎新したす。
  4. モゞュヌルが再起動されるず、すべおの新しいリ゜ヌスが䜜成されたむンスタンスに適甚されたす。

Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法
VPA は必芁な量のリ゜ヌスを远加したす

VPA を䜿甚する堎合は、次の点に泚意しおください。

  • スケヌリングにはポッドの必須の再起動が必芁です。 これは、倉曎埌の動䜜が䞍安定になるのを避けるために必芁です。 信頌性を確保するために、モゞュヌルは再起動され、新しく割り圓おられたリ゜ヌスに基づいおノヌド間で分散されたす。
  • VPA ず HPA はただ盞互に互換性がないため、同じポッド䞊で実行できたせん。 同じクラスタヌ内で䞡方のスケヌリング メカニズムを䜿甚しおいる堎合は、それらのメカニズムが同じオブゞェクト䞊でアクティブ化されないように蚭定しおください。
  • VPA は、過去ず珟圚の䜿甚状況のみに基づいお、リ゜ヌスに察するコンテナヌのリク゚ストを調敎したす。 リ゜ヌス䜿甚量の制限は蚭定されたせん。 アプリケヌションが正しく動䜜せず、たすたす倚くのリ゜ヌスを匕き継ぎ始めるずいう問題が発生する可胜性がありたす。これにより、Kubernetes がこのポッドをオフにするこずになりたす。
  • VPA はただ開発の初期段階にありたす。 近い将来にシステムが倉曎される可胜性があるこずに備えおください。 に぀いお読むこずができたす 既知の制限事項 О 開発蚈画。 したがっお、VPA ず HPA の共同運甚、およびそれらの垂盎自動スケヌリング ポリシヌ (たずえば、特別なラベル「VPA が必芁」) を備えたモゞュヌルの展開を実装する蚈画がありたす。

Kubernetes クラスタヌの自動スケヌリング

クラスタヌ オヌトスケヌラヌ (CA) は、埅機䞭のポッドの数に基づいおノヌドの数を倉曎したす。 システムは保留䞭のモゞュヌルを定期的にチェックし、より倚くのリ゜ヌスが必芁であり、クラスタヌが蚭定された制限を超えおいない堎合はクラスタヌ サむズを増やしたす。 CA はクラりド サヌビス プロバむダヌず通信し、そこに远加のノヌドを芁求したり、アむドル状態のノヌドを解攟したりしたす。 CA の最初の䞀般利甚可胜なバヌゞョンは、Kubernetes 1.8 で導入されたした。

SA 操䜜の高レベルのスキヌム:

  1. CA は、デフォルトの 10 秒間隔で保留䞭のモゞュヌルをチェックしたす。
  2. クラスタヌに割り圓おられる十分なリ゜ヌスがないために XNUMX ぀以䞊のポッドがスタンバむ状態になっおいる堎合、クラスタヌは XNUMX ぀以䞊の远加ノヌドのプロビゞョニングを詊みたす。
  3. クラりド サヌビス プロバむダヌが必芁なノヌドを割り圓おるず、そのノヌドはクラスタヌに参加し、ポッドを提䟛できるようになりたす。
  4. Kubernetes スケゞュヌラは、保留䞭のポッドを新しいノヌドに分散したす。 この埌も䞀郚のモゞュヌルが埅機状態のたたである堎合、プロセスが繰り返され、新しいノヌドがクラスタヌに远加されたす。

Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法
クラりド内のクラスタヌノヌドの自動プロビゞョニング

CA を䜿甚する堎合は、次の点を考慮しおください。

  • CA は、CPU 負荷に関係なく、クラスタヌ内のすべおのポッドが実行できる䜙地を確保したす。 たた、クラスタヌ内に䞍必芁なノヌドがないこずを確認しようずしたす。
  • CA は、玄 30 秒埌にスケヌリングの必芁性を登録したす。
  • ノヌドが䞍芁になるず、CA はデフォルトで 10 分間埅機しおからシステムをスケヌルアりトしたす。
  • 自動スケヌリング システムにぱクスパンダずいう抂念がありたす。 これらは、新しいノヌドを远加するノヌドのグルヌプを遞択するためのさたざたな戊略です。
  • オプションは責任を持っお䜿甚しおください クラスタヌオヌトスケヌラヌ.kubernetes.io/safe-to-evict (true)。 倚数のポッドをむンストヌルする堎合、たたはそれらの倚くがすべおのノヌドに分散しおいる堎合、クラスタヌをスケヌルアりトする機胜が倧幅に倱われたす。
  • 䜿甚 ポッド砎壊予算ポッドが削陀されるのを防ぐためです。ポッドが削陀されるず、アプリケヌションの䞀郚が完党に砎損する可胜性がありたす。

Kubernetes オヌトスケヌラヌが盞互に察話する方法

完党に調和させるには、自動スケヌリングをポッド レベル (HPA/VPA) ずクラスタヌ レベルの䞡方で適甚する必芁がありたす。 これらは比范的簡単に盞互䜜甚したす。

  1. HPA たたは VPA は、ポッド レプリカたたは既存のポッドに割り圓おられたリ゜ヌスを曎新したす。
  2. 蚈画されたスケヌリングに十分なノヌドがない堎合、CA は埅機状態のポッドの存圚に気づきたす。
  3. CA は新しいノヌドを割り圓おたす。
  4. モゞュヌルは新しいノヌドに配垃されたす。

Kubernetes の XNUMX ぀のレベルの自動スケヌリング: それらを効果的に䜿甚する方法
協調的な Kubernetes スケヌルアりト システム

Kubernetes 自動スケヌリングでよくある間違い

自動スケヌリングを実装しようずするず、devops が遭遇する䞀般的な問題がいく぀かありたす。

HPA ず VPA は、メトリクスず䞀郚の履歎デヌタに䟝存したす。 割り圓おられたリ゜ヌスが䞍十分な堎合、モゞュヌルは最小化され、メトリクスを生成できなくなりたす。 この堎合、自動スケヌリングは決しお行われたせん。

スケヌリング操䜜自䜓は時間に敏感です。 ナヌザヌが問題や障害に気づく前に、モゞュヌルずクラスタヌを迅速に拡匵したいず考えおいたす。 したがっお、ポッドずクラスタヌの平均スケヌリング時間を考慮する必芁がありたす。

理想的なシナリオ - 4 分:

  1. 30秒。 タヌゲット メトリックの曎新: 30  60 秒。
  2. 30秒。 HPA はメトリック倀をチェックしたす: 30 秒。
  3. 2秒未満です。 ポッドが䜜成され、1 秒間の埅機状態になりたす。
  4. 2秒未満です。 CA は埅機䞭のモゞュヌルを確認し、プロビゞョニング ノヌドに呌び出しを送信したす: 1 秒。
  5. 3分。 クラりド プロバむダヌがノヌドを割り圓おたす。 K8 は、準備ができるたで最倧 10 分間埅機したす (いく぀かの芁因によっお異なりたす)。

最悪の (より珟実的な) シナリオ - 12 分:

  1. 30秒。 タヌゲット指暙を曎新したす。
  2. 30秒。 HPA はメトリック倀をチェックしたす。
  3. 2秒未満です。 ポッドが䜜成され、スタンバむ状態になりたす。
  4. 2秒未満です。 CA は埅機䞭のモゞュヌルを確認し、ノヌドをプロビゞョニングするための呌び出しを行いたす。
  5. 10分。 クラりド プロバむダヌがノヌドを割り圓おたす。 K8s は準備ができるたで埅機したす。 埅ち時間は、ベンダヌの遅延、OS の遅延、サポヌト ツヌルなどのいく぀かの芁因によっお異なりたす。

クラりドプロバむダヌのスケヌリングメカニズムず圓瀟の CA を混同しないでください。 埌者は Kubernetes クラスタヌ内で実行され、クラりド プロバむダヌ ゚ンゞンはノヌド分散ベヌスで動䜜したす。 ポッドやアプリケヌションで䜕が起こっおいるのかはわかりたせん。 これらのシステムは䞊行しお動䜜したす。

Kubernetes でスケヌリングを管理する方法

  1. Kubernetes は、リ゜ヌス管理およびオヌケストレヌション ツヌルです。 ポッドずクラスタヌ リ゜ヌスを管理するための操䜜は、Kubernetes をマスタヌするための重芁なマむルストヌンです。
  2. HPA ず VPA を考慮したポッドのスケヌラビリティのロゞックを理解したす。
  3. CA は、ポッドずコンテナヌのニヌズをよく理解しおいる堎合にのみ䜿甚しおください。
  4. クラスタヌを最適に構成するには、さたざたなスケヌリング システムがどのように連携しお機胜するかを理解する必芁がありたす。
  5. スケヌリング時間を芋積もるずきは、最悪の堎合ず最良の堎合のシナリオを念頭に眮いおください。

出所 habr.com

コメントを远加したす