Proxmoxで開発環境を構築
開発チームの西村です。弊社では、learningBOXの開発にaws(Amazon Web Services)のインスタンスを使ってきたのですが、不都合な点もでてきたので、社内のサーバでの開発に切り替えようとしています。
目次はこちら
1. awsの不都合な真実
2. 市販PCを検討したが・・
3. 組んでみた
4. ProxmoxVEをインストール
5. Proxmox上のドライブを高速化する手順
6. 既存proxmox環境からインスタンスの引っ越し
7. で、速くなったの?
8. 今後の方針
awsの不都合な真実
運用には都合がよいawsも開発環境としては・・
実はあまり速くない
開発には主にT3インスタンスを使っていたのですが、T3インスタンスって正直早くないですよね? 最新のCPU換算で2GHz台の性能しかありません。C5系やZ1dなどを使えば、4GHzぐらいまで加速できますが、正直いって、高いです。複数コア使いたいとなると更に数倍の費用になってしまいます。
大きなインスタンスは高い
実はあまり速くないとも重なりますが、メモリが大きくCPUも高速なインスタンスを使うと月に数万円単位の費用がかかってしまいます。
ちょうどいいインスタンスがない
開発に必要なメモリが2.1GBの場合、メモリを4GB搭載したインスタンスが必要です。これって無駄じゃないですか?仮想メモリとかで多少は回避できるかもしれませんが、実メモリに収まらなくなった瞬間、処理能力は桁違いに落ちます。ちょうどいいサイズのインスタンス使いたいです。
市販PCを検討したが・・
市販PCを購入して仮想化して使おうと思ったのですが、ちょうどいいのがなかった。
Windowsいらない
いらないです。外せなかったり、外してもほとんど安くならなかったりです。
GPUいらない
CPUが速いPCには、大抵、高性能なGPUが搭載されています。いらないです。(デスクトップの仮想化を導入した場合には必要なのかもしれませんが、未検証です)
マウスもキーボードもいらない
いらないです。
組んでみた
ちょうどいいのがなければ、組めばいい!ということで、1年ぶりにPCを組みました。
使ったパーツは以下の通りです。ケース以外は全てのパーツが映っています。
なぜか卓球のラケットのケースが映っていますが、関係ございません。
主要パーツの解説
マザーボード
特にこだわりはありません
CPU Core i9 10900
シングルスレッド性能重視で選びました。実際に使用した感じだと、シングルスレッドだと5GHz以上で安定しているように思います。10900Kも検討しましたが、2万円の価格差で0.1GHzは割が悪いかなとおもい、10900にとどめました。
DRAM
そこそこ速いやつを32GB搭載しました。足りなくなったら足します。
SSD
そこそこ速いやつ(3GB/sでるやつ)を1TB搭載しました。
電源
電源はいいのを買っておけという神のお告げのもと、そこそこ良い電源を選びました。24時間運用になるので、電源は大切です。
GPU
とりあえず非搭載です。
ProxmoxVEをインストール
PCを丸ごと使うのが一番高速なのかもしれませんが、流石にそれでは機材を有効活用できないので、ProxmoxVEで仮想環境を構築しました。仮想環境上ではAmazon Linux 2を動かしているのですが、Amazon Linux 2を動かす手順については改めて別の記事で紹介します。
インストールぐらい楽勝かとおもって作業していたのですが、インストール用に作成したUSBメモリの不良ブロックがあり、無駄に時間を使ってしまいました。インストールメディアを作る際には不良ブロックが確認する癖をつけたほうがよさそうです。
Proxmox上のドライブを高速化する手順
良い子は真似をしちゃいけないやつなんですが、ディスクのキャッシュを極力有効化することで仮想環境上のディスクIOを改善できます。おそらく、仮想環境を使わず直接読み書きするより高速になります。ただし、書き込みが完了するまでに電源が落ちたら壊れますので、良い子は真似しちゃいけません。
既存proxmox環境からインスタンスの引っ越し
いろいろハマりましたが、説明すると長くなるので省略します。エラーメッセージを、きっちり読めば大体なんとかなります。エラーメッセージを読んでも何が悪いのかわからなければ、ソースコード読んだら大体わかります。がんばりましょう。他のVMとリンクしてるとマイグレーションできません。物理ドライブを使ってたり、CloudInit用のデバイスをマウントしていてもマイグレーションできません。デバイスを削除しましょう。まだ社内でClusterを作っていないなら、既存のProxmox環境でClusterを作り、そこに対して新しい仮想環境を追加しましょう。正直、インフラ苦手なので、このあたりを管理いただける技術者を募集中です!!!(兵庫県たつの市の本社勤務)
で、速くなったの?
弊社learningBOXのテスト(PHPUnitによるバックエンドの自動テスト)にかかる時間を比較しました。
比較結果
aws環境(t2.small): 2.63 minutes
旧Proxmox環境(Core i5 9600K): 1.22 minutes
新Proxmox環境(Core i9 10900): 1.1 minutes
下の2環境の違いは大きくないですが、aws環境との差は歴然です。c5とかだともう多少改善しますが、それでもProxmox環境との差は大きいです。
自動テスト中の動作周波数
負荷が掛かっていないときは2.8GHzで安定していますが、負荷がかかると瞬時に5GHz前後まで上がります。
自動テストの高速化は作業効率に直結する
厳密なTDDを行うかどうかはさておき、一定規模以上の開発において自動テストは欠かせないものです。テスト結果がエラーとなった場合、新たなテストを作成した場合などは、自動テストの処理が終わるまで次の作業に進むことができません。多い日であれば、1日あたり20回、30回とテストを実行することになります。1回のテストを1分短縮することができれば、それだけの時間を節約し、新たな機能の開発であったり、コード品質の向上を進めることができるのです。
今後の方針
この度のProxmox環境構築にて、仮想環境を支えるハードウェアが2台になり、仮想環境間のマイグレーションも実現できました。しかしながら、HA(High Availability=高可用性)環境の構築には3台のサーバが必要です。Zen3世代のRyzenがリリースされたタイミングででも、第3の環境を構築し、安定したプライベートクラウドを実現させる方針です。