OSSなHCIソリューション「Proxmox」を試す
ちょっとこの辺の波に乗ってみた。
自分が買ったのはこれ
皆さんはClineで生成させたアプリのデプロイ環境みたいな感じで使っておられる様子。自分もそれは試してみたいと思っているが(最近は別のことをやっているので全然触れていない・・・)、個人的には以下に興味がある。
GPUをパススルーでVMに割り当てて環境を構築すれば、例えばバージョンの異なるCUDAを複数のVMで運用できるのではないか?と考えている。
(もうCUDAのバージョンで動かないとかダウングレードしないといけない、とかを考えたくもないしやりたくもないのよな・・・)
実際にできるかどうかは置いといて、とりあえずProxmoxを一度も試したことがないのでやってみる。
そういえば「おうちKubernetes」をやろうと思った時に、Proxmoxも考えたのよな。
ただ、当時は複数台用意するとなるとRPiのほうが安かったので、そちらにしたのだけども。我が家のお蔵入りしているRPi K8Sクラスタ・・・
ちょっと前にも改めてやっていたのだけど、K8S熱が上がってきた感があるなー。マルチエージェントのデプロイ先にK8Sはとてもいいと思うし。
公式サイト
データセンターをシンプルに
Proxmoxは、すべての機能に誰もがフルアクセスできる強力なエンタープライズグレードのソリューションを提供します。信頼性と安全性に優れています。
ソフトウェア定義のオープンなプラットフォームは、導入、管理、予算が容易です。Proxmox Virtual Environment
Proxmox Virtual Environmentは、企業向け仮想化のための完全なオープンソースプラットフォームです。内蔵のウェブインターフェースにより、単一のソリューションを使用して、VMやコンテナ、ソフトウェア定義のストレージやネットワーク、高可用性クラスタリング、複数のすぐに使えるツールを簡単に管理できます。
Proxmox Backup Server
Proxmox Backup Serverは、VM、コンテナ、物理ホストのバックアップと復元を行うためのエンタープライズバックアップソリューションです。このオープンソースソリューションは、増分バックアップ、重複排除、Z標準圧縮、認証付き暗号化をサポートしています。
Proxmox Mail Gateway
Proxmox Mail Gatewayは、メールサーバーをあらゆるメールの脅威から保護するオープンソースのメールセキュリティソリューションです。すべての機能を備えたメールプロキシは、ファイアウォールと内部メールサーバーの間に数分で簡単に導入できます。
使うのは Proxmox Virtual Environment(Proxmox VE) ということになる。
Proxmox Virtual Environment
Proxmox Virtual Environmentは、エンタープライズ仮想化のための完全なオープンソースのサーバー管理プラットフォームです。KVMハイパーバイザーとLinuxコンテナ(LXC)、ソフトウェア定義のストレージおよびネットワーク機能を単一のプラットフォームに緊密に統合しています。統合されたウェブベースのユーザーインターフェースにより、VMやコンテナ、クラスターの高可用性、統合された災害復旧ツールを簡単に管理できます。
コンピューティング、ネットワーク、ストレージを単一のソリューションで
エンタープライズクラスの機能と100%ソフトウェアベースの特長を備えたProxmox VEは、ITインフラストラクチャの仮想化、既存のリソースの最適化、最小限の費用で効率性を向上させるのに最適な選択肢です。LinuxおよびWindowsアプリケーションのワークロードの中でも最も要求の厳しいものも簡単に仮想化でき、ニーズの拡大に合わせてコンピューティングとストレージを動的に拡張できるため、データセンターを将来の成長に合わせて調整することができます。
Proxmox VEでオープンで将来性のあるデータセンターを構築してみませんか?
Proxmox VEの機能についてはこちらにまとまっている
箇条書きでまとめるとこんな感じ
- 仮想化
- Debian GNU/Linuxを基盤とし、カスタムLinuxカーネル
- ソースコードはAGPLv3ライセンスで公開
- KVM
- LXC
- 管理
- Web GUI
- モバイルWeb・Androidアプリ
- CLI
- REST API
- クラスタリング
- Proxmox Cluster File System(pmxcfs)による構成ファイルのリアルタイム同期
- ライブ/オンラインマイグレーション
- マルチマスターデザインによりどのノードからも管理GUIにアクセス可能
- 認証
- RBACにより細かい権限の制御が可能
- 複数の認証方式に対応
- Linux PAM
- Proxmox VE ビルトイン認証サーバー
- LDAP
- Microsoft Active Directory
- OIDC
- 高可用性(HA)
- Linux HAをベースにしたProxmox VE High Availability (HA) Cluster
- Proxmox VE HA Manager
- 障害時に自動で対応、ゼロコンフィギュレーションで動作
- ノード障害時のVM自動フェイルオーバー
- ウォッチドッグベースのノードの自動フェンシング
- Proxmox VE HAシミュレーター
- 3ノードクラスタ・6VMによるHAのテストが可能
- 初期セットアップ不要で利用可
- ネットワーク
- SDNによる高度なネットワーク構成やマルチテナント
- ノード単体でプライベートネットワーク
- クラスタ間でオーバーレイネットワーク
- NAT、802.1q VLAN、QinQ、VXLAN、BGPベースのEVPNなど
- Linuxネットワーキングスタック
- ローカルノードごとの柔軟なネットワーク
- ブリッジネットワークモデル
- VLAN、ボンディング、ルーティング等
- ローカルノードごとの柔軟なネットワーク
- SDNによる高度なネットワーク構成やマルチテナント
- ストレージ
- 柔軟なストレージモデルで、VMをローカル・共有ストレージのどちらにも保存可
- ストレージ数の制限なし、Debian GNU/Linuxで利用可能なすべてのストレージ技術をサポート
- ネットワークストレージ
- LVMグループ(iSCSIターゲットをバックエンドとして使用)
- iSCSIターゲット
- NFS共有
- SMB/CIFS
- Ceph RBD
- iSCSI LUNへの直接接続
- GlusterFS
- CephFS
- ローカルストレージ
- LVMグループ
- ディレクトリ型ストレージ(既存のファイルシステム上にVMイメージを保存)
- ZFS
- Cephによるソフトウェア定義ストレージ
- Cephによる分散オブジェクトストア・ファイルシステムが利用可能
- ストレージタイプ
- RADOSブロックデバイス
- ブロックレベルのストレージ、VMイメージやスナップショットのストレージとして利用可
- CephFS
- Cephストレージクラスタを使用するPOSIX準拠のファイルシステム
- RADOSブロックデバイス
- Proxmox VEはCephと完全に統合
- GUI・CLIによりセットアップ・管理が用意
- セルフヒーリングによる耐障害性
- エクサバイト規模のスケーラビリティ
- ストレージプールで異なるパフォーマンス・冗長性に適応
- 安価な汎用ハードウェアで動作可
- ファイアウォール
- Proxmox VE Firewallがビルトイン
- GUI・CUIで設定可
- クラスタ全体、VM単位、コンテナ単位でルール適用可
- ファイアウォールマクロ、セキュリティグループ、IPセット、エイリアスなど
- 分散ファイアウォール
- pmxcfsによる分散かつ一元管理
- クラスタノードでiptablesベースのファイアウォールが動作
- 集中管理型よりも高い帯域幅
- IPv4・IPv6サポート
- 両方に完全対応
- デフォルトは両方ともフィルタリングされる
- Proxmox VE Firewallがビルトイン
- バックアップ
- バックアップソリューションが完全統合
- GUI・CLI(vzdumpツール)により実施が容易
- VM・コンテナのメタデータも含む完全バックアップ
- vmdumpツールを使用した整合性のあるスナップショット
- 任意のノード・VM単位でスケジュールバックアップ
- バックアップストレージ
- NFS, iSCSI LUN, Ceph RBDなどのすべてのストレージタイプに対応したKVMライブバックアップ
- スパースファイルに最適化され高速なProxmox VEバックアップフォーマット
- バックアップソリューションが完全統合
- Proxmox Backup Serverの統合
- Proxmox Backup Server: エンタープライズ向け高性能バックアップソリューション
- Proxmox VEと完全統合、VM/コンテナ/物理ホストのバックアップを効率的に管理可能。
- 増分バックアップ
- クライアントサイド暗号化
- ライブリストア
- リストア開始直後に起動可能
- VMがアクティブに使用するデータを優先して復元しつつ、バックグラウンドで継続的にコピー
- シングルファイルリストア
- 特定のファイルやディレクトリのみを復元可
- GUIからの検索・復元が容易
- Proxmox Backup Server: エンタープライズ向け高性能バックアップソリューション
公式ドキュメントはこちら
Proxmox VE Administration Guide
インストールについてはここ。
これを見ながら進める
インストールメディアの作成
以下よりISOイメージをダウンロード。現時点で最新の「Proxmox VE 8.3 ISO Installer」を選択した。
自分は4GBのUSBメモリを用意。Macなので以下のように実施した。
接続されているディスクの一覧を表示
diskutil list
USBメモリはこのdisk4
。
/dev/disk4 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *4.0 GB disk4
1: DOS_FAT_32 4.0 GB disk4s1
マウントされていれば、アンマウントする
diskutil unmountDisk /dev/disk4
ddでISOイメージをUSBメモリに書き込み。普通にやると終わるまで何も出力されないのでstatus=progress
をつけておくと良いかも。
sudo dd if=proxmox-ve_8.3-1.iso bs=1M of=/dev/rdisk4 status=progress
進捗は見えないけど、少なくとも動いている様はわかるので。
81788928 bytes (82 MB, 78 MiB) transferred 26.268s, 3114 kB/s
終了
1381+1 records in
1381+1 records out
1449048064 bytes transferred in 469.937444 secs (3083491 bytes/sec)
balkenaEtcherとかを使ったほうがわかりやすいかも。
Proxmoxのインストール
今回使用したこのミニPC。
インストール開始すべくUSBメモリからブートさせるために、まずBIOSに入ろうとしたが、BIOSへの入り方がどこにも載ってないし、起動時にPOST画面が表示されない、いろいろキーも試したけど、全然進めず・・・
いろいろ四苦八苦した挙げ句、なんとなくわかったこと。
- ディスプレイはHDMI2に繋ぐ必要がありそう。HDMI1ではPOST画面が表示されず、OS(デフォルトだとWindows11)の起動が始まってしまう。つまりOS起動後に切り替わっているのではなかろうか。
- BIOSに入るには
DEL
orESC
で。
ここに気づくまでに結構な時間を無駄にした・・・とりあえずBIOSでは以下を設定した。
- Fast Bootを無効化
- 仮想化関連機能が有効になっていることを確認
- ブートデバイスでUSBメモリを最優先
やっとインストーラが起動した・・・
あとは指示に従って進めていく。
インストールが終わったらコンソールでログインできるようになるが、ブラウザでもアクセスできるようになっているはず。https://[IPアドレス]:8006
にアクセスして、証明書の警告は出るがそのまま進めれば、ログイン画面が表示される。
レルムは"Linux PAM"、ユーザ名はroot
、パスワードはインストーラで入力したパスワードを入力してログイン。
サブスクリプションの警告が出るが、とりあえず進める。
ログイン完了。
インストール後の設定
インストール後に行う設定について。以下の記事が新し目で参考になりそう。
後は気が向いたら追加
VMの作成
管理画面で「VMの作成」を実行
各種設定を行う。設定内容はいろいろあるが、とりあえずほぼデフォルトだと以下(赤部分だけが設定したもの)
VMを作成して起動。
コンソールを表示する。
あとは画面に従ってインストーラを進めればOK。
デフォルトだとVMはホスト側のNICとはブリッジでつながる様子なので、LAN内から直接SSH等で接続できる。
テンプレートとクローン
毎回OSのインストールやセットアップをするのはめんどくさい。一旦作成・セットアップしたVMをテンプレートに変換することで、それを元にVMのクローンが作成できる。
テンプレート化するまでにVMはまあ一旦停止しておくほうが良さそう。
テンプレートに変換するとアイコンがちょっと変わる。テンプレートそのものから起動はできなくなり、クローンして起動することになる。
モードは2つあって、クローン時のストレージの扱いに違いがある。お好きな方を。
クローン後はセットアップ済みVMとして使える。なお、MACアドレスは変更される。
CLI
qmコマンドを使う。
ここが一番手っ取り早くまとまってた。
VMの一覧
qm list
でVMの一覧。テンプレートも表示される。
qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
100 ubuntu-24.04-lts-server stopped 2048 32.00 0
VMの新規作成
VMを新規作成はqm create
を使う。
qm create 101 \
--name "test-vm-01" \
--sockets 1 \
--cores 1 \
--memory 2048 \
--net0 virtio,bridge=vmbr0,firewall=1 \
--ostype l26 \
--ide2 local:iso/ubuntu-24.10-live-server-amd64.iso,media=cdrom \
--scsi0 local-lvm:32
確認
qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
100 ubuntu-24.04-lts-server stopped 2048 32.00 0
101 test-vm-01 stopped 2048 32.00 0
VMを起動
qm start 101
あとはGUIからコンソールに接続してインストールを進めればOK。(コンソールに接続するコマンドもあるようなのだけど、インストーラだといろいろむずかしいかも?)
基本的なパラメータの指定は、GUIでVM作成する際のこの内容をほぼそのまま指定すれば良さそうな感じ。
VMの停止・削除
VMの停止にはstop
とshutdown
がある。shutdown
はVM内のOSをきちんと終了させるのに対し、stop
は電源ブチ切りと同じことになるので注意。(そういうことが必要な場合もある)
qm stop 101
qm shudown 102
VMが停止した状態であればqm destroy
削除が可能
vm destroy 101
テンプレートからのクローン
OSインストールを伴うVM新規作成では、結局コンソールを開くことになるので、正直CLIでやるメリットはあまりない。CLIが便利なのはテンプレートからのクローンだと思う。qm clone
を使う
クローン元テンプレートのIDと、新しく作るクローン先VMのIDを指定する。
qm clone 100 102 --name "cloned-vm-01"
create linked clone of drive scsi0 (local-lvm:base-100-disk-0)
Logical volume "vm-102-disk-0" created.
デフォルトだとリンクされたクローンになるが、--full
をつけると完全なクローンになる。
qm clone 100 103 --name "cloned-vm-02"
create full clone of drive scsi0 (local-lvm:base-100-disk-0)
Logical volume "vm-103-disk-0" created.
transferred 0.0 B of 32.0 GiB (0.00%)
transferred 327.7 MiB of 32.0 GiB (1.00%)
transferred 655.4 MiB of 32.0 GiB (2.00%)
transferred 983.0 MiB of 32.0 GiB (3.00%)
transferred 1.3 GiB of 32.0 GiB (4.00%)
transferred 1.6 GiB of 32.0 GiB (5.00%)
transferred 1.9 GiB of 32.0 GiB (6.01%)
transferred 2.2 GiB of 32.0 GiB (7.01%)
transferred 2.6 GiB of 32.0 GiB (8.01%)
transferred 2.9 GiB of 32.0 GiB (9.01%)
(snip)
transferred 31.4 GiB of 32.0 GiB (98.10%)
transferred 31.7 GiB of 32.0 GiB (99.10%)
transferred 32.0 GiB of 32.0 GiB (100.00%)
transferred 32.0 GiB of 32.0 GiB (100.00%)
クローンされたVMのパラメータはqm set
で変更できる。まず元のテンプレートの設定を確認してみる。VMやテンプレートの設定の確認はqm config
を使う。
qm config 100
boot: order=scsi0;ide2;net0
cores: 1
cpu: x86-64-v2-AES
ide2: local:iso/ubuntu-24.04.1-live-server-amd64.iso,media=cdrom,size=2708862K
memory: 2048
meta: creation-qemu=9.0.2,ctime=1739216816
name: ubuntu-24.04-lts-server
net0: virtio=BC:24:11:B8:BD:0C,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:base-100-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=cf5e28af-bbe3-4fae-911b-754c6ee2c60e
sockets: 1
template: 1
vga: serial0
vmgenid: 37eb7e54-880b-4df2-938d-ae39c80a5e00
CPUコアx1、メモリ2GB、ディスク32GBになっている。
クローンしたVM ID: 102のほうはコアを増やしてみる。
qm set 102 --cores 2
update VM 102: -cores 2
もう1台のVM ID: 103のほうはメモリを増やしてディスクを追加してみる。
qm set 103 --memory 4096
update VM 103: -memory 4096
qm set 103 --scsi1 local-lvm:8
Logical volume "vm-103-disk-1" created.
scsi1: successfully created disk 'local-lvm:vm-103-disk-1,size=8G'
Kubernetesのようにクラスタを作るために複数台のVMが必要になるケースではとても便利。
Cloud-Initも使ってみる。Cloud-Initの設定の流れはこういうもの
- 自動設定したい初期設定情報を含んだISOイメージを作る。
seed.iso
という名前にしておくのが一般的。 - 各OSベンダーが配布しているCloud-Init対応OS(ディスク)イメージを使ってVMを起動。
- 起動時に
seed.iso
をCDROMドライブにマウントしておくと、その内容通りに自動的に設定してくれる。
ProxmoxでもCloud−Initに対応している。
ドキュメントを見る限り、seed.iso
をCLIで設定できる様子。管理画面も見渡してみたけど、GUIだとできることが限られてるように思えるので、ドキュメントに従うこととする。Proxmoxホスト上で作業を行う。
まずCloud-Init対応イメージをダウンロード。ここではUbuntu-24.04を使う。
-
https://cloud-images.ubuntu.com/ にアクセス
-
releases
→24.04
→release
→ubuntu-24.04-server-cloudimg-amd64.img
-
Proxmoxホスト上にディレクトリを作成してダウンロード
mkdir ci-images && cd ci-images
wget https://cloud-images.ubuntu.com/releases/noble/release/ubuntu-24.04-server-cloudimg-amd64.img
virtio-scsi-pci
コントローラを持つVMを作る。これはUbuntuのCloud−InitイメージはSCSIドライブにvirtio-scsi-pci
コントローラを必要とするためらしい。
qm create 9000 \
--memory 2048 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci
ダウンロードしたUbuntu-24.04のディスクイメージをProxmoxのローカルLVMボリュームにインポートしつつ、上記のVMにアタッチする。このときディスクイメージはフルパスで指定する必要がある。
qm set 9000 --scsi0 local-lvm:0,import-from=/root/ci-images/ubuntu-24.04-server-cloudimg-amd64.img
update VM 9000: -scsi0 local-lvm:0,import-from=/root/ci-images/ubuntu-24.04-server-cloudimg-amd64.img
Logical volume "vm-9000-disk-0" created.
transferred 0.0 B of 3.5 GiB (0.00%)
transferred 35.8 MiB of 3.5 GiB (1.00%)
transferred 72.0 MiB of 3.5 GiB (2.01%)
transferred 109.3 MiB of 3.5 GiB (3.05%)
(snip)
transferred 3.4 GiB of 3.5 GiB (98.38%)
transferred 3.5 GiB of 3.5 GiB (99.39%)
transferred 3.5 GiB of 3.5 GiB (100.00%)
transferred 3.5 GiB of 3.5 GiB (100.00%)
scsi0: successfully created disk 'local-lvm:vm-9000-disk-0,size=3584M'
こんな感じでVMが作成されディスクがアタッチされている
次に、Cloud−Initの設定をVMに渡すためのCDROMドライブをアタッチする。
qm set 9000 --ide2 local-lvm:cloudinit
update VM 9000: -ide2 local-lvm:cloudinit
Logical volume "vm-9000-cloudinit" created.
ide2: successfully created disk 'local-lvm:vm-9000-cloudinit,media=cdrom'
generating cloud-init ISO
おお、これでCloud−InitのISOイメージが作成されるような感じなのね。
ディスクから起動するようにブート順を設定
qm set 9000 --boot order=scsi0
update VM 9000: -boot order=scsi0
Cloud−Initイメージの多くはシリアルコンソールを必要とするらしいのでシリアルデバイスも接続。
qm set 9000 --serial0 socket --vga serial0
update VM 9000: -serial0 socket -vga serial0
最後にVMをテンプレートに変換する。
qm template 9000
Renamed "vm-9000-disk-0" to "base-9000-disk-0" in volume group "pve"
Logical volume pve/base-9000-disk-0 changed.
WARNING: Combining activation change with other commands is not advised.
こんな感じになった。
ではこのテンプレートからVMをクローンする。
qm clone 9000 123 --name ubuntu2404-test
create full clone of drive ide2 (local-lvm:vm-9000-cloudinit)
Logical volume "vm-123-cloudinit" created.
create linked clone of drive scsi0 (local-lvm:base-9000-disk-0)
Logical volume "vm-123-disk-0" created.
ではCloud-Initの設定を行う。この時点で既にGUIのVM設定画面からCloud-Initメニューが使えるようになっている。
GUIでは変更したい項目を変更して「イメージ再作成」するような感じになるみたいだけど、設定できる項目が少ない。
CLIでもqm set
で設定変更ができるが、以下あたりでこちらも同様に少ない。
-
--cipassword <パスワード>
: ユーザのパスワード -
--ciupgrade <boolean>
: 初回起動時にパッケージを最新にするか?デフォルトは「する」(1
) -
--ciuser <ユーザ名>
: イメージのデフォルトユーザ以外でSSH鍵やパスワードの変更を行うユーザ名 -
--ipconfig[n] [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>]
: ネットワークの設定 -
--nameserver <DNSサーバ名>
: DNSサーバの設定 -
--searchdomain <ドメイン名>
: DNS検索時のドメイン名 -
--sshkeys <SSH鍵へのファイルパス>
: SSH鍵の設定
あともう一つ--cicustom
というのがあるがこれは後述する
とりあえずこんな感じでユーザとパスワード、あとネットワークの設定は必須で、今回はDHCPから取得するように設定してある。
qm set 123 --ciuser kun432
qm set 123 --cipassword hogehoge
qm set 123 --ipconfig0 ip=dhcp
update VM 123: -ciuser kun432
update VM 123: -cipassword <hidden>
update VM 123: -ipconfig0 ip=dhcp
ではVMを起動してみる。
qm start 123
コンソールを開くと諸々の設定やパッケージの更新などが行われ、最後に設定したユーザとパスワードでログインできると思う。
ただちょっとVM設定するたびにこの設定をするのは面倒。テンプレートであらかじめ設定しておけばいいのでは?と思って試してみた。
クローンでVM作成
引き継がれている様子。
起動しても反映されていた。設定がこれぐらいだけでいいなら、GUIだけで完結するかなと思ったけど、ディスクイメージをVMにインポートできないとGUIだけでは無理そうだし、Cloud-Init使うならもっと色々設定したくなるはず。
ということで、--cicustom
。
また、Cloud-Initの統合により、自動生成された構成ファイルの代わりにカスタム構成ファイルを使用することもできます。これは、コマンドラインのcicustomオプションを使用して実行します:
qm set 9000 --cicustom "user=<volume>,network=<volume>,meta=<volume>"
カスタム構成ファイルは、スニペットをサポートするストレージ上に配置し、VMが移行されるすべてのノードで利用可能にする必要があります。そうでない場合、VMは起動できません。例えば、以下のようになります。
qm set 9000 --cicustom "user=local:snippets/userconfig.yaml"
Cloud-Initには3種類の構成があります。1つ目は、上記の例で示したuser設定です。2つ目はnetwork設定、3つ目はmeta設定です。これらすべてを一緒に指定することも、必要に応じて混在させて指定することもできます。カスタム構成ファイルが指定されていない場合は、自動生成された構成が使用されます。
生成されたコンフィグは、カスタムコンフィグのベースとして使用するためにダンプすることができます。
qm cloudinit dump 9000 user
networkとmetaにも同じコマンドがあります。
qm set
のドキュメントを見ると以下とあり、
--cicustom [meta=<volume>] [,network=<volume>] [,user=<volume>] [,vendor=<volume>]
cloud-init: Specify custom files to replace the automatically generated ones at start.
Proxmox上のボリュームにファイルを置いて指定する形になる様子。で、上記にある「スニペット」というのはどうやらストレージ機能の1つらしい。
ピンポイントに書かれている記事を見つけた。
なるほど、localボリューム上にCloud-Init設定ファイルを保存するためのsnippetsディレクトリを作成できるのね。
手元のProxmoxを見てみるとどうやら有効化されていない様子。
有効化する。
localボリュームは以下のパスにあり、
ls /var/lib/vz/
スニペットが有効化されるとディレクトリが作成される
dump images snippets template
GUIでも、localボリュームのメニューにスニペットが追加された。ただしメニューを見る限り、GUIからの追加はできなさそう・・・
Cloud−Initを有効にして作成したテンプレートから、設定をダンプしてみる。
qm cloudinit dump 9000 user
#cloud-config
hostname: VM9000
manage_etc_hosts: true
fqdn: VM9000
user: kun432
password: $5$tH3jSrAj$nJCq/dW4YLuw.hiEfPOs.KYMV3jR27wanJTCjIqvUe.
chpasswd:
expire: False
users:
- default
package_upgrade: true
qm cloudinit dump 9000 network
version: 1
config:
- type: physical
name: eth0
mac_address: 'bc:24:11:e2:d8:c4'
subnets:
- type: dhcp4
- type: nameserver
address:
- '8.8.8.8'
search:
- 'local'
qm cloudinit dump 9000 meta
instance-id: 51e90aa554aa7ca63cbba6580005fbc8b35c1fb6
つまりCloud-Initの設定はsnippetsディレクトリに用意しておいて、VMなりテンプレートなりに紐づけてやればよい。
この辺を見ながら設定
色々試行錯誤しながらこんな感じにした。
- ホスト名を設定
- ユーザを追加
- sudoグループに追加することで対象ユーザがsudoできるようになる
- パスワードの設定
- 設定ファイル内にプレーンテキストで設定(あまりよろしくないが)
- パッケージ
- パッケージの更新
- build-essentialパッケージを追加インストール
- ロケール・タイムゾーン設定
- 日本向けに設定
- コマンド実行
- sshdを有効化して起動
- 再起動
- パッケージアップデートでカーネルなど再起動が必要な場合にリブート
#cloud-config
hostname: ubuntu2404-ci-snippets
fqdn: ubuntu2404-ci-snippets
manage_etc_hosts: true
users:
- name: kun432
shell: /bin/bash
primary_group: kun432
groups: sudo
chpasswd:
expire: False
users:
- {name: kun432, password: hogehoge, type: text}
ssh_pwauth: true
package_update: true
package_upgrade: true
packages:
- build-essential
timezone: Asia/Tokyo
locale: ja_JP.utf8
runcmd:
- systemctl enable ssh
- systemctl start ssh
power_state:
mode: reboot
message: Rebooting after initial setup
timeout: 30
condition: True
version: 2
ethernets:
ens18:
dhcp4: true
では今回はVMを作成して、上記のCloud−Initの設定を紐づける。
まずVM作成。上でやったときには気づいてなかったけど、Cloud-Init対応ディスクイメージをそのままSCSIディスクとしてインポートするとディスクサイズが元のイメージのサイズになってしまい、ディスクが溢れてしまったので、リサイズを追加している。
qm create 125 \
--memory 2048 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci
qm set 125 --scsi0 local-lvm:0,import-from=/root/ci-images/ubuntu-24.04-server-cloudimg-amd64.img
qm disk resize 125 scsi0 20G
qm set 125 --ide2 local-lvm:cloudinit
qm set 125 --boot order=scsi0
qm set 125 --serial0 socket --vga serial0
--cicustom
でCloud−Init設定ファイルをVMに紐づける。なお、--cicustom
を使うと、このVMのCloud-Init設定はGUIで設定できなくなる。
qm set 125 --cicustom "user=local:snippets/ubuntu2404-custom-ci-user.yaml,network=local:snippets/ubuntu2404-custom-ci-network.yaml"
VM起動
qm start 125
起動後にログインしてみると、上記の設定が一通りできていることが確認できると思う。
参考
上でも書いたのだけども、
起動しても反映されていた。設定がこれぐらいだけでいいなら、GUIだけで完結するかなと思ったけど、ディスクイメージをVMにインポートできないとGUIだけでは無理そうだし、Cloud-Init使うならもっと色々設定したくなるはず。
ディスクイメージをVMにインポートするのはCLIだけでしかできなさそうに思ったのだけども、ストレージlocalの設定を見ると以下のようなものがある。
有効にしてみる。
インポートのメニューが増えた。
上で試したUbuntu-24.04のCloud-Initイメージをダウンロード・インポートさせてみる。「URLからダウンロード」を選択して、URLを入力。「クエリURL」をクリクするとファイル名が設定されるので、ダウンロード。
が、エラー。
ファイル名を変えたり、拡張子を.qcow2
とかに変更してみてもダメ。ドキュメント見てみたけども見つけれなかった。このメニューは何のために使うんだろうか?
Cloud−Initのイメージを置いたりできるのかなーとおもったけど、そうではなさそう。
とりあえずCloud-Initを使う場合は現状はCLIが前提かな。
Amazon Linux 2023の場合は以下の記事が参考になる。
AWS公式に従ってseed.isoを使う方法
ProxmoxのGUIからCloud−Initを設定する方法
どちらもCLIとGUIの両方の操作が必要になっていて、できればどちらかだけにしたいな、ということで、Ubuntuでやった場合と同じような手順に従ってやってみた。
Amazon Linux 2023のディスクイメージをダウンロード
cd ci-images
https://cdn.amazonlinux.com/al2023/os-images/2023.6.20250303.0/kvm/al2023-kvm-2023.6.20250303.0-kernel-6.1-x86_64.xfs.gpt.qcow2
VMを作成してAmazon Linux 2023のディスクイメージをインポートしてアタッチ
qm create 9001 \
--name "AmazonLinux2023" \
--machine q35,viommu=intel \
--cpu host \
--cores 2 \
--memory 2048 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci \
--bootdisk scsi0 \
--serial0 socket \
--vga serial0
qm set 9001 --scsi0 local-lvm:0,import-from=/root/ci-images/al2023-kvm-2023.6.20250303.0-kernel-6.1-x86_64.xfs.gpt.qcow2
qm set 9001 --ide2 local-lvm:cloudinit
qm set 9001 --boot order=scsi0
で、Ubuntuと同じようにCloud-Initの設定ファイルを作って--cicustom
から設定するのだけれども、これがどうもうまくいかない・・・具体的には起動してもログインできない。どうやらパスワード変更ができていないようなんだけど、ログインできないので確認ができないのだよね・・・
とりあえず--cicustom
は諦めて、以下のようにCLIで設定したらログインできた。
qm set 9001 --cipassword hogehoge
qm set 9001 --ipconfig0 ip=dhcp
ここまでできれば、あとはそのままVMで起動するなり、テンプレート化してクローンするなりすればよい。
まあ一応GUI操作ゼロでCLIに統一はできてるんだけど、どっちかというとGUIだけで完結したいという思いがあるのと、なんでAmazon Linux 2023だとうまくいかないのかが釈然としない・・・