おっさんのお小遣いで作るホームラボ 〜10万円で作るHCI〜 ④Proxmox VEでノードを構成する
個人的な備忘録ということで段々適当になってきている感じも否めない。
最近は脳の動きも如実に悪くなってるのでメモっておかないと2か月後には完全に忘れてる(¯~¯)。
基本的に公式サイトを見ればどうにかできるし、いろんなところに転がってる有志の関連記事や動画を見れば大体どうにかなると思うので、ここでは自分の環境に特化して記載していこうと思う。
構築にあたって
HCIを組むにあたって、分散ストレージの設定も実施することになる。
ProxmoxではCephストレージを使うことになるんだけど、基本的にCephはRAWディスクを使用することが前提。つまり通常独立した専用ストレージメディアが必要。
しかし今回はお小遣いが足りなかったので1つしかストレージを積んでない。
この辺りも対処しつつ作っていきたい。
想定している手順
- Proxmoxのインストール
- Proxmoxのアップデート
- Web UIにアクセスしてProxmox側のインターフェースの設定を変える
- L2スイッチでLAGを構成する
- Proxmoxのクラスタ構築
- Cephによる分散ストレージの設定
(¯ω¯;) ブヒ~
使えるようになるまでは、やっぱ割と面倒くさいな。
とりあえず今回は「4. L2スイッチでLAGを構成する」まで実施していきたい。
サーバー用ミニPCのバックアップを取得する
今回買ったミニPCはWindows11ProのOS入りだった。こういう中華系格安PCに導入されているOSは大体VL版である。OEM版をきちんと提供してくれる真っ当な業者ももちろんあるけれど、あまり期待できない。またはデジタルライセンスがきちんと構成さえてれば少なくとも今入ってるOSのバージョンでは問題ないんだけども、それ自体も正規のものかどうか判断のしようがないんだよね。サポートもねえ…
ということで初回の起動する前にもうOSのバックアップは取得しておくことにする。これでまっさらにしても安心。
バックアップはAcronis Trueimageを使用する。個人用なら1ライセンスで5台まで行けるのでセーフ。
でまあ、とってみたわけだけど、案の定VL版だったわけで。ええ。
お金ない人は既にあるWindowsでWindows ADK+PEアドオンにDISMのっけてバックアップするといいと思う。
よほど変なことしてなければ今どきのドライバ大体どっかから入手できるし、ドライバの組み込みもそんなに大変じゃない。
コマンドなんてこんな感じでコピペで行けちゃうレベル。
DISM.exe /Capture-FFU /ImageFile=<バックアップ先のパス>.ffu /CaptureDrive=\\.\PhysicalDrive0 /Name:"MyBackup" /Description:"Windows FFU Backup"
しかしバックアップを適当にネットを調べると盛んに某AO社のツールをお勧めしてくるのがなんとも
導入時のネットワークの設定
Proxmox自体はLAGを組んでるポートで通信できない。
インストール後にコマンドラインでinterfacesファイルを変更してLACPに対応させることもできるようだけど、今回はGUIを使う (面倒くさい) 方法で検証してみる。
スイッチ側は簡単。
Port-channelのチャネルグループから該当インターフェースを外せばいいだけ
今回は有線NIC#1側を一度チャネルグループから外して構築する。
初期構築時点で外してmode Accessにしてあるので今回はそのままつながるはず。
Proxmoxを導入していくの巻
今回の構成における一般的な手順との差違
Proxmoxのインストーラー作成はまあいろんな所に情報があるので割愛。
そのあとは設定手順通りに実施すればインストール自体は出来る。
そんななかで、今回の構成では何が違うのかというとストレージの利用方法。
通常Cephは専用の物理ディスクまるごと割り当てして利用することになる。
検証環境では良くあると思うけど、Proxmoxのデフォルトではストレージを1つしか積んでいない状態ではシステムを入れる物理ストレージはLVMで全領域確保されてしまう。
さて、困った。
ストレージの割り当て
今回はそれではCephの領域が確保できないので、手動で領域を確保することになる。
Ceph割り当て分とローカルのデータストアについて、どの程度割り当てるのか非常に悩むところ。
Cephの川迫次第では実効容量が1/3になったりするので、いろいろ触って試験が出来る程度には容量を確保したい。
ということで、ローカルストレージで280GiB、Ceph割り当て分を200GiBとした。
理由としては以下の容量を確保した上でローカルと分散ストレージの割り当てをざっくり1:1程度確保したかったから。
・Proxmox本体:60GB(公式概算)
・CephのOSD管理用に280GB*4%=12GB
システム部の280GBのうち、空きとしては200GB程度になるはず。
うん、必要最低限は決まった。多分。
Proxmoxのインストール
の前に
ちょうどこれを書いているときに、いい感じにProxmox VEのVer.9のBATA1が出た様子。
当初は安定版の8.4を入れようかと思ったものの、どうせなら最新班を入れてみよう。
違いは公式のロードマップ参照のこと。
ふむふむ、ベースのDebianが13に上がったのと、ZFSが2.3.3になてRAIDZプールのデバイス追加サポートが増えたのとSDNでOSPFファブリック扱えるようになったのね。
自動インストールが改善されたってことは自動スケールアップやノード故障での入れ替えもより便利になったのかなあ。
NICのIF命名規則も変わるのか。まあ今回は新規だから関係なさそう。
(¯Д¯;)おお…enterprise側のISO置き場だからめちゃくちゃ遅い。
300Kbpsしか出ない。総量1.5GBもあるから、1日かかる。
やっぱり今回は8.4にしよう。
おっさんの趣味で無駄に相手のサーバーに負荷かける必要ないよね。
インストール時のメモ
インストール自体は5分ほどでサクッと終了したので、そのときのメモ
Target Harddiskで内蔵のSSDを選択
Optionを選択してhdsizeを476.0GB -> 276.0GBに設定変更。
ファイルシステムは標準のext4のまま。細かくほかのパーティションも選択できるけど残りは空で。

