Raspberry Pi 4 KubernetesクラスタのCPU・メモリリソース使用状況は

先日構築しました、おうちKubernetesクラスタ。

大きく次の特徴があります。

  1. Raspberry Pi 4を3台使用して構築
  2. スティックSSD起動
  3. コンテナ専用OSのFedora CoreOS使用、動作が軽い(はず
  4. 分散ファイルシステムを構築、各ノードのスティックSSDにデータを分散して保存

いちばんの特徴は「Rook Cephで各ノードにデータを分散して保存している」ところかと思います。CPUやメモリーのリソースを大量に消費する予感がします。

一方、使用しているノードはRaspberry Pi。正直、リソースが豊富、強力、とは言えない機器かと思います。

本当にRaspberry Piで安定して動くのか?そのあたり、本当に実用になるのか・・・調べてみたいと思います。


Raspberry Pi Kubernetesクラスタのリソース使用状況の例

システム構成

ロードバランサ等を含めた、クラスタの構成は下記になります。

  1. Raspberry Pi 4を3台使用
    1. メモリー8GB 2台 コントロールプレーン+ワーカーノード
    2. メモリー4GB 1台 ワーカーノード
  2. Fedora CoreOSを使用
  3. スティックSSDから起動
  4. Rook Cephで分散ファイルシステムを構築
    1. 永続ボリュームとして使用RWX(ReadWriteMany)対応
    2. 各ノードのSSDにデータを分散して保存
  5. ロードバランサにMetalLB使用
    1. クラスタの外側から各サービスにアクセス可能

具体的に、動作しているポッドはこのくらいのボリュームになりました。

管理ツールはCUIのみ

管理ツールは、Rook CephのToolboxをデプロイしてあります。

それ以外の、GUIを使用するような管理ツールはデプロイしていません。ええ、動作が重くなるのでは?ということで、管理ツールは最低限のみの状況です。

アプリケーションとしてWordPressをデプロイ

そしてアプリケーションは、WordPressをデプロイしてみました。

WordPressのポッドは、node3というノードで動作していることがわかります。

永続ボリュームは、既定の設定で合計18GB予約されています。

WordPressはインストールしたばかりの状態のため、ストレージはそれほど使われていないと思います。

実際に分散ストレージの状況を確認してみましょう。

ストレージの使用量は実質1.5GiB程度、3台に分散して4.5GiB程度使用

クラスターの状態は、「HEALTH_OK」で健康な状態です。

各ノードは867GiBのストレージ容量を持ち、合計2.5TiBが使用可能なストレージ容量になります。

現在、4.4GiB使用されていますが、OSDステータスを見ると、どうも各ノードで1500MBずつ使用されている感じです。おそらく、実際のデータは1.5GB程度で、それが3つのノードに分散されて、合計4.4GiB使用中、という感じです。

分散ストレージの動作としては、全く問題なく機能しています。

仮にノードがどれか故障しても、ノードが残っている限りは、データは消えることはない、分散ファイルシステムが正常に機能している状態です。

これはつまり、各ノードでCephファイルシステムの同期処理が動作していて、CPUやメモリーリソースを消費している、ということを意味します。

Raspberry Piで(性能的な面で)本当に大丈夫なのでしょうか?

各ノードのリソース使用状況

ノードの構成と、Raspberry Pi 4のメモリー搭載量は次の関係になります。

  1. node1
    1. Raspberry Pi 4メモリー容量8GB
    2. コントロールプレーン+ワーカーノード
  2. node2
    1. Raspberry Pi 4メモリー容量8GB
    2. コントロールプレーン+ワーカーノード
  3. node3
    1. Raspberry Pi 4メモリー容量4GB
    2. ワーカーノード
    3. アプリケーションのWordPressポッドが稼働中

node1(メモリー8GB、コントールプレーン+ワーカー)のリソース使用状況

node1はコントロールプレーンということで、sshでログインして、kubectlコマンドを操作することが多いノードです。

CPU負荷であるロードアベレージですが、だいたい1.0から2.0あたりをふらふらしている感じです。

Raspberry Pi 4はCPUが4つ搭載されているため、ロードアベレージが4.0になると、CPUパワーが全力となり、4.0を超えるとパワーが足りず、処理に遅延が発生する状況です。

使用可能なメモリー容量は、7823.8MiBです。空きメモリーが14.7MiBと表示されていますが、実際はバッファーとキャッシュに4488.7MiB使用されているため、4MiB程度は空いている、と考えられます。

負荷が大きいプロセスは「ceph」、黄色く表示されて、やはり分散ファイルシステムの負荷が大きいことがわかります。CPU負荷の大半は、Cephプロセスのようですが、メモリー使用量は0.6%+0.4%程度で、それほどメモリーを大量消費しているわけではありません。

そのようなわけでまとめますと。

  • node1のCPU負荷は、20%~50%程度
  • メモリー使用量は3.2GiB弱ほど
  • バッファー・キャッシュが4.5GiBほど
    • つまりメモリーは半分くらい空いている状況

node2(メモリー8GB、コントールプレーン+ワーカー)のリソース使用状況

続いてnode2の状況です。メモリー搭載量は、node1と同じく8GiBになります。

node2は、node1と同じ傾向です。ロードアベレージは0.5から1.5程度で推移しています。

メモリー使用量は2.8GiB程度で、5GiB近くがバッファーとキャッシュに使用されています。

cephのモニタープロセスが動いていて、稀に負荷が大きくなることがあります。

node2は比較的暇そうで、まだ余裕がある感じです。

  • node2のCPU負荷は、20%~40%程度
  • メモリー使用量は2.8GiB弱ほど
  • バッファー・キャッシュが4.6GiBほど
    • つまりメモリーは半分くらい空いている状況

node3(メモリー4GB、ワーカーノード)のリソース使用状況

node3は、メモリー容量は4GiBになります。そのため、コントロールプレーンにはしておらず、ワーカーノードとして動いています。

WordPressポッドがデプロイされたため、httpdやmysqlが動作していることがわかります。

そのため、いちばん負荷が大きいのはnode3です。CPU負荷は常に1.0以上で、場合によって負荷が7.0程度まで上がる場合があります。忙しい。

一方、メモリーの使用量は2.6GiB程度です。キャッシュで1GB程度使用されていて、実は余裕がある感じです。

  • node3のCPU負荷は、30%~110%、場合により150%を超える場合も
  • メモリーの使用量は、2.6GiB程度
  • バッファー・キャッシュが1GiBほど

メモリー容量は現状は足りているが、ワーカーノードのCPU負荷が高い

まとめますと。

  1. node1コントロールプレーン+ワーカーノード
    1. CPU負荷は20%~50%程度
    2. (8GBモデル)メモリー使用量は3.2GiB程度で、4.5GiBほど空き
  2. node2コントロールプレーン+ワーカーノード
    1. CPU負荷は20%~40%程度
    2. (8GBモデル)メモリー使用量は2.8GiB程度で、4.6GiBほど空き
  3. node3ワーカーノード
    1. WordPressポッド稼働中、httpdとmysqldプロセスが存在
    2. CPU負荷は30%~100%、場合により150%を超える場合も
    3. (4GBモデル)メモリー使用量は2.6GiB程度で、1GiBほど空き

分散ファイルシステムを使用しても、メモリー使用量はそれほどない感じです。

Fedora CoreOSですが、LVMが実装されていません。つまり、機能が削られていて、軽くできているため、CPUとメモリーリソースの消費が小さく作られています。

そのあたりの影響があるのかもしれません。

CPU負荷も、分散ファイルシステムの影響で過負荷(100%を超える)ということはなさそうです。

一方、アプリケーションをデプロイしたノードは、CPU負荷が足りていない状況であるとわかりました。

分散ファイルシステムによる負荷は、思ったほど大きくありませんが。アプリケーションをデプロイすると、地味に効いてくる感じでしょうか。

それと、私のノードの配分は失敗していることがわかりました。

  1. コントロールプレーン →比較的負荷が低い →低スペックで大丈夫
  2. ワーカーノード →アプリケーションがデプロイされると負荷が高くなる→高スペック

という状況のため、メモリー8GBモデルをコントロールプレーンにするのではなく、アプリケーションを動かすノードに8GBモデルを使用したほうが良いことがわかりました。


今回、クラスタのCPU負荷とメモリー使用量を調べた結果、Raspberry Pi 4でも十分に分散ファイルシステムが使用できるとわかりました。

一方、アプリケーションをデプロイすると、メモリーよりもCPU負荷が足らないことがわかりました。

Raspberry Pi 4のメモリーが多いモデル8GBと、メモリーが少ないモデル4GBを、どういうノード構成にすればよいかは、アプリケーションのデプロイを考慮したほうが良い、という結論になります。

一方、Raspberry Pi 4のメモリー4GBモデルでも、アプリケーションをデプロイしなければ、メモリー容量は足りていて、1GB程度空きがあることがわかりました。

このあたりは、Fedora CoreOSを使用した影響かもしれません。他のOSを使用した場合は、メモリー使用量がどうなのか、気になるところではあります。

このような感じで、Raspberry Pi 4の4GBモデルでも、Kubernetesのノードとして十分活用可能です。

よろしければ、夏休みの課題として、おうちクラスターを構築してみてください!

スポンサーリンク

フォローする

スポンサーリンク