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

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

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

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

virtual-pve1,2,3 それぞれで下記のように WARN が表示されます。 これは OSD (Object-Storage-Daemon) が Ceph プールに 1 つも存在していないためです。 Object-Storage-Daemon は Ceph において読み込み要求や書き込み要求をおこなう各保存ストレージに設定する daemon らしいです。 また、同義として、該当の Daemon が管理する Ceph 用のストレージ自体を OSD として呼ぶようです。

そのため、現在はこれら OSD デーモンならびにデーモンで管理しているストレージが 0 個のため WARN がでています。

Imgur

少し回り道: 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 として追加されています。

Imgur Imgur

同様に 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'

Imgur

あとは実際に各 virtual-pve1,2,3 上で OSD を作成します。 それぞれ 10 秒ぐらいで完了します。

Imgur

Ceph Object Storage Daemon が 3 つ稼働しはじめ、 各 virtual-pve%d ノードの /dev/sdb を管理しはじめました。 データセンタの Ceph UI でもそのことが確認できます。

Imgur Imgur

CephFS を利用してみる

CephFS タブから Create Metadata Server を行います。 設定内容はそのまま入れます。

Imgur

各ノード上で Ceph FS Metadata Server を作成し、以下のようになりました。 Imgur

Metadata Server が立ったため、実際に Ceph FS ストレージ cephfs-hoge を作成します。 作成すると各ノード上で cephfs-hoge として CephFS が確認できました。

(cephfs-hoge を作成する、という操作は1回しか行っていません。各 virtual-pve1, 2, 3 それぞれに通信が行き自動で cephfs-hoge を各 OSD 上に用意してくれます。)

Imgur Imgur

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 へも反映されます。むしろ、まったく同じファイルシステムを触っている、として考えたほうが良いですね…。

Imgur Imgur

上記の 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 が作成されました。

Imgur

Imgur

ノード障害を検知するために Monitor を virtual-pve2, 3 にも追加します。 1 にはすでにモニターが設定されています。

Imgur

failover をテストするために failover-vm という Alpine VM を立てます。 最初 Ubuntu Server (cloud-init) でやろうとしたのですが、 CD/ROM ではなく Disk に ISO をインポートする必要があり、Failover を試したいだけとしては面倒なのでやめました。

cephfs-hoge にある ISO Image を利用し、かつ virtual-ceph-pool の Storage を利用します。

Imgur

Imgur Imgur

Proxmox HA に Group を用意して VM を登録する

HA 構成のために HA Group を用意します。 なにかノードがエラーがでたときにどの他ノードへ移動させるか?を設定するためにグループがあります。 下記のように virtual-ha-group を作成します。

Imgur

続いて、 301 VM (failover-vm) を virtual-ha-group へ登録します。 HA 登録自体は Datacenter の HA で設定するようですね。

無事 HA Resources に vm:301 が登録されています。

Imgur

Imgur

FailOver させてみる

virtual-pve2 自体を停止させることで、 virtual-pve2 に存在する 301 failover-vm をフェイルオーバーさせます。

Imgur

1 分ぐらい経過すると、 301 failover-vm が virtual-pve1 へ自動で移動しました。 CD/DVD Drive や HardDisk は CephFS を利用しているため、変化はありません。 Ceph 経由のためエラーは起きていませんでした :sasuga:。

ただ、稼働状態のままの移動になっておらず、 Shutdown された状態で移動していました。

Imgur Imgur

このあと 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 設定の面倒なところを吸収してくれる
      • 自分でやろうとすると大変

次のノートでは

  • windows VM を使ってみる をやってみます。

その次から terraform を Proxmox に導入し、それが終わればいよいよその内部、つまり Proxmox に VM を立ててその VM に Kubernetes を立てる、などをやっていきます。