シングルノードでkubernetesを作った時のトラブルシューティング

投稿者: | 10月 23, 2022

経験としてはいい話かもしれないが、あまりぶち当たりたくないので、先に結論を書いておく。

CPUはケチるな、CPUがノードに用意できないなら、ノードを追加して、総数を増やせ!

と言いたい。

 

普段の検証の時に、わざわざマルチコントールプレーン、まるちノードを立てる必要がないので、シングルノードでテストしている。とはいえ、minikubeやkindを使いたくないので、k3sがライトウェイトで1ノードできるから便利で使っている。

コンテナの構築が結構簡単なので、打ち出の小槌のようにバンバン立ててしまうこともある。しかし、シングルノードなので、リソースは限られている。つまり、「底なし沼」のように見えてしまうが、明らかに「底」がある。なので、そういう使い方だとこれでもかぁというくらい大きいリソースで作った方がいいような気がする。

シングルノードで作る場合、やってしまうトラブルの1つとして、リソースが足りなくてコンテナが立ち上がらないことがある。

 

閑話休題

 

リソースの利用状況は以下のコマンドで確認可能である。ただし、Vanilla Kubernetesでは、metric serverをどうにかしてインストールする必要がある。(結構どうにかする必要があった気がする。)
k3sはデフォルトで入っているのでkubectl topは普通に使える。

ノードのリソースを表示

kubectl top node

UntitledImage

Podのリソースの表示

kubectl top pod -A

UntitledImage

しかし、このkubectl topは、実はあんまり役に立たなかったりする。実際は、kubernetes daashboard向けにつくっているのではないかと。

 

CPUのリソースが不足しているケース

さて、実際にリソースを枯渇させてみた。デモとして、CPUを枯渇させてみる。

kubectl get pod -n postgres6-test

UntitledImage

Pendingになってしまっている。

kubectl -n postgres6-test describe pod my-release-postgresql-0

UntitledImage

CPUのリソースが足りないと出ている。実際kubectl topで調べてみるとリソースは全然ガラ空きである。

UntitledImage

krewをインストールして、resource-capacityをインストールして、Resource-capacityを表示させてみると

UntitledImage

この環境は、2CPU(つまりKubernetesのリソース単位で2000m)のノードで、予約済みリソースが枯渇している。なので、立ち上がらないことがわかる。
つまり、リソースにはやはり「底」がある。

こうみると、このようなユースケースの場合、メモリよりもCPUなのかもしれない。ノードを追加すれば解決する可能性がある。

 

ノードの空き容量が不足しているケース

次に、もう一つやらかす(自分だけかもしれないが)のが、ノードの空き領域がすくなくて、展開できないケース。
自分のUbuntuのVMテンプレートは、16GB HDDで、半分しかLVMでアロケートしていないので実質8GBしかなく、空き容量は4GB程度しかない。なので、HDDとLVM、ファイルシステムを拡張して使う必要がある。忘れると。。。

kubectl get pod 

エラーとなっている。

UntitledImage

kubectl -n longhorn-system describe pod csi-resizer-6d8cf5f99f-2sdtx

UntitledImage

ディスクが足りないと表示されているのがわかる。ノードの空き領域が足らないために起きる。

また、以下のような状態のときもノードの空き領域が足りないために起こる。

UntitledImage

ノードには、コンテナイメージが置かれるので、ノードの空き領域はかなり多く必要となる。不要になった領域が定期的に削除されるので、無尽蔵に消費されるわけではない。

ディスク容量が少ない場合も内蔵ディスクが大きいノードを追加すれば解決すると思われるが、内臓ディスクが小さいノードはいくらCPUを積んでいても使われる可能性がすくないので、そのノードを一旦削除して、内臓ディスクを増強してから再度、クラスタに参加させるといいと思う。

あとは、コンテナを作る時、リソースの定義をちゃんとしておくべきかなと思う。
https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-cpu-resource/

https://kubernetes.io/ja/docs/concepts/configuration/manage-resources-containers/

 

まぁ知っておいた方がいい話だが、あまり遭遇したい話でした。

コメントを残す