Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?

Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?
Kubernetes クラスタヌを䜜成するずき、構成するワヌカヌ ノヌドの数ずタむプは䜕ですか?ずいう疑問が生じるこずがありたす。 オンプレミス クラスタヌにはどちらが適しおいたすか? いく぀かの匷力なサヌバヌを賌入するのず、デヌタ センタヌで十数台の叀いマシンを䜿甚するのずではどちらが良いでしょうか? クラりド内に XNUMX ぀のシングルコア むンスタンスを䜿甚するのず、XNUMX ぀のクアッドコア むンスタンスを䜿甚するのはどちらが良いでしょうか?

これらの質問に察する答えは蚘事の䞭にありたす。 Daniel Weibel 氏、゜フトりェア ゚ンゞニア、Learnk8s 教育プロゞェクト教垫 コマンドの翻蚳では Mail.ru の Kubernetes aaS.

クラスタヌ容量

䞀般に、Kubernetes クラスタヌは倧芏暡な「スヌパヌノヌド」ず考えるこずができたす。 その総蚈算胜力は、すべおの構成ノヌドの胜力の合蚈です。

垌望するクラスタヌ容量の目暙を達成するには、いく぀かの方法がありたす。 たずえば、䞀連のアプリケヌションには非垞に倚くのリ゜ヌスが必芁ずなるため、合蚈 8 ぀のプロセッサ コアず 32 GB の RAM の容量を持぀クラスタヌが必芁です。 その埌、16 GB のメモリを備えた 8 ぀のノヌド、たたは XNUMX GB のメモリを備えた XNUMX ぀のノヌド、XNUMX ぀のクアッドコア プロセッサたたは XNUMX ぀のデュアルコア プロセッサをむンストヌルできたす。

クラスタヌを䜜成する方法は XNUMX ぀だけありたす。

Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?
どちらのオプションでも同じ容量のクラスタヌが生成されたすが、䞋郚の構成には XNUMX ぀の小さなノヌドがあり、䞊郚の構成には XNUMX ぀の倧きなノヌドがありたす。

どちらのオプションが良いですか

この質問に答えるために、䞡方のオプションの利点を芋おみたしょう。 衚にたずめおみたした。

いく぀かの倧芏暡なノヌド

倚数の小さなノヌド

より簡単なクラスタヌ管理 (オンプレミスの堎合)

スムヌズな自動スケヌリング

安䟡 (オンプレミスの堎合)

䟡栌は少し異なりたすクラりド内

リ゜ヌスを倧量に消費するアプリケヌションを実行できる

完党なレプリケヌション

リ゜ヌスがより効率的に䜿甚されたす (システム デヌモンのオヌバヌヘッドが枛少したす)
より高いクラスタヌ耐障害性

ここではワヌカヌ ノヌドに぀いおのみ説明しおいるこずに泚意しおください。 メむン ノヌドの数ずサむズの遞択は、たったく別のトピックです。

それでは、衚の各ポむントに぀いお詳しく説明しおいきたす。

最初のオプション: 耇数の倧芏暡ノヌド

最も極端なオプションは、クラスタヌ容量党䜓に察しお 16 ぀のワヌカヌ ノヌドを䜿甚するこずです。 䞊の䟋では、これは 16 個の CPU コアず XNUMX GB の RAM を備えた単䞀のワヌカヌ ノヌドになりたす。

プロたち

プラスその 1. 管理が容易になる
フリヌト党䜓よりも少数のマシンを管理する方が簡単です。 アップデヌトや修正の展開がより速くなり、同期も簡単になりたす。 倱敗の絶察数も少なくなりたす。

䞊蚘のすべおはハヌドりェアやサヌバヌに適甚され、クラりド むンスタンスには適甚されないこずに泚意しおください。

クラりドでは状況が異なりたす。 そこでの管理はクラりド サヌビス プロバむダヌによっお行われたす。 したがっお、クラりド内の XNUMX 個のノヌドを管理するこずは、XNUMX ぀のノヌドを管理するこずずそれほど倉わりたせん。

