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 をインストールします。
(後述: HA 構成のために virtual-pve3 を追加しています。)
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 [email protected] -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
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 に正しく移動できました。 これは便利ですね…
Failover を試すために HA 構成と Ceph を用意する
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
ではなにも設定せずパッケージだけインストールしたら終わりです。
virtual-pve1,2,3 それぞれで下記のように WARN が表示されます。 これは OSD (Object-Storage-Daemon) が Ceph プールに 1 つも存在していないためです。 Object-Storage-Daemon は Ceph において読み込み要求や書き込み要求をおこなう各保存ストレージに設定する daemon らしいです。 また、同義として、該当の Daemon が管理する Ceph 用のストレージ自体を OSD として呼ぶようです。
そのため、現在はこれら OSD デーモンならびにデーモンで管理しているストレージが 0 個のため WARN がでています。
少し回り道: Ceph の仕組みやコンポーネントを調べる
ceph コマンドで ceph に関するいろいろな操作が行える
root@virtual-pve1:~# ceph -s
cluster:
id: 901107b8-5e21-470f-a976-b23f063d8ddb
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum virtual-pve1 (age 29h)
mgr: virtual-pve1(active, since 29h)
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
Ceph の設定ファイルは /etc/ceph/ceph.conf
にありました。
virtual-pve1 にしかなかったため、メインのノードにしかないようです。
root@virtual-pve1:~# cat /etc/ceph/ceph.conf
[global]
auth_client_required = cephx
auth_cluster_required = cephx
auth_service_required = cephx
cluster_network = 192.168.11.201/24
fsid = 901107b8-5e21-470f-a976-b23f063d8ddb
mon_allow_pool_delete = true
mon_host = 192.168.11.201
ms_bind_ipv4 = true
ms_bind_ipv6 = false
osd_pool_default_min_size = 2
osd_pool_default_size = 3
public_network = 192.168.11.201/24
[client]
keyring = /etc/pve/priv/$cluster.$name.keyring
[client.crash]
keyring = /etc/pve/ceph/$cluster.$name.keyring
[mon.virtual-pve1]
public_addr = 192.168.11.201
Ceph 全体で異常が起きていないか確認するのが Ceph Monitor Daemon になっています。 各ノードに1つずつ存在し、必ず3つ以上存在するようです。これは HA のためです。
● [email protected] - Ceph cluster monitor daemon
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/[email protected]
└─ceph-after-pve-cluster.conf
Active: active (running) since Fri 2025-07-18 08:59:15 JST; 1 day 5h ago
Main PID: 233781 (ceph-mon)
Tasks: 25
Memory: 324.7M
CPU: 5min 22.882s
CGroup: /system.slice/system-ceph\x2dmon.slice/[email protected]
Ceph Manager (MGR) は Ceph クラスタを管理するデーモンらしいです。
● [email protected] - Ceph cluster manager daemon
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/[email protected]
└─ceph-after-pve-cluster.conf
Active: active (running) since Fri 2025-07-18 08:59:16 JST; 1 day 5h ago
Main PID: 233921 (ceph-mgr)
Tasks: 86 (limit: 4728)
Memory: 337.5M
CPU: 2min 45.840s
CGroup: /system.slice/system-ceph\x2dmgr.slice/[email protected]
Ceph Meta Data Server (mds) は CephFS の metadata-server であり、FileSystem としてあつかうための情報を管理するようです。
root@virtual-pve3:~# systemctl status ceph-mds@*
● [email protected] - Ceph metadata server daemon
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/[email protected]
└─ceph-after-pve-cluster.conf
Active: active (running) since Sat 2025-07-19 15:23:44 JST; 57min ago
Main PID: 535344 (ceph-mds)
Tasks: 29
Memory: 35.7M
CPU: 5.085s
CGroup: /system.slice/system-ceph\x2dmds.slice/[email protected]
Ceph Object Storage Daemon は各ノードの各ディスクごとに立ち上げるデーモンです。 ストレージへの書き込み・読み込みを行います。
● [email protected] - Ceph object storage daemon osd.2
Loaded: loaded (/lib/systemd/system/[email protected]; enabled-runtime; preset: enabled)
Drop-In: /usr/lib/systemd/system/[email protected]
└─ceph-after-pve-cluster.conf
Active: active (running) since Sat 2025-07-19 15:18:49 JST; 1h 3min ago
Main PID: 533829 (ceph-osd)
Tasks: 58
Memory: 135.0M
CPU: 23.647s
OSD 用のディスクを追加して OSD 化する
OSD デーモンをインストールするには空っぽのディスクが必要です。 そのため、ホスト Proxmox OS 側で virtual-pve1, 2, 3 についてディスクを追加します。
virtual-pve1 の /dev/sdb として追加されています。
同様に virtual-pve2, 3 にもハードディスクを追加します。
せっかくなのでコマンドで追加します。
なお、 102 について iothread=1
をつけ忘れたため、GUI 上で更新しています。
root@pve:~# qm set 102 --scsi1 local-lvm:10
update VM 102: -scsi1 local-lvm:10
Logical volume "vm-102-disk-1" created.
scsi1: successfully created disk 'local-lvm:vm-102-disk-1,size=10G'
root@pve:~# qm set 103 --scsi1 local-lvm:10,iothread=1
update VM 103: -scsi1 local-lvm:10,iothread=1
Logical volume "vm-103-disk-1" created.
scsi1: successfully created disk 'local-lvm:vm-103-disk-1,iothread=1,size=10G'
あとは実際に各 virtual-pve1,2,3 上で OSD を作成します。 それぞれ 10 秒ぐらいで完了します。
Ceph Object Storage Daemon が 3 つ稼働しはじめ、 各 virtual-pve%d ノードの /dev/sdb
を管理しはじめました。
データセンタの Ceph UI でもそのことが確認できます。
CephFS を利用してみる
CephFS タブから Create Metadata Server を行います。 設定内容はそのまま入れます。
各ノード上で Ceph FS Metadata Server を作成し、以下のようになりました。
Metadata Server が立ったため、実際に Ceph FS ストレージ cephfs-hoge
を作成します。
作成すると各ノード上で cephfs-hoge として CephFS が確認できました。
(cephfs-hoge を作成する、という操作は1回しか行っていません。各 virtual-pve1, 2, 3 それぞれに通信が行き自動で cephfs-hoge を各 OSD 上に用意してくれます。)
virutal-pve1 の cephfs-hoge に ubuntu-server (cloud-init) イメージをダウンロードしました。 しかし、 virtual-pve2, 3 上でも img が確認できます。 これは各 virtual-pve1, 2, 3 上それぞれ合計 3 つ OSD 上の cephfs-hoge が互いに連携しており、ファイルシステムとして整合性が取れるよう同期しているためです。 virtual-pve2 の cephfs-hoge に行った変更は 1, 3 へも反映されます。むしろ、まったく同じファイルシステムを触っている、として考えたほうが良いですね…。
上記の Ubuntu Server Image ファイルが virtual-pve1,2,3 上のどこに保存されているかをついでに確認します。
/mnt/pve/cephfs-hoge
というパスに ceph format のファイルシステムがマウントされているようです。
root@virtual-pve1:/mnt/pve/cephfs-hoge# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 401M 1.1M 400M 1% /run
/dev/mapper/pve-root ext4 36G 7.4G 26G 22% /
tmpfs tmpfs 2.0G 54M 2.0G 3% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/fuse fuse 128M 28K 128M 1% /etc/pve
tmpfs tmpfs 2.0G 80K 2.0G 1% /var/lib/ceph/osd/ceph-0
192.168.11.201:/ ceph 9.5G 584M 8.9G 7% /mnt/pve/cephfs-hoge
tmpfs tmpfs 401M 0 401M 0% /run/user/0
root@virtual-pve3:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 953M 0 953M 0% /dev
tmpfs tmpfs 198M 1.1M 197M 1% /run
/dev/mapper/pve-root ext4 36G 4.3G 29G 13% /
tmpfs tmpfs 986M 66M 920M 7% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/fuse fuse 128M 28K 128M 1% /etc/pve
tmpfs tmpfs 986M 80K 986M 1% /var/lib/ceph/osd/ceph-2
192.168.11.201:/ ceph 9.5G 584M 8.9G 7% /mnt/pve/cephfs-hoge
tmpfs tmpfs 198M 0 198M 0% /run/user/0
/mnt/pve/cephfs-hoge
にアクセスしようとすると、 192.168.11.201 で動いている Ceph のシステムにアクセスして、OSD プールのうちプライマリに問い合わせていい感じにファイルとして処理してくれるようです。
このあたりの挙動はよくわからないですね…
root@virtual-pve3:~# findmnt /mnt/pve/cephfs-hoge
TARGET SOURCE FSTYPE OPTIONS
/mnt/pve/cephfs-hoge 192.168.11.201:/ ceph rw,relatime,name=admin,secret=<hidden>,fsid=901107b8-5e21-47
root@virtual-pve3:~#
Proxmox クラスタで障害が起きたときに他ノードへ VM を移動させるようにする
https://note.shiftinc.jp/n/n3dbf38a4affd
Ceph Pool を作成します。 Ceph のプールとは、OSD を論理的に管理するグループ機能のようです。
Ceph Pool を作成する
下記画像のように virtual-ceph-pool
という名前とし Size を 3 と設定しました。
virtual-pve1,2,3 それぞれに virtual-ceph-pool が作成されました。
ノード障害を検知するために Monitor を virtual-pve2, 3 にも追加します。 1 にはすでにモニターが設定されています。
failover をテストするために failover-
vm という Alpine VM を立てます。
最初 Ubuntu Server (cloud-init) でやろうとしたのですが、 CD/ROM ではなく Disk に ISO をインポートする必要があり、Failover を試したいだけとしては面倒なのでやめました。
cephfs-hoge にある ISO Image を利用し、かつ virtual-ceph-pool の Storage を利用します。
Proxmox HA に Group を用意して VM を登録する
HA 構成のために HA Group を用意します。
なにかノードがエラーがでたときにどの他ノードへ移動させるか?を設定するためにグループがあります。
下記のように virtual-ha-group
を作成します。
続いて、 301 VM (failover-vm) を virtual-ha-group
へ登録します。
HA 登録自体は Datacenter の HA で設定するようですね。
無事 HA Resources に vm:301 が登録されています。
FailOver させてみる
virtual-pve2 自体を停止させることで、 virtual-pve2 に存在する 301 failover-vm をフェイルオーバーさせます。
1 分ぐらい経過すると、 301 failover-vm が virtual-pve1 へ自動で移動しました。 CD/DVD Drive や HardDisk は CephFS を利用しているため、変化はありません。 Ceph 経由のためエラーは起きていませんでした :sasuga:。
ただ、稼働状態のままの移動になっておらず、 Shutdown された状態で移動していました。
このあと virtual-pve1 に移動した failover-vm を起動しようとしたのですが、一生起動しません。
おそらく Ceph Pool
の容量不足ではないかなと考えています。
この failover への挑戦については terraform を Proxmox に導入するタイミングなどで試そうと思います。 WindowsVM を立ててノベルゲームを遊んでみる、などやりたいことが詰まっているため…。
まとめ
- cloud-init によって OS の初期設定を自動化できる
- Username, hostname, 権限, ssh などの初期設定を cloud-init daemon がやってくれる
- 各 Cloud Provider は cloud-init と各社の GUI を利用して、これら初期設定を GUI に入職してもらい、その値を cloud-init に渡している
- Proxmox では基本設定のみ GUI で設定でき、カスタム設定については yaml を特定のパスに配置することでおこなえる
- Proxmox は HA 構成にできる
- 3 Node 必要
- かつ、論理的な
Group
を作成し、Group 内でどれかのノードに障害が起きたら他ノードに VM を移動させる- そのためにはディスクが Ceph など共有ストレージにある必要がある
- Ceph をつかうことでソフトウェアベースの 分散ストレージ DistributedStorage を用意できる
- 3 ノード必要、かつ、非常にメモリ・CPU それぞれ重たい
- プロダクションじゃないと正直厳しいぐらい重たい
- CephFS, ブロックストレージ, S3 などいろいろな使い方ができる
- Proxmox は Ceph 設定の面倒なところを吸収してくれる
- 自分でやろうとすると大変
- 3 ノード必要、かつ、非常にメモリ・CPU それぞれ重たい
次のノートでは
- windows VM を使ってみる をやってみます。
その次から terraform を Proxmox に導入し、それが終わればいよいよその内部、つまり Proxmox に VM を立ててその VM に Kubernetes を立てる、などをやっていきます。