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 NameIP AddressCPUStorageRAM
virtual-pve1192.168.11.2011100 GB4 GB
virtual-pve2192.168.11.2021100 GB4 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.

Imgur

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

Imgur

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

Imgur

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 増やしました。

Imgur Imgur

最後にようやく cloud-init を設定します。 ユーザ名やパスワード、DNS ドメインなどを設定します。

SSH 鍵やユーザ名を登録しました。 IP アドレスは VM ごとに固定アドレスを振りたいのであとから入力します。

Imgur Imgur

テンプレートの設定が終わったため 1 台目の ubuntu を立てます。 ubuntu-1 を起動するまえに cloud-init から IP アドレスを編集して 192.168.11.210 に固定することにします。

Imgur Imgur

その後 101 (ubuntu-1) を起動するとちゃんと IP アドレスが振られており、かつ ganyariya というユーザ名でアクセスできることが確認できました。 Imgur

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 なども変更できません。

Imgur

それ以外の項目についても変更したい場合は下記記事のように snippets 機能、そして cicustom を利用しないとだめなようです。

https://ainoniwa.net/pelican/2021-08-10a.html https://pve.proxmox.com/wiki/Cloud-Init_Support

今回は

  1. proxmox image に cloud-init のパッケージを追加してテンプレート化する
  2. 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

Imgur

cloud-init の CDROM は設定しない、この状態で 9002 VM を起動して Proxmox OS をインストールします。 あとで個別の VM を作成したときに IP アドレスと Hostname は変更します。そのためここでは proxmoxvm-template.local と 192.168.11.250 という仮の値を入れておきます。 Imgur Imgur

インストールが終わったら scsi1 (Proxmox OS がインストールされたディスク) をブートにします。 これで Proxmox on Proxmox ができるようになります。

qm set 9002 --boot order=scsi1

Imgur

ここまでできたら cloud-init するためのパッケージをインストールします。 proxmoxvm-template vm 上で apt install cloud-init します。

Imgur

ここまで終わったら 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 だけ設定しました。

Imgur

ためしに clone して virtual-proxmox1 を作成してみます。

Imgur Imgur

立ち上げてみるとうまく proxmox にアクセスできませんでした。 原因としては

  • proxmox は独自に /etc/hosts を設定する
    • 192.168.11.101 pve.local pve のような設定をおこなう
    • しかし、 proxmox vm で cloud-init を設定すると、このネットワーク設定が消えてしまう

Imgur これは毎回書き換えられてしまう、駄目な設定の proxmox vm

Imgur これはホスト Proxmox の正しい設定。 192.168.11.101 に pve.local, pve というホスト名が振られている。

そのため、正常に動作させるには cicustom を利用して /etc/hosts の設定を完全に同一の内容に設定しないとだめでした。

そのため今回は 2 つの Proxmox VM を手動で立てることにします。

2 つの Proxmox VM を手動で立てる

CPU 設定で host を設定することに注意しましょう。 また、Qemu Agent はチェックしておくと便利です。

Imgur Imgur

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

ImgurImgur Imgur

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 にしてみました。

Imgur

無事クラスタ作成が完了しました。 Imgur

pvecm (proxmox ve cluster manager) でクラスタ情報が確認できます。

Imgur

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-pve1virt-clustervirtual-pve2 を参加させます。 まず virtual-pve1 でクラスタ参加に必要な認証情報を表示します。 この認証情報を利用して virtual-pve2 をクラスタへ参加させます。

Imgur

virtual-pve1 の Join Information を virtual-pve2 の Cluster Join の画面で入力します。 すると

  • Peer Address
  • Password
  • Fingerprint が表示&部分的に自動入力されます。 Password については virtual-pve1 のパスワードを入れます。

Imgur

成功すると下記のようになります。

Imgur

virtual-pve1, 2 両方で互いの Proxmox Node を認識できるようになりました。

Imgur Imgur

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 を作成してみます。

Imgur

virtual-pve2 の GUI から、 virtual-pve1 ノードで動く ubuntu-server1 VM を立てられました。 Imgur Imgur

では 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 は起動した状態で移動させます。

Imgur Imgur

移動させている最中も ls, pwd など ubuntu-server1 上でコマンドは入力できました。 VM が止まることなく、 virtual-pve2 に正しく移動できました。 これは便利ですね…

Imgur

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 を用意してクラスタに参加させます。

Imgur

Imgur Imgur Imgur

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 にします。

Imgur Imgur

ネットワークは virtual-pve1 に割り当てている IP と同じにします。

Imgur

インストールが完了しました。

  1. 他ノードに ceph ノードを用意する
  2. ceph monitor を追加する
  3. ceph ods を作成する
  4. ceph pool を作成する

という手順を踏むとよいようです。

本来であれば Ceph に必要な package を入れる & 初期設定を yaml などでやらないといけないとおもうのですが、それを Proxmox 側が吸収してくれて楽ですね。

Imgur

virtual-pve2, 3 にも同様に Ceph をインストールします。 virtual-pve1 で設定が完了しているため、 Configuration ではなにも設定せずパッケージだけインストールしたら終わりです。 Imgur

Imgur