国は勿論Japanで。ほかは国を入れれば自動的に。
| 項目 | 値 |
|---|---|
| Country | Japan |
| Time zone | Asia/Tokyo |
| Keyboard Layout | Japanese |
パスワードは適当に入れてEmailは”mail@lab.watomoa.com”にした。
Management Interface設定に入るので、NIC#1の方を選んでIPアドレスをセット
| 項目 | 値 |
|---|---|
| Management Interface | xenp1s0 |
| Hostname | pve1.lab.watomoa.com |
| IP Address | 192.168.255.101/24 |
| Gateway | 192.168.255.254 |
| DNS Server | 192.168.255.254 |

その後インストールが終わって再起動が走ればログイン可能。
5分で導入と起動までできるとかすごい簡単。
なんで画面のキャプチャーがとれてるのか?
これを作るにあたって何か画面のスクリーンショットがとれればいいなあと思っていたところ、アマゾンのセールが来まして、ええ。
で、通常時から激安のUGREENのキャプチャボード買ってしまいました。お値段3000円。動画にハードエンコード使えて、いいねこれ。
昔々XBOXの画面キャプチャーをFHDでとりたくて、MonsterX-i つーキャプチャボードを買ったとき以来だけど、今時こんな安くても普通に使えるのは隔世の感がある。
一番いいのはIP-KVMでも買ってリモートで全部触れると素晴らしいけど、最近の超小型KVMでも5000円くらいするんだよなー。基板むき出しだし。
そのほかで起動画面がちょっとフォント小さいのでGrubをいじってコンソール解像度を変更しておく
老眼対策とかではなく、使うディスプレイがちょっとね…
Proxmoxのコンソール解像度変更方法
ProxmoxはDebianベースなので、GRUBブートローダーの設定を変更することで、ホストのコンソール解像度を調整する。
今回は800x600に。
- grubファイル編集
vi /etc/default/grub
- 以下の行を編集(800x600x60Hzに)
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
を
GRUB_CMDLINE_LINUX_DEFAULT="quiet video=800x600@60"
に。
3. GRUBを更新
update-grub
- 再起動
Proxmox初期設定
Web管理画面に入れるようになったので、初っぱなにやるべきことを実施していく
- リポジトリの変更本体のアップデート
今回はCephも使うのでどちらもenterpriseからno-subscriptionのリポジトリに変更。
cephはSquid (v19)にする。
今はGUIでサクサクできるから楽でいい。
しかし回線がくそ遅いせいで1時間か(´・ω・`) - hostsの修正
ホスト側ではローカルの名前解決にDNSサーバーは使わないので、一応ほかのノードのを名前解決できるように、FQDNとホスト名をHOSTSに記載しておく/etc/hosts192.168.255.101 pve1.lab.watomoa.com pve1 192.168.255.102 pve2.lab.watomoa.com pve2 192.168.255.103 pve3.lab.watomoa.com pve3
Open vSwitchを使ったインターフェース冗長化設定
とりあえずWeb管理画面につながって初期のアップデートもできたので、次はNIC側の設定に入ろう。
ProxmoxではLinux標準とOpen vSwitch(OVS)のボンディングが選択できる。
今回はある程度柔軟に設定ができるようにしたい&勉強がてらOVSでのボンディングを設定してみたいと思う。
設定としてはパッケージインストール後にブリッジを作ってからボンディングを構成することになる。
今は1ポートをマネージメントポートとして使用してしまってるので、ちょっと面倒くさい。
-
コマンドラインでOVSパッケージのインストール
今のところOVSパッケージのインストールをGUIでやる方法が見つからなかったのでコマンドで実行する。ノード管理画面からシェルを起動してパッケージのインストール。apt install openvswitch-switchこれで設定する準備ができた。
一応動作確認root@pve1:~# systemctl status openvswitch-switch ● openvswitch-switch.service - Open vSwitch Loaded: loaded (/lib/systemd/system/openvswitch-switch.service; enabled; p> Active: active (exited) since Mon 2025-xx-xx xx:xx:xx JST; 1m ago Process: 10832 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 10832 (code=exited, status=0/SUCCESS) CPU: 744usヨシ!
-
インターフェースの構成
[システム]-[ネットワーク]からいい感じに構成変更する。
VLANに関しては、Management Seg.はネイティブで通しているので指定はなし。
vmbr0の役割をovsip0に引き継ぎしている。接続はこんな感じ。
設定に関しては「設定を適用」するまでは反映されないので設定の戻しも簡単。
設定を保存するとノードとの通信が一度切れるはず。…やっぱり直接interfacesファイルいじった方が楽だな。
interfacesファイルの内容
/etc/network/interfacesauto lo iface lo inet loopback auto enp1s0 iface enp1s0 inet manual auto enp2s0 iface enp2s0 inet manual iface wlp3s0 inet manual auto bond0 iface bond0 inet manual ovs_bonds enp1s0 enp2s0 ovs_type OVSBond ovs_bridge ovsbr0 ovs_options bond_mode=balance-tcp lacp=active auto ovsbr0 iface ovsbr0 inet manual ovs_type OVSBridge ovs_ports bond0 auto ovsip0 iface ovsip0 inet static address 192.168.255.101/24 gateway 192.168.255.254 ovs_type OVSIntPort ovs_bridge ovsbr0 source /etc/network/interfaces.d/*
L2スイッチ側の構成を修正
つづけてL2スイッチの構成を修正する。
現状はPoort-channel 1にGigabitEthernet0/2(enp2s0側)しか設定していないので、GigabitEthernet0/1も設定する。
あわせて許可VLANも設定してしまおう。
IFのポート指定はこんな感じにした。
interface Port-channel1
description to LAB-SVR#1
switchport trunk allowed vlan 10,20,100-1000
switchport trunk native vlan 10
switchport mode trunk
spanning-tree portfast edge
!
interface GigabitEthernet0/1
switchport trunk allowed vlan 10,20,100-1000
switchport trunk native vlan 10
switchport mode trunk
channel-group 1 mode active
!
interface GigabitEthernet0/2
switchport trunk allowed vlan 10,20,100-1000
switchport trunk native vlan 10
switchport mode trunk
channel-group 1 mode active
コンフィグの保存は忘れずに。
接続の確認
ノード側とスイッチの両方の構成を修正したので、接続状態を確認する。
ノード側では想定した形で繋がっているのかGUI上ではわからないのでちょっと不便ではある。
ノード側の確認(コンソールから)
root@pve1:~# ovs-vsctl show
e4828d5d-5953-403d-b874-ef27ea27e8df
Bridge ovsbr0
Port ovsip0
Interface ovsip0
type: internal
Port bond0
Interface enp1s0
Interface enp2s0
Port ovsbr0
Interface ovsbr0
type: internal
ovs_version: "3.1.0"
root@pve1:~#
root@pve1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaul t qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ov s-system state UP group default qlen 1000
link/ether e8:ff:1e:d4:68:50 brd ff:ff:ff:ff:ff:ff
inet6 fe80::eaff:1eff:fed4:6850/64 scope link
valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ov s-system state UP group default qlen 1000
link/ether e8:ff:1e:d4:68:4f brd ff:ff:ff:ff:ff:ff
inet6 fe80::eaff:1eff:fed4:684f/64 scope link
valid_lft forever preferred_lft forever
4: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default ql en 1000
link/ether 40:f4:c9:6f:0e:d2 brd ff:ff:ff:ff:ff:ff
5: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group defaul t qlen 1000
link/ether 8e:d0:8e:10:79:b9 brd ff:ff:ff:ff:ff:ff
6: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOW N group default qlen 1000
link/ether e8:ff:1e:d4:68:50 brd ff:ff:ff:ff:ff:ff
inet6 fe80::8c1e:71ff:fe20:6547/64 scope link
valid_lft forever preferred_lft forever
8: bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 2a:f5:c6:41:f6:bc brd ff:ff:ff:ff:ff:ff
inet6 fe80::28f5:c6ff:fe41:f6bc/64 scope link
valid_lft forever preferred_lft forever
9: ovsip0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOW N group default qlen 1000
link/ether 36:80:f1:01:a9:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.255.101/24 scope global ovsip0
valid_lft forever preferred_lft forever
inet6 fe80::3480:f1ff:fe01:a969/64 scope link
valid_lft forever preferred_lft forever
root@pve1:~#
root@pve1:~# ovs-appctl bond/show bond0
---- bond0 ----
bond_mode: balance-tcp
bond may use recirculation: yes, Recirc-ID : 1
bond-hash-basis: 0
lb_output action: disabled, bond-id: -1
updelay: 0 ms
downdelay: 0 ms
next rebalance: 5511 ms
lacp_status: negotiated
lacp_fallback_ab: false
active-backup primary: <none>
active member mac: e8:ff:1e:d4:68:4f(enp2s0)
member enp1s0: enabled
may_enable: true
hash 84: 10 kB load
member enp2s0: enabled
active member
may_enable: true
hash 182: 7 kB load
hash 224: 1 kB load
hash 228: 1 kB load
root@pve1:~#
スイッチ側の確認
LAB-L2SW#show lacp neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode
Channel group 1 neighbors
Partner's information:
LACP port Admin Oper Port Port
Port Flags Priority Dev ID Age key Key Number State
Gi0/1 SA 65535 e8ff.1ed4.6850 17s 0x0 0x2 0x2 0x3D
Gi0/2 SA 65535 e8ff.1ed4.6850 18s 0x0 0x2 0x3 0x3D
LAB-L2SW#
うーん、バランシングが偏ってる気もしなくもないけど動いてるからヨシ!
実際にVM動かしてから確認しよう。
疎通確認
ここまで来て疎通できないとちょっと笑えるけど一応テスト。
ping ヨシ!
WEB管理画面ヨシ!
お疲れ様でした。あと2台同じように頑張りましょう。
まとめ
知っていれば簡単だけど、知らないとできない絶妙なレベル感。
次回はようやくHCIの構築になる。クラスタへの参加とCephでの分散ストレージ設定を予定。
Discussion