kindでは構築するクラスタノードのリソースは制御できない

ローカル環境においてKubernetesクラスタの動作検証するときの手段の1つとしてkindがある。 kindはdocker in dockerの仕組みを利用して簡単にkubernetesクラスタを構築・利用することができる。

クラスタノードを制御する

kindはマルチノードクラスタにも対応しており、複数のノードで構成されたクラスタを構築することができる。 また、ノードごとにKubernetesバージョンを指定したり、ディスクマウントやポートマッピングを設定したり、ノードへのラベル付けやkubeadmに追加のパラメータを渡すこともできる。 これによりある程度複雑なクラスタを構成することができる。

kind.sigs.k8s.io

ノードのリソースは制御できない

kindでクラスタを構築するときに制御できない要素としてノードリソースがある。 例えば、CPU、メモリ、ストレージなどはkindを実行するホストのリソースがすべて渡される。8GBメモリのVM上で3つのノードで構成されるクラスタを構築するとき、ノード毎のメモリを2GBに制限するみたいなことはできない。すべてのノードがホストリソースを共有することになる。

github.com

kubeletのオプションとして system-reservedなどを指定する方法も提案されているが、これはあくまでシステム(OS)向けの設定なのでクラスタ上に作成するpodの割り当てを制御することはできない。

github.com

また、kindは複数ホストで分散して実行することはスコープ外としている。 このため、ノードごとに必要なリソースをVMで作成して複数VMクラスタを構築する、ということはkindでは実現できない。

github.com

こういった課題を解決するため、kubeletに新しいオプションを定義してリソースを制限できるようにすることが提案されている。 こういったオプションが実装されて始めてホストリソース以外のリソース制限を適用できるようになる。

github.com