おうちKubernetes on Proxmoxのすすめ
この記事はKubernetes Advent Calendar 2023の7日目の記事です。
はじめに
おうちKubernetesにおけるハードウェア選定として、ProxmoxをはじめとしたVirtualMachineがRasberryPiなどの物理サーバーと比べて優れている点について話します。タイトルではProxmoxと書いていますが基本的にはVirtualMachineと読み替えていただいて差し支えないです。
*ここで言うVirtualMachineとはProxmoxやVMware vSphereのようにVMをホストする専用機が稼働することを想定しており、limaやVirtualBoxをノートPC上で使用するような、リソースの制限が厳しかったりVMの起動時間が限られたりする場合は少し本文の主張と嚙み合わない部分があるかもしれません。
*筆者はProxmoxを使っています:)
Kubernetesとは
皆さんよくご存知だと思います。公式ドキュメントだけ置いておきます。
Kubernetes
Proxmoxとは
ProxmoxとはVirtual Environment, Backup Server, Mail Gatewayなどのソフトウェアを提供するサービスです。今回はこのうちVirtual Environment(Proxmox VE)について話します。以下、特に断りが無ければProxmoxとはProxmox VEのことを指します。
2023年7月に日本国内代理店の活動が始まったりと最近徐々に知名度が上がってきているみたいです。デモサイトで実際に使用できるみたいです。
Proxmox VE
公式ドキュメント*1によると
Proxmox 仮想環境は、エンタープライズ仮想化のための完全なオープンソース サーバー管理プラットフォームです。 KVM ハイパーバイザーと Linux コンテナー (LXC)、ソフトウェア デファインド ストレージおよびネットワーク機能を単一のプラットフォーム上に緊密に統合します。 統合された Web ベースのユーザー インターフェイスを使用すると、VM とコンテナ、クラスターの高可用性、または統合された災害復旧ツールを簡単に管理できます。
つまり、Proxmoxを使えばVM,LXC,ストレージ、ネットワークの管理がGUIから一元的にできて、高可用なクラスタリングやバックアップ・リストアができてしかもオープンソース!*2であることを売りにしているようです。簡単に言えばVMware vSphereのような仮想化プラットフォームを提供するソフトウェアです。
*1: 公式ドキュメントの英文をそのままGoogle翻訳にかけました
*2: 開発はこちらでされています。How to contributeのリンクも置いておきます。
Proxmox(VirtualMachine)の何がいいのか
さて、皆さんの中にはおうちでKubernetesのクラスタを管理している方がいらっしゃると思いますがハードウェアは何を使っていますでしょうか。おそらくRasberryPiやNUCなどの物理サーバーを複数台使用してクラスタリングしている方が多いと思います。実際、おうちKubernetesなどのワードで検索をかけるとかなりの数RasberryPiを使用している記事が見つかります。理由としては
- 安くて手に入りやすい
- 小型で自宅に置きやすい・管理しやすい
- みんなが使ってるから(情報が沢山あるから)
などだと思います。筆者もRasberryPiでおうちKubernetesを作るべく4GのRasberryPi4を(2022年頃の在庫が全然無い時期に高めのお金を払ってやっとの思いで)一台購入してK3sを入れてしばらく遊んでいましたが、台数を増やそうと思ったときに
- そもそも金銭的に高い・在庫が見つかりにくい(2022年頃当時)
- ケーブルとかPOEハットとかssdとか意外とコストかかる
ことから断念しました。そして、RasberryPiの代わりに購入した小型PCにProxmoxをインストールしてVirtualMachineでおうちKubernetesを再開して現在に至ります。
さて、やっと本題ですが約一年間ProxmoxでおうちKubernetesを運用して気づいたProxmox(ViatualMachine)の優れた点について紹介していきます。
1. 物理サーバーの管理が楽
RasberryPiクラスタのように1ノード1物理サーバー環境だと3ノードクラスタを作るのに3つ物理サーバーが必要になりケーブルやストレージの管理がノードの数だけ必要になります。一方でVirtualMachineではひとつの物理サーバーに複数のVMを建ててノードとすることができるため当然ですがノード数に対して物理サーバーの管理が少なくて済みます。できることなら面倒な物理サーバーの管理はせずにKubernetesクラスタの管理だけやっていたいですよね。そんな方には1台のPCで複数ノードのKubernetesクラスタを作れるVirtualMachineはおすすめです。一方、VMで複数ノードにしたからといって物理レイヤーで分かれているわけではないので、「ちゃんとしたHAを実現したい」とか「物理サーバーの管理自体が楽しい」、「物理サーバーは鑑賞用」という方にはおすすめできません。
ちなみにRasberryPiの時にPOEハットの小さいファンが高音で鳴り続けているのが気になっていたのですが小型PCではもうすこし口径の大きなファンになったことで静音になったのも嬉しかったです。
2. 気軽にクラスタやノードを作って壊せる
VirtualMachineのプラットフォームでは基本的にGUIで数クリックもすればものの数分でVMが立ち上がります。Rasberry Pi imagerでUSBにOSイメージいれてブートしてマウスとキーボードとモバイルディスプレイ繋げて初期設定して。。。なんて必要もなくGUIから全部完結します。おまけにバックアップもすぐ取れるのでサーバーをあれこれいじって壊してしまっても途中からやり直したり最初からやり直すのでもまったく苦じゃないです。1. 物理サーバーの管理が楽とほぼ似たような理由ですがやはりVirtualMachineでは一台一台の(仮想)サーバーの管理コストが低いことによって気軽にOSを入れ替えたりCRIやCNIを入れ替えたりあれやこれやと色々試してみることが出来るので「色々な技術を実際に自分で試してみたい」というような方におすすめです。一方で、「HAをしっかりしたい」「個人開発のサービス/Botを運用したい」というようなインフラとしての安定性を求めている方にはおすすめできないかもしれません。筆者は自宅のVM環境に「作って壊す用のクラスタ」と「ずっと壊さず運用する用のクラスタ」と分けて使用しています。
3. 運用を自動化できる
おそらく大体の仮想化プラットフォームではAPIを提供しています。それらAPIを使用することでクラスタやノードのセットアップを自動化することも容易でしょう。ProxmoxでもRESTなAPIが提供されていて有志による各言語のクライアント実装もあります。例えばPython実装のProxmoxerやTerraform providerなどがあります。これらを利用すればGUIすら使わずにコードでノードの管理(IaC)も実現できるでしょう。筆者が開発している、Cluster APIのprovider実装(cluster-api-provider-proxmox)(突然の宣伝)を使用すればクラスタの管理もYAMLでできます。vSphereにもコミュニティで開発されているCluster APIのprovider実装(cluster-api-provider-vshpere)があるのでvSphereを使用している方は参考にしてみてください。これらCluster APIを導入すればクラスタのセットアップもワンライナーで、しかも数分ですぐ使用できるHAクラスタが出来上がります。
# example
clusterctl generate cluster my-home-cluster | kubectl apply -f -
もちろん物理サーバーでもAnsibleやもしかしたらMaaSなどを使ってIaCすることができるかもしれませんが、やはりVMの方が自動化出来ることの多さや開発しやすさは上かと思います。基本的には出来ること、容易さ、の程度の問題なので「一回クラスタ作ったら後はノードのメンテナンスが多少あるだけ」みたいな方は物理サーバー+Ansibleで充分ということもあると思います。筆者のように「色々自動化して遊びたい」とか「自動化の開発すること自体が楽しい」場合はそれぞれのVirtualMachineプラットフォームで提供されているAPIなどを使用して色々楽しめると思います。
4. 金銭的にコスパが良い
RasberryPiは安いことで有名なので意外だと感じる方が多いかもしれませんが、VirtualMachineは基本的に物理サーバーよりもリソース効率が良いのでクラスタ内の総リソース(cpu/memory)に対して金銭的に安く済みます。理由はVirtualMachineはHypervisorから仮想cpu/memoryを割り当てられる仕様上、物理サーバーのリソースを超えて割り当てることが可能だからです。例えば4core/16G memoryの物理リソースをVMに割り当て可能なサーバーがあるとするれば4core/4G memoryのVMを4つ建ててHAのKubernetesクラスタ(全体で仮想16core/16Gmemory)にすることもできます。いくらRasberryPiが安いと言えどもRasberryPiが4台と4core/16G程度の小型PCが1台とではさすがに後者の方が安くなるはずです*3。物理リソースあたりの値段を気にしている方にはもちろん当てはまりませんが、クラスタ内の仮想リソースあたりの値段が安くなるならいいかもという方におすすめです。特にクラスタ上でアクティブに動いているアプリケーションがあまり無く、アイドルしているリソースが多い場合などはVMの恩恵にあやかりやすいです。また、物理サーバーだと1ノードあたりのリソースは固定ですがVMだと柔軟に割り当てられるので1core/2G memoryみたいな小さいノードを作ったり、RasberryPi4では存在しない(例えば6core/6Gとか)サイズのノードを作れることもメリットです。
3*: 実際にはhypervisorのオーバーヘッドやcpu/memoryをどれくらいオーバーコミットできるかなどで変わってくることに注意してください。
我が家のおうちKubernetesクラスタ
実際におうちKubernetesクラスタを始める時には金銭的にどれくらいのコストがかかるのか、わりと気にするトピックだと思うので実際に筆者の自宅環境がどれくらいだったか紹介しようと思います。
- ベアボーンPC (ASRock DeskMini): ¥22,000
- CPU (AMD Ryzen 5 56000G): ¥18,000
- メモリ (Crucial ノートPC用増設メモリ 32G*2枚): ¥18,000
- SSD (KIOXIA 1TB NVMe Gen3.0): ¥6,500
- (オプション) CPUクーラー (Noctua NH-L9a): ¥6,600
計 ¥71,100
物理リソースは 12core/64G memoryになります。例えばCPUを4倍でオーバーコミットすれば仮想48core/64G memになります。(VM環境用にmemory過多な構成ではありますが)物理リソースだけなら3core/16Gが4ノードになるところ、VMなら12core/16Gのノードを4ノード建てられます。金額的には単純にCPU(AMD Ryzen 5 56000G)が3つ分安くなったとすれば¥54,000分お得です。
おまけ
ChatGPT(3.5)にもVMを利用するメリットを聞いてみました。是非こちらも参考にしてみてください。以下の回答セクションは丸々ChatGPTからの出力です。
質問
おうちKubernetesクラスタにおけるハードウェア選定として、ProxmoやVMWare vSphereをはじめとしたVirtualMachine環境を使用することがRasberryPiなどの物理サーバー(ベアメタルサーバー)を使用する場合と比べて優れている点と劣っている点をそれぞれ5つ以上教えてください。
回答
おうちKubernetesクラスタを構築する際に、ProxmoxやVMware vSphere(仮想環境)と物理サーバー(ベアメタルサーバー)を使用する場合のそれぞれの特徴や利点、欠点について以下にまとめてみます。
仮想環境(ProxmoxやVMware vSphere)の利点:
- 柔軟性と拡張性: 仮想化環境は仮想マシンとして複数のOSを実行でき、リソースを柔軟に割り当てることができます。これにより、クラスタの拡張や変更が容易です。
- リソースの最適化: 仮想化環境では、物理ハードウェアをより効率的に利用できます。リソースプールを作成し、クラスタ内の仮想マシンが必要なときにリソースを共有できます。
- 仮想マシンのスナップショット: 仮想化環境では、仮想マシンのスナップショットを取ることができ、簡単にバックアップや復元ができます。これにより、トラブル時のリカバリが容易です。
- ハードウェアの抽象化: 仮想化により、ハードウェアの詳細な管理が抽象化され、異なるハードウェア上で動作する仮想マシンを簡単に移行できます。
- セキュリティの向上: 仮想環境では、仮想マシンが物理ハードウェアから分離されているため、セキュリティの強化が可能です。
仮想環境(ProxmoxやVMware vSphere)の欠点:
- オーバーヘッド: 仮想環境にはハイパーバイザなどのオーバーヘッドが発生し、性能が物理サーバーよりもわずかに低くなることがあります。
- ライセンスコスト: 一部の仮想化ソフトウェア(例: VMware vSphere)には商用利用の場合にライセンスコストが発生する可能性があります。
- 依存性: 仮想環境はハードウェアの仮想化に依存しており、ハードウェアの進化に追従する必要があります。
- 特定のハードウェア要件: 一部の仮想環境は特定のハードウェア要件を満たす必要があり、特定のハードウェアとの互換性が制限されることがあります。
- 管理の複雑性: 仮想環境は物理ハードウェアとは異なる管理プロセスが必要であり、これには学習コストが伴います。
物理サーバー(ベアメタルサーバー)の利点:
- 性能: 物理サーバーはハイパーバイザのオーバーヘッドがないため、通常は性能が仮想環境よりも高いです。
- ハードウェアの直接利用: 物理サーバーはハードウェアに直接アクセスできるため、一部のアプリケーションやワークロードにおいてより効果的なパフォーマンスが得られることがあります。
- ライセンスコストの軽減: 仮想環境に比べて、物理サーバーには仮想化ソフトウェアのライセンスコストがかからない場合があります。
- 単純な管理: 物理サーバーは仮想化に比べて単純な管理が可能であり、専門的な知識が少なくても構築・運用ができることがあります。
- 高い制御権: 物理サーバーはハードウェアに直接アクセスできるため、ハードウェア構成やネットワーク構成を細かく調整できます。
物理サーバー(ベアメタルサーバー)の欠点:
- 柔軟性の低下: 物理サーバーは一つのOSしか実行できないため、柔軟性が制限されることがあります。
- リソースの効率低下: 物理サーバーでは、複数のアプリケーションやサービスが同時に実行されない限り、リソースを有効に活用するのが難しいことがあります。
- スケーラビリティの制約: 物理サーバーは単一の物理ハードウェアに依存しており、スケーラビリティが仮想環境よりも制約される可能性があります。
- 障害時のリカバリが難しい: 物理サーバーではスナップショットや仮想マシンの移行のような機能が制限されるため、障害時のリカバリが難しいことがあります。
- デプロイメントの遅延: 物理サーバーを導入するには物理的な設備が必要であり、仮想環境よりもデプロイメントに時間がかかることがあります。
まとめ
Proxmox(VirtualMachine)の優れている点を四つほど紹介しましたがどれもわりと説得力があるのでは無いでしょうか。これからおうちKubernetesを導入しようと考えている方やRasberryPiクラスタに不満を持っている方などの参考にしていただければ幸いです。是非おうちにProxmoxを導入した際にはcluster-api-provider-proxmoxを使用して(願わくばfeedbackを)頂ければ幸いです。おわり。
Discussion