HouseServerProj 2 台目のミニ PC を購入し自宅サーバ環境をアップデートする (HouseServer-3) Proxmox の初期設定をおこなう
はじめに
proxmox を BMAX B4 Turbo にインストールし、初期設定しました。 そこで Proxmox のなかに Proxmox VM を立てられることを知りました。
こちらのノートでは Proxmox VM を 2 台立ててそれらをクラスタ化することを試します。
(2025-07-14 追記) #cloud-init をあらかじめ勉強し、それを Proxmox VM を立てることに利用する、ということを目指していました。 しかし、 Proxmox VM と cloud-init の相性が悪いため直接 Proxmox VM を 2 つ手動で設定することにしています。 ご注意ください。
前提
192.168.11.101
(pve.local) で BMAX B4 Turbo にインストールされた Proxmox OS が動いています。
このうえに 2 つの Proxmox VM をインストールします。
VM Name | IP Address | CPU | Storage | RAM | |
---|---|---|---|---|---|
virtual-pve1 | 192.168.11.201 | 1 | 100 GB | 4 GB | |
virtual-pve2 | 192.168.11.202 | 1 | 100 GB | 4 GB |
cloud-init に慣れる
Proxmox VM を立てるときに cloud-init で簡単に VM を用意できると楽そうです。 cloud-init を使ったことがないのでまずは使って慣れてみます。
Ubuntu Server で cloud-init を利用する
まずは普通の Ubuntu Server で cloud-init をやってみます。
https://zaki-hmkc.hatenablog.com/entry/2024/04/01/232725 https://cloud-images.ubuntu.com/noble/current/ https://pve.proxmox.com/wiki/Cloud-Init_Support
9001
という vmid で template 化するための VM を用意します。
この時点ではまだ起動ディスクや ISO も決まっていません。
qm create 9001 --name ubuntu-server-template --memory 1024 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set 9001 で ubuntu-server-template VM に起動ディスクを設定します。
#SCSI というコンピュータと周辺機器をつなぐ規格を利用して、 local-lvm
ストレージに 0 GB の容量を確保し ISO イメージが入った起動ディスクを作ります。
qm set 9001 --scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/noble-server-cloudimg-amd64.img
update VM 9001: -scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/noble-server-cloudimg-amd64.img
Logical volume "vm-9001-disk-0" created.
cloud-init について、 Proxmox では CDROM を経由して設定するらしく、 cloudinit 用の CDROM を下記コマンドで用意します。
root@pve:/var/lib/vz/template/iso# qm set 9001 --ide2 local-lvm:cloudinit
update VM 9001: -ide2 local-lvm:cloudinit
Logical volume "vm-9001-cloudinit" created.
ide2: successfully created disk 'local-lvm:vm-9001-cloudinit,media=cdrom'
generating cloud-init ISO
boot 順序を変更し、 Hard Disk (scsi0) を指定します。 また、 シリアルコンソール でアクセスできるようにします。
https://pve.proxmox.com/wiki/Serial_Terminal https://www.mikan-tech.net/entry/raspi-serial-console
qm set 9001 --boot order=scsi0
qm set 9001 --serial0 socket --vga serial0
qm template でテンプレート化します。
qm template 9001
Renamed "vm-9001-disk-0" to "base-9001-disk-0" in volume group "pve"
Logical volume pve/base-9001-disk-0 changed.
WARNING: Combining activation change with other commands is not advised.
テンプレート上でそれ以外の設定を変更します。 QEMU Guest Agent を Enabled にしました。 また、起動ディスク scsi0 の容量を 10G 増やしました。
最後にようやく cloud-init を設定します。 ユーザ名やパスワード、DNS ドメインなどを設定します。
SSH 鍵やユーザ名を登録しました。 IP アドレスは VM ごとに固定アドレスを振りたいのであとから入力します。
テンプレートの設定が終わったため 1 台目の ubuntu を立てます。
ubuntu-1
を起動するまえに cloud-init から IP アドレスを編集して 192.168.11.210 に固定することにします。
その後 101 (ubuntu-1) を起動するとちゃんと IP アドレスが振られており、かつ ganyariya
というユーザ名でアクセスできることが確認できました。
ssh も設定されており、 macbook からアクセスできることも確認できました。 #cloud-init を利用することで動的に変更したい部分のみ変えられるため便利ですね。
❯ ssh ganyariya@192.168.11.210 -i ~/.ssh/proxmox_ve_key
The authenticity of host '192.168.11.210 (192.168.11.210)' can't be established.
ED25519 key fingerprint is SHA256:G+2cYjR0OTOy+P7FImLGCkoISWugLuIPS//590f/Res.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.11.210' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-63-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Mon Jul 14 05:08:26 UTC 2025
System load: 0.23
Usage of /: 15.2% of 12.04GB
Memory usage: 18%
Swap usage: 0%
Processes: 101
Users logged in: 1
IPv4 address for eth0: 192.168.11.210
IPv6 address for eth0: 2404:7a81:9c0:fc00:be24:11ff:fef2:adc
ubuntu-1 には cloud-init の daemon service が動いており、こちらがユーザ名や SSH の初期設定を行っています。
ganyariya@ubuntu-1:~$ systemctl status cloud-init.service
● cloud-init.service - Cloud-init: Network Stage
Loaded: loaded (/usr/lib/systemd/system/cloud-init.service; enabled; preset: enabled)
Active: active (exited) since Mon 2025-07-14 05:06:29 UTC; 15min ago
Process: 613 ExecStart=/usr/bin/cloud-init init (code=exited, status=0/SUCCESS)
Main PID: 613 (code=exited, status=0/SUCCESS)
CPU: 457ms
cicustom によってより幅広い cloud-init 設定を変更できる
さきほどの ubuntu-server の例では
- 9001 テンプレートでベースの cloud-init 設定 (ユーザ名・パスワード・SSH 公開鍵) をおこなう
- 9001 テンプレートから 101 VM を作成する
- 101 VM を作成するまえに cloud-init の設定を変更して IP アドレスのみ変更する
- 101 VM が起動すると cloud-init 設定をもとに、実際に IP アドレスが変更される
となっていました。
しかし、 Proxmox の GUI 上では下記の設定項目しかなく、この項目以外は変更できません。 hostname なども変更できません。
それ以外の項目についても変更したい場合は下記記事のように snippets
機能、そして cicustom
を利用しないとだめなようです。
https://ainoniwa.net/pelican/2021-08-10a.html https://pve.proxmox.com/wiki/Cloud-Init_Support
今回は
- proxmox image に cloud-init のパッケージを追加してテンプレート化する
- GUI 上で cloud-init の値を設定し、動かしてみてうまく動かなかったらそこだけ直す
という対応を取ろうとおもいます。
cicustom については terraform もまぜて自動化をより図るときに使おうとおもいます。
Proxmox VM のテンプレートをつくって VM を動かしたが cloud-init との相性が悪かった
https://pve.proxmox.com/wiki/Cloud-Init_Support https://zaki-hmkc.hatenablog.com/entry/2024/04/01/232725
上記のいいところどりを目指して作業します。 scsi0 に起動ディスク (ISO) を、 scsi1 に ProxmoxOS をインストールするためのディスクを用意します。 また、 cpu を Host にする必要があります。 (HouseServer-3) Proxmox の初期設定をおこなう の最後にある通り、Proxmox on Proxmox するために必要な設定です。
qm create 9002 --name proxmoxvm-template --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set 9002 --scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/proxmox-ve_8.4-1.iso
update VM 9002: -scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/proxmox-ve_8.4-1.iso
Rounding up size to full physical extent 1.46 GiB
qm set 9002 --boot order=scsi0
qm set 9002 --scsi1 local-lvm:32
qm set 9002 --cpu host
qm set 9002 --cores 2 --memory 4096
cloud-init の CDROM は設定しない、この状態で 9002 VM を起動して Proxmox OS をインストールします。
あとで個別の VM を作成したときに IP アドレスと Hostname は変更します。そのためここでは proxmoxvm-template.local と 192.168.11.250 という仮の値を入れておきます。
インストールが終わったら scsi1 (Proxmox OS がインストールされたディスク) をブートにします。 これで Proxmox on Proxmox ができるようになります。
qm set 9002 --boot order=scsi1
ここまでできたら cloud-init するためのパッケージをインストールします。
proxmoxvm-template vm 上で apt install cloud-init
します。
ここまで終わったら cloud-init CDROM を作成します。 また、起動する必要がなくなったため template 化します。 #QEMU Agent を忘れていたためテンプレート化したあとに設定しました。
qm set 9002 --ide2 local-lvm:cloudinit
qm template 9002
qm set 9002 --agent enabled=1
template の状態で cloud-init の設定をします。 User や Password はすでに Proxmox OS インストール時に root パスワードを設定しているため、なにも設定しないことにします。 SSH key だけ設定しました。
ためしに clone して virtual-proxmox1 を作成してみます。
立ち上げてみるとうまく proxmox にアクセスできませんでした。 原因としては
- proxmox は独自に
/etc/hosts
を設定する192.168.11.101 pve.local pve
のような設定をおこなう- しかし、 proxmox vm で cloud-init を設定すると、このネットワーク設定が消えてしまう
これは毎回書き換えられてしまう、駄目な設定の proxmox vm
これはホスト Proxmox の正しい設定。
192.168.11.101
に pve.local, pve というホスト名が振られている。
そのため、正常に動作させるには cicustom
を利用して /etc/hosts
の設定を完全に同一の内容に設定しないとだめでした。
そのため今回は 2 つの Proxmox VM を手動で立てることにします。
2 つの Proxmox VM を手動で立てる
CPU 設定で host
を設定することに注意しましょう。
また、Qemu Agent
はチェックしておくと便利です。
clipboard を使えるようにしておきます。
root@pve:/var/lib/vz/template/iso# qm set 101 -vga clipboard=vnc
update VM 101: -vga clipboard=vnc
root@pve:/var/lib/vz/template/iso# qm set 102 -vga clipboard=vnc
update VM 102: -vga clipboard=vnc
virtual-pve{1,2} が起動したら下記の初回起動でおこなうべきヘルパースクリプトを実行します。
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"
ホスト OS の proxmox、そして virtual-pve1 で pvs, lvs を実行してみましたが下記のような挙動になっていました。
- ホスト OS の
vm-101-disk-0
Logical Volume が virtual-pve1 の Physical Volume として認識されている virtual-pve1
の Physical Volume/dev/sda3
は ホスト OS と同様に root, data, swap へ論理的に分割される
root@pve:/var/lib/vz/template/iso# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 pve lvm2 a-- <475.94g 16.00g
root@pve:/var/lib/vz/template/iso# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-aotz-- <348.82g 5.53 0.66
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
vm-101-disk-0 pve Vwi-aotz-- 100.00g data 9.57
vm-102-disk-0 pve Vwi-aotz-- 100.00g data 9.72
root@virtual-pve1:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 pve lvm2 a-- <99.50g <12.38g
root@virtual-pve1:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-a-tz-- <45.25g 0.00 1.59
root pve -wi-ao---- 35.87g
swap pve -wi-ao---- 4.00g
https://qiita.com/murachi1208/items/1ca751377314230ef2f4 https://zaki-hmkc.hatenablog.com/entry/2025/02/16/120841
それでは proxmox の cluster を作ってみます。 あとからホスト名や IP アドレスは変えられないようなので注意しましょう。
virtual-pve1 の Datacenter > Cluster GUI から作業します。
virtual-pve1
の IP アドレスのまま Create を実行しました。クラスタ名は virt-cluster
にしてみました。
無事クラスタ作成が完了しました。
pvecm (proxmox ve cluster manager) でクラスタ情報が確認できます。
root@virtual-pve1:~# pvecm status
Cluster information
-------------------
Name: virt-cluster
Config Version: 1
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Tue Jul 15 09:03:42 2025
Quorum provider: corosync_votequorum
Nodes: 1
Node ID: 0x00000001
Ring ID: 1.5
Quorate: Yes
Votequorum information
----------------------
Expected votes: 1
Highest expected: 1
Total votes: 1
Quorum: 1
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.11.201 (local)
virtual-pve1
の virt-cluster
へ virtual-pve2
を参加させます。
まず virtual-pve1
でクラスタ参加に必要な認証情報を表示します。
この認証情報を利用して virtual-pve2 をクラスタへ参加させます。
virtual-pve1 の Join Information
を virtual-pve2 の Cluster Join
の画面で入力します。
すると
- Peer Address
- Password
- Fingerprint が表示&部分的に自動入力されます。 Password については virtual-pve1 のパスワードを入れます。
成功すると下記のようになります。
virtual-pve1, 2 両方で互いの Proxmox Node を認識できるようになりました。
Cluster に VM を立ててライブマイグレーションしてみる
LiveMigration ができるとのことなのでやってみます。
https://ubuntu.com/download/server
#ubuntu の image を virtual-pve2 の local
の ISO へダウンロードします。
最初は virtual-pve1
GUI 上で virtual-pve2
ノード上に VM を作成しようとしたのですが、 virtual-pve1 から virtual-pve2 にある ISO イメージを参照できませんでした。
別の PVE ノードにある ISO イメージは参照できないようです。このようなことをしたい場合は ceph を使わないとだめそう…。
あきらめて virtual-pve2
GUI 上で virtual-pve1
ノード上に VM を作成してみます。
virtual-pve2 の GUI から、 virtual-pve1 ノードで動く ubuntu-server1 VM を立てられました。
では virtual-pve1 から virtual-pve2 へ LiveMigration させようとおもいます。
画像を取り忘れてしまいましたが、 最初に LiveMigration させようとしたときに Can't migrate VM with local CD/DVD
と表示されマイグレートできませんでした。
下記の記事と同様のエラーであったため、 Hardware から Ubuntu ISO が入った CDROM を取り外しました。
https://qiita.com/ohtsuka-shota/items/c00bff8e8c1a5d4923cc
その後、画像のように virtual-pve2 を Target にして Migrate します。 このとき、 ubuntu-server1 は起動した状態で移動させます。
移動させている最中も ls, pwd など ubuntu-server1 上でコマンドは入力できました。 VM が止まることなく、 virtual-pve2 に正しく移動できました。 これは便利ですね…
HA 構成を作成したうえで意図的にノードを停止して VM を他ノードへ移動させる
HighAvailability 構成 (HA 構成) を試してみます。
Wiki を参照すると 3 ノード、そして共有ストレージが必要なようです。 まずはこれらを用意してみます。
https://pve.proxmox.com/wiki/High_Availability
You must meet the following requirements before you start with HA:
- at least three cluster nodes (to get reliable quorum)
- shared storage for VMs and containers
- hardware redundancy (everywhere)
- use reliable “server” components
- hardware watchdog - if not available we fall back to the linux kernel software watchdog (softdog)
- optional hardware fencing devices
3 ノード目を用意する
3 ノード目となる virtual-pve3 を用意してクラスタに参加させます。
Ceph 共有ストレージを用意する
ceph もしくは NFS を導入するとよいそうです。 今回はせっかくなので使ったことがない ceph を導入してみようとおもいます。
ceph 自体の仕組み・概要については以下、とくに https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/ceph/ がわかりやすそうです。 https://ceph.io/en/ https://note.shiftinc.jp/n/n3dbf38a4affd https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/ceph/
Proxmox + ceph https://qiita.com/ohtsuka-shota/items/2419d9ed74530cc88287 https://qiita.com/nouernet/items/120c5d8c8b96f881f077
proxmox のドキュメントをみると、BMAX B4 Turbo かつ仮想 Proxmox VM 1 ~ 3 だとスペックが足りていません。 ただ、あくまでテスト用であり運用はしないためこのままのよわよわスペックで試してみます。 https://pve.proxmox.com/wiki/Deploy_Hyper-Converged_Ceph_Cluster
virtual-pve1 上で Datacenter > Ceph
を開き Ceph に関するパッケージをインストールします。
Ceph version は最新 squid 19.2, Repository は No-Subscription にします。
ネットワークは virtual-pve1 に割り当てている IP と同じにします。
インストールが完了しました。
- 他ノードに ceph ノードを用意する
- ceph monitor を追加する
- ceph ods を作成する
- ceph pool を作成する
という手順を踏むとよいようです。
本来であれば Ceph に必要な package を入れる & 初期設定を yaml などでやらないといけないとおもうのですが、それを Proxmox 側が吸収してくれて楽ですね。
virtual-pve2, 3 にも同様に Ceph をインストールします。
virtual-pve1 で設定が完了しているため、 Configuration
ではなにも設定せずパッケージだけインストールしたら終わりです。