クラりド内のポッド間のトラフィック ルヌティングず負荷分散 自動的に実行される: むンタヌネットからのトラフィックはメむン ロヌド バランサヌに送信され、メむン ロヌド バランサヌはトラフィックをいずれかのノヌドのポヌトに転送したす (NodePort サヌビスは各クラスタヌ ノヌドのポヌトを 30000  32767 の範囲に蚭定したす)。 kube-proxy によっお蚭定されたルヌルは、ノヌドからポッドにトラフィックをリダむレクトしたす。 XNUMX ぀のノヌド䞊に XNUMX 個のポッドがある堎合は次のようになりたす。

Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?
長所 #2: ノヌドあたりのコストが削枛される
高性胜な車は高䟡ですが、䟡栌の䞊昇は必ずしも盎線的ではありたせん。 ぀たり、10 GB のメモリを搭茉した XNUMX コア サヌバヌ XNUMX 台の方が、同じメモリを搭茉したシングルコア サヌバヌ XNUMX 台よりも通垞は安䟡になりたす。

ただし、このルヌルは通垞、クラりド サヌビスでは機胜しないこずに泚意しおください。 すべおの䞻芁なクラりド プロバむダヌの珟圚の料金䜓系では、䟡栌は容量に応じお盎線的に増加したす。

したがっお、クラりドでは通垞、より匷力なサヌバヌを節玄するこずはできたせん。

長所 #3: リ゜ヌスを倧量に消費するアプリケヌションを実行できる
䞀郚のアプリケヌションでは、クラスタヌ内に匷力なサヌバヌが必芁です。 たずえば、機械孊習システムに 8 GB のメモリが必芁な堎合、1 GB のノヌドでは実行できたせんが、少なくずも XNUMX ぀の倧きなワヌカヌ ノヌドが必芁です。

コンズ

欠点その 1. ノヌドあたりのポッドの数が倚い
同じタスクがより少ないノヌドで実行される堎合、圓然、各ノヌドにはより倚くのポッドが存圚したす。

これは問題になる可胜性がありたす。

その理由は、各モゞュヌルが kubelet や cAdvisor だけでなく、コンテナヌ ランタむム (Docker など) にもオヌバヌヘッドをもたらすためです。

たずえば、kubelet は、ノヌド䞊のすべおのコンテナの存続可胜性を定期的に調査したす。コンテナの数が増えるず、kubelet が実行する必芁のある䜜業も増えたす。

CAdvisor はノヌド䞊のすべおのコンテナのリ゜ヌス䜿甚量統蚈を収集し、kubelet は定期的にこの情報をク゚リし、API 経由で提䟛したす。 繰り返しになりたすが、コンテナヌが増えるず、cAdvisor ず kubelet の䞡方の䜜業が増えたす。

モゞュヌルの数が増えるず、システムの速床が䜎䞋し、信頌性が損なわれる堎合もありたす。

Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?
Kubernetes リポゞトリにはいく぀かの 䞍平を蚀ったノヌド䞊のすべおのコンテナヌの定期的な kubelet チェックには時間がかかりすぎるため、ノヌドは Ready/NotReady ステヌタス間を移動したす。
このため、Kubernetes ノヌドごずに 110 個以䞋のポッドを配眮するこずをお勧めしたす。 ノヌドのパフォヌマンスに応じお、ノヌドごずにさらに倚くのポッドを実行できたすが、問題が発生するか、すべおが正垞に動䜜するかを予枬するのは困難です。 事前に䜜業をテストする䟡倀がありたす。

デメリットその2. レプリケヌションの制限
ノヌドが少なすぎるず、アプリケヌション レプリケヌションの有効範囲が制限されたす。 たずえば、高可甚性アプリケヌションに XNUMX ぀のレプリカがあり、ノヌドが XNUMX ぀しかない堎合、アプリケヌションの実効レプリケヌションの次数は XNUMX に枛りたす。

XNUMX ぀のレプリカは XNUMX ぀のノヌドにのみ分散でき、そのうちの XNUMX ぀に障害が発生するず、耇数のレプリカが䞀床にダりンしたす。

XNUMX ぀以䞊のノヌドがある堎合、各レプリカは別のノヌドで実行され、XNUMX ぀のノヌドに障害が発生するず、最倧 XNUMX ぀のレプリカが削陀されたす。

したがっお、高可甚性芁件には、クラスタヌ内の特定の最小数のノヌドが必芁になる堎合がありたす。

デメリットその3. 倱敗した堎合の最悪の結果
ノヌドの数が少ない堎合、各障害はより深刻な結果をもたらしたす。 たずえば、ノヌドが XNUMX ぀しかなく、そのうちの XNUMX ぀で障害が発生した堎合、モゞュヌルの半分がすぐに倱われたす。

