Kubernetesのクラスタのサイズの最小値と最大値

クラスタの作成当初に必要なキャパシティを推定する方法は、同じアプリケーションを実行するために必要な台数を数えることです。

例えば、5つのクラウドインスタンスで実行しているのであれば、Kubernetesクラスタで同じワークロードを実行する場合には5つ以下のノードで十分となります。 なぜならKubernetesでは作業負担をマシンごとに分散できるため、効率的にマシンを利用できるためです。

最小のクラスタ

最も小さいKubernetesクラスタは、ノードが一つだけのものですが、これは障害が発生した時の耐性がありません。 これはKubernetesを試したりするのみです。

Kubernetesクラスタで耐障害性を実現する場合、少なくともマスターノードの最小数は3つ必要となります。

なぜ3つのマスターノードが必要となるのか? それは次の記事に答えがあります。

https://qiita.com/ntoreg/items/ec6f1eca87ba5c5c0399

マスターノードが3つある場合(正確に言えば奇数個ある場合)、以下のような措置が可能です。

  • CASE A : マスターノードのうちの一つがダウンしたとしても、他二つが生き残っていればマスターノードは全体で(2/3)は生き残っていることになります。 この場合、過半数が生き残っているため、マスターノードは運用自体には問題としてクラスター全体を継続します。
  • CASE B : また、マスターノードのうち二つがダウンした場合は、過半数を割ってしまっているとしてクラスター全体を終了します。
    • クラスタが分断されたときに、分断された両方のノードへクライアントからの書き込みリクエストが到達してしまう可能性があります。そのまま処理を継続してしまうと書き込まれたデータのどちらが正しいかを判断する事が難しくなります。クラスタが分断されたときに、分断された両方のノードへクライアントからの書き込みリクエストが到達してしまう可能性があります。そのまま処理を継続してしまうと書き込まれたデータのどちらが正しいかを判断する事が難しくなります。クラスタが分断されたときに、分断された両方のノードへクライアントからの書き込みリクエストが到達してしまう可能性があります。そのまま処理を継続してしまうと書き込まれたデータのどちらが正しいかを判断する事が難しくなります。

最大のクラスタ

Kubernetesクラスタのサイズには上限があります。

  • 5000ノード以下
  • 15万Pod以下
  • 30万コンテナ以下

クラスタの上限が設定されているのは理由があり、クラスタ全体のサイズが大きくなるほどマスターノードへの負荷が重くなるためです

実運用上でKubernetesクラスタの上限に近い場合、複数のKubernetesクラスタを実行して必要であればフェデレーションが可能です。 フェデレーション機能を使用すると、二つ以上のクラスタを同期させて、同じワークロードを実行できます。

クラスタはいくつ必要か

きわめて大規模な運用でない限り、本番に一つ、ステージングおよびテスト用に一つで問題ないでしょう。

リソースの管理やコスト監視などが目的であれば、クラスタで分けるのではなくクラスタ内のNamespaceで分けることが可能です。 一部の例外を除けば複数のクラスタを管理するメリットはありません。