ProxmoxでVMの作成をCloud-Initで自動化する
Proxmox環境でVMを作成する際、毎回ISOファイルからOSをインストールし、IPアドレスやSSHの設定、NTPの設定を行うのは面倒なので自動化する方法をまとめました。
この記事では、Cloud-InitとCloudイメージを活用し、VM構築(ネットワーク、SSH、NTP、DNSの設定まで)を完了させるためのテンプレート作成手順を記載しています。
前提条件
- Proxmox VEが構築済みであること
- VMを展開するストレージ名:
pool(大体の人はlocal-lvmとかで良いと思います。私は別のストレージが良かったので。) - OS:AlmaLinux 10
1. CloudイメージのダウンロードとベースVMの作成
まずはProxmoxノードのシェル(CLI)にログインし、AlmaLinux公式のCloudイメージをダウンロードしてベースとなるVM(今回はVM ID:9002)を作成します。
# 1. AlmaLinux 10のCloudイメージをダウンロード
wget https://repo.almalinux.org/almalinux/10/cloud/x86_64/images/AlmaLinux-10-GenericCloud-latest.x86_64.qcow2
# 2. ベースVMの作成(メモリ2GB、ネットワークブリッジvmbr0を指定)
qm create 9002 --name almalinux10-template --memory 2048 --net0 virtio,bridge=vmbr0
# 3. ディスクのインポート(ターゲットストレージを 'pool' に指定)
qm importdisk 9002 AlmaLinux-10-GenericCloud-latest.x86_64.qcow2 pool
2. ハードウェアとCloud-Initドライブの設定
次に、インポートしたディスクをVMにアタッチし、Cloud-Init用のCD-ROMドライブや起動順序などを設定します。
※ディレクトリ形式のストレージ(今回のpoolはそう)を使用している場合、インポートされた実際のファイル名を確認してからアタッチする必要があります。
# インポートされたディスクの実際のファイル名を確認
qm config 9002 | grep unused
# 出力例: unused0: pool:9002/vm-9002-disk-0.raw
# 確認したファイル名を使ってSCSIディスクとしてアタッチ
qm set 9002 --scsihw virtio-scsi-pci --scsi0 pool:9002/vm-9002-disk-0.raw
# Cloud-Initドライブの追加
qm set 9002 --ide2 pool:cloudinit
# ブート順序の設定(SCSIディスクから起動)
qm set 9002 --boot c --bootdisk scsi0
# シリアルコンソールの設定(Proxmoxの画面にコンソール出力を表示させるため)
qm set 9002 --serial0 socket --vga serial0
【重要】AlmaLinux 10のCPU要件対応
AlmaLinux 10(RHEL 10ベース)は x86-64-v3 以上のCPU命令セットを必須とします。Proxmoxのデフォルト(kvm64)では起動しないため、CPUタイプを host に変更します。
qm set 9002 --cpu host
3. NTPサーバーの自動設定(カスタムスニペット)
Cloud-Initの標準GUIにはNTPの設定項目がないため、カスタムスニペット機能を使ってNTP(今回はmfeed)の設定を組み込みます。
3-1. スニペット機能の有効化(GUI)
- Proxmox左側メニューの「データセンター」>「ストレージ」を開く。
-
localストレージを編集し、「コンテンツ」のリストに 「スニペット (Snippets)」 を追加して保存。
3-2. NTP設定ファイルの作成と適用(CLI)
# 保存先ディレクトリの作成
mkdir -p /var/lib/vz/snippets
# スニペットファイルの作成
vi /var/lib/vz/snippets/ntp.yaml
お好きなNTPサーバを指定してして保存します(先頭の #cloud-config は必須です)。
#cloud-config
ntp:
enabled: true
ntp_client: chrony
pools:
- ntp1.jst.mfeed.ad.jp
- ntp2.jst.mfeed.ad.jp
- ntp3.jst.mfeed.ad.jp
作成したファイルをテンプレートに適用します。
qm set 9002 --cicustom "vendor=local:snippets/ntp.yaml"
4. テンプレートへの変換
すべての準備が整ったら、VMをテンプレート化します。
qm template 9002
これで大元のテンプレートが完成です。
5. テンプレートから実際にVMを作成する。
ここからはすべてProxmoxのGUI上で完結します。
-
クローン作成: テンプレート(9002)を右クリックして「クローン」を選択し、新しいVMを作成します。(※ストレージが対応していれば「リンククローン」で一瞬で作成可能です)

-
スペック調整: 必要に応じて「ハードウェア」タブからCPUコア数やメモリを変更し、ディスク容量を「Resize」で拡張します。(Cloud-Initが自動でOS内のパーティションも拡張してくれます)

-
Cloud-Initの設定: 「Cloud-Init」タブを開き、以下の項目を入力します。
-
ユーザ: ログイン用の任意のユーザ名(このユーザはパスワードなしで
sudoが可能です) - パスワード 上で作成したユーザのパスワード
-
SSH公開鍵: 手元のPCの公開鍵(
id_rsa.pubなど) - IP設定: 固定IPアドレスとゲートウェイ
-
DNSサーバー: 複数指定する場合は
8.8.8.8 1.1.1.1のようにスペース区切りで入力します。
- 起動: 「Regenerate Image」ボタンを押し、VMを起動します。
しばらくすると指定したIPアドレス・DNS・NTPが設定され、指定したユーザでSSHログイン可能なAlmaLinux 10環境が立ち上がります。
おまけ:作成されたユーザでの特権昇格
Cloud-Initで作成したユーザでSSHログインした後、root権限が必要な場合は以下のコマンドで特権昇格(rootへ切り替え)を行います。初期状態ではrootの直接ログインは無効化されています。
sudo su -