もちろん、Kubernetes は障害が発生したノヌドから他のノヌドにワヌクロヌドを移行したす。 ただし、その数が少ない堎合は、十分な空き容量がない可胜性がありたす。 その結果、障害が発生したノヌドを起動するたで、䞀郚のアプリケヌションは䜿甚できなくなりたす。

したがっお、ノヌドの数が増えるほど、ハヌドりェア障害の圱響は少なくなりたす。

欠点 #4: 自動スケヌリングの手順が増える
Kubernetes にはクラりド むンフラストラクチャ甚のクラスタヌ自動スケヌリング システムがあり、珟圚のニヌズに応じおノヌドを自動的に远加たたは削陀できたす。 ノヌドが倧きくなるず、自動スケヌリングがより唐突で扱いにくくなりたす。 たずえば、50 ぀のノヌドでノヌドを远加するず、クラスタヌの容量がすぐに XNUMX% 増加したす。 そしお、それらのリ゜ヌスが必芁ない堎合でも、料金を支払う必芁がありたす。

したがっお、クラスタヌの自動スケヌリングを䜿甚する予定がある堎合、ノヌドが小さいほど、より柔軟でコスト効率の高いスケヌリングが埗られたす。

次に、倚数の小芏暡ノヌドの長所ず短所を芋おみたしょう。

XNUMX 番目のオプション: 倚数の小さなノヌド

このアプロヌチの利点は、基本的に、耇数の倧きなノヌドを䜿甚する反察のオプションの欠点から生たれたす。

プロたち

長所 #1: 倱敗の圱響が少ない
ノヌドが増えるほど、各ノヌド䞊のポッドの数は枛りたす。 たずえば、XNUMX ノヌドあたり XNUMX 個のモゞュヌルがある堎合、各ノヌドには平均 XNUMX 個のモゞュヌルが含たれるこずになりたす。

こうするこずで、ノヌドの 10 ぀に障害が発生しおも、ワヌクロヌドの XNUMX% のみが倱われたす。 おそらく、少数のレプリカのみが圱響を受け、アプリケヌション党䜓は動䜜し続けるず考えられたす。

さらに、残りのノヌドには障害が発生したノヌドのワヌクロヌドを凊理するのに十分な空きリ゜ヌスがある可胜性が高いため、Kubernetes はポッドを自由に再スケゞュヌルでき、アプリケヌションは比范的早く機胜状態に戻りたす。

長所 #2: レプリケヌションが優れおいる
十分なノヌドがある堎合、Kubernetes スケゞュヌラはすべおのレプリカに異なるノヌドを割り圓おるこずができたす。 こうするこずで、ノヌドに障害が発生した堎合でも、圱響を受けるレプリカは XNUMX ぀だけずなり、アプリケヌションは匕き続き䜿甚可胜になりたす。

コンズ

デメリットその1.コントロヌルが難しい
ノヌドの数が倚いず管理が難しくなりたす。 たずえば、各 Kubernetes ノヌドは他のすべおのノヌドず通信する必芁がありたす。぀たり、接続数は二次関数的に増加し、これらすべおの接続を远跡する必芁がありたす。

Kubernetes Controller Manager のノヌド コントロヌラヌは、クラスタヌ内のすべおのノヌドを定期的に調べお正垞性をチェックしたす。ノヌドが増えるず、コントロヌラヌの負荷も増加したす。

etcd デヌタベヌスの負荷も増加しおいたす - 各 kubelet および kube-proxy 呌び出し りォッチャヌ etcd の堎合 (API 経由)、etcd はオブゞェクトの曎新をブロヌドキャストする必芁がありたす。

䞀般に、各ワヌカヌ ノヌドはマスタヌ ノヌドのシステム コンポヌネントに远加の負荷を課したす。

Kubernetes ワヌカヌ ノヌド: 倚数の小芏暡なノヌドですか、それずも耇数の倧きなノヌドですか?
Kubernetes は、次のクラスタを正匏にサポヌトしおいたす。 ノヌド数は最倧5000。 ただし、実際にはすでに 500 個のノヌドが存圚したす。 重倧な問題を匕き起こす可胜性がある.

倚数のワヌカヌ ノヌドを管理するには、より匷力なマスタヌ ノヌドを遞択する必芁がありたす。 たずえば、クベアップ 自動的にむンストヌルされたす ワヌカヌ ノヌドの数に応じお、マスタヌ ノヌドの適切な VM サむズが決たりたす。 ぀たり、ワヌカヌ ノヌドが増えれば増えるほど、マスタヌ ノヌドの生産性も向䞊するはずです。

これらの特定の問題を解決するために、次のような特別な開発が行われおいたす。 仮想Kubelet。 このシステムを䜿甚するず、制限を回避しお、膚倧な数のワヌカヌ ノヌドを含むクラスタヌを構築できたす。

デメリット #2: 諞経費が増加したす。
各ワヌカヌ ノヌドで、Kubernetes は䞀連のシステム デヌモンを実行したす。これらには、コンテナヌ ランタむム (Docker など)、kube-proxy、kubelet (cAdvisor を含む) が含たれたす。 これらは䞀緒に䞀定量のリ゜ヌスを消費したす。

小芏暡なノヌドが倚数ある堎合、各ノヌドにおけるこのオヌバヌヘッドの割合は倧きくなりたす。 たずえば、単䞀ノヌド䞊のすべおのシステム デヌモンが合わせお 0,1 CPU コアず 0,1 GB のメモリを䜿甚するず想像しおください。 10 GB のメモリを備えた 1 コア ノヌドが 1 ぀ある堎合、デヌモンはクラスタヌ容量の 10% を消費したす。 䞀方、XNUMX GB のメモリを備えた XNUMX 個のシングルコア ノヌドでは、デヌモンがクラスタヌ容量の XNUMX% を占有したす。

したがっお、ノヌドが少ないほど、むンフラストラクチャがより効率的に䜿甚されたす。

デメリットその3. リ゜ヌスの非効率な䜿甚
小芏暡なノヌドでは、残りのリ゜ヌス チャンクが小さすぎおワヌクロヌドを割り圓おるこずができないため、未䜿甚のたたになる堎合がありたす。

たずえば、各ポッドには 0,75 GB のメモリが必芁です。 ノヌドが 1 個あり、それぞれに 0,25 GB のメモリがある堎合、XNUMX 個のポッドを実行でき、各ノヌドには XNUMX GB の未䜿甚メモリが残りたす。

これは、クラスタヌ党䜓のメモリの 25% が無駄になっおいるこずを意味したす。

10 GB のメモリを備えた倧芏暡なノヌドでは、これらのモゞュヌルを 13 個実行できたすが、未䜿甚のフラグメントは 0,25 GB の XNUMX ぀だけになりたす。

この堎合、メモリの 2,5% のみが無駄になりたす。

したがっお、倧芏暡なノヌドではリ゜ヌスがより最適に䜿甚されたす。

倧きなノヌドがいく぀かあるのか、それずも小さなノヌドがたくさんあるのか?

それでは、クラスタヌ内に少数の倧きなノヌドず倚数の小さなノヌドではどちらが優れおいるのでしょうか? い぀ものように、明確な答えはありたせん。 倚くはアプリケヌションの皮類に䟝存したす。

たずえば、アプリケヌションが 10 GB のメモリを必芁ずする堎合、より倧きなノヌドを遞択するのは明らかです。 たた、アプリケヌションが高可甚性のために XNUMX 倍のレプリケヌションを必芁ずする堎合、たった XNUMX ぀のノヌドにレプリカを配眮するリスクを冒す䟡倀はほずんどありたせん。クラスタヌ内には少なくずも XNUMX 個のノヌドが必芁です。

䞭間の状況では、各オプションの長所ず短所に基づいお遞択を行っおください。 おそらく、いく぀かの議論は他の議論よりもあなたの状況に関連しおいたす。

たた、すべおのノヌドを同じサむズにする必芁はたったくありたせん。 最初に同じサむズのノヌドを詊しおから、それらに異なるサむズのノヌドを远加しお、それらをクラスタヌ内で結合するこずを劚げるものはありたせん。 Kubernetes クラスタヌ内のワヌカヌ ノヌドは完党に異皮混合にするこずができたす。 したがっお、䞡方のアプロヌチの利点を組み合わせおみるこずができたす。

単䞀のレシピはなく、それぞれの状況には独自のニュアンスがあり、生産だけが真実を瀺したす。

クラりドプラットフォヌムチヌムが翻蚳を䜜成 Mail.ru クラりド ゜リュヌション.

Kubernetes に぀いおさらに詳しく: クラスタヌの管理ずデプロむに圹立぀ 25 のツヌル.

出所 habr.com

コメントを远加したす