時間の浪費はやめよう:ProxmoxでUbuntu VMを30秒以内にデプロイする方法

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

私のHomeLabにおけるISO時代の終焉

半年前、私のHomeLabのワークフローは非常に効率の悪いものでした。新しいノードが必要になるたびに、ISOをダウンロードしてマウントし、Ubuntuインストーラーの同じ画面を何千回もクリックしていました。それは反復的でミスが起きやすく、膨大な時間の無駄でした。基本的なプロンプトが表示されるまでに15分から20分も費やしていることに気づいたのです。

Cloud-initのワークフローに移行したことで、すべてが変わりました。今では、デプロイ時間は15分から正確に28秒まで短縮されました。このセットアップを本番環境で半年間運用していますが、一度も失敗したことはありません。3ノードのK3sクラスターを立ち上げる場合でも、一時的なデータベースを構築する場合でも、プロセスは常に同一で、瞬時に完了します。

ISO vs. Cloud-init:従来の方法が損失を招く理由

2台以上のVMを管理している場合、手動での方法はボトルネックになります。なぜ業界がこの方法から離れたのかを見ていきましょう。

従来のISO方式

これは「肉体労働」的なアプローチだと考えてください。VMを物理的なデスクトップのように扱います。仮想CD-ROMから起動し、言語を選択し、ディスクをパーティション分割し、インストーラーがパッケージを取得するのを待ちます。単発のプロジェクトなら機能しますが、スケールさせることはできません。5ノードのクラスターが必要な場合、これらの手順を5回繰り返すことになります。

Cloud-initテンプレート方式

Cloud-initは、AWSやDigitalOceanなどのクラウドプロバイダーにおける標準です。インストーラーを使用する代わりに、Canonicalが提供するプリインストール済みの「ゴールドイメージ(Gold Image)」を使用します。そこにSSHキー、ネットワーク設定、ユーザーアカウントなどの構成を直接注入します。Proxmoxはこのイメージをクローンし、カスタムメタデータを適用します。コーヒーを一口飲む前に、VMの準備が整います。

実用面でのメリットとデメリット

この方法が優れている理由

  • 爆速のスピード: SSDストレージであれば、リンククローンの作成には約3秒しかかかりません。
  • 構成の不一致(ドリフト)ゼロ: すべてのVMが、まったく同じセキュリティパッチとユーザー権限で開始されます。
  • Infrastructure as Code: 後にTerraformやAnsibleなどのツールを使用したい場合、このセットアップは必須の第一歩となります。
  • ヘッドレスセットアップ: ProxmoxのVNCコンソールを二度と開く必要はありません。VMが起動した瞬間から、SSHキーが利用可能です。

わずかなハードル

  • 一度限りの作業: 最初のテンプレートを作成するために、コマンドラインで約10分費やす必要があります。
  • ディスクのリサイズ: クラウドイメージは通常サイズが小さいため(約2GB)、Proxmox側でディスクを拡張することを忘れないでください(これは自動化も可能です)。

前提条件

この手順は、Proxmox VE 8.1上でUbuntu 24.04 LTS (Noble Numbat)を使用して実行しています。これらのコマンドは、Ubuntu 22.04やDebian 12のイメージとも互換性があります。

以下が必要です:

  • 動作中のProxmox VEノード。
  • ProxmoxホストへのSSHアクセス(Webシェルのコンソールにコマンドを貼り付けるのは非常に困難です)。
  • Linuxターミナルの基本的な知識。

ステップバイステップ:Ubuntuテンプレートの作成

GUIでの誤クリックを防ぎ、再現性を確保するためにCLIを使用します。以下のコマンドをProxmoxホストで直接実行してください。

1. 公式イメージのダウンロード

まず、検証済みの最新Ubuntuクラウドイメージを取得します。通常、/tmpのような一時フォルダーに保存します。

wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

2. ゲストツールの組み込み

クラウドイメージは最小限の構成であるため、qemu-guest-agentが含まれていないことがよくあります。起動前にこれをイメージに注入することで、ProxmoxがVMのIPアドレスを即座に認識できるようになります。

# パッケージリストを更新し、libguestfs-toolsをインストール
apt-get update && apt-get install libguestfs-tools -y
# イメージにqemu-guest-agentをインストール
virt-customize -a noble-server-cloudimg-amd64.img --install qemu-guest-agent

3. VMシェルの定義

ID 9000を使用して新しいVMを作成します。テンプレートのベースラインとして、メモリ2GB、2CPUコアを割り当てます。

qm create 9000 --name "ubuntu-2404-template" --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

4. 仮想ディスクのインポート

このステップで、UbuntuイメージをProxmoxのストレージに移動します。local-lvmの部分は、zfs-thincephなど、ご自身の環境のストレージ名に置き換えてください。

# イメージをストレージにインポート
qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm
# インポートしたディスクをSCSIデバイスとしてセット
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0

5. Cloud-initとハードウェア設定

Cloud-initのメタデータを保持するための小さな仮想ドライブを追加します。また、シリアルコンソールを有効にします。これにより、Proxmoxコンソールでクラウドイメージを表示する際の「ブラックスクリーン」問題を回避できます。

# Cloud-initドライブを追加
qm set 9000 --ide2 local-lvm:cloudinit
# ブート順序を設定
qm set 9000 --boot c --bootdisk scsi0
# シリアルコンソールを有効化
qm set 9000 --serial0 socket --vga serial0
# QEMU Guest Agentを有効化
qm set 9000 --agent enabled=1

6. テンプレートの完成

構成を確定し、VMを読み取り専用のテンプレートに変換します。

qm template 9000

新しいVMを起動する方法

これでテンプレートの準備が整いました。デプロイするには、Proxmoxのサイドバーでテンプレートを右クリックし、Cloneを選択します。独立性を高めるには「Full Clone」、ディスク容量を節約するには「Linked Clone」を選択してください。新しいVMを起動する前に、Cloud-Initタブに移動して以下を設定します:

  1. User: 管理者ユーザー名(例: devops)。
  2. Password: 強力なパスワード(ただしSSHキーの使用を推奨)。
  3. SSH Keys: 自身の id_rsa.pub をここに貼り付けます。安全なラボ環境には必須です。
  4. IP Config: 多くのHomeLabではDHCPを使用しますが、ここで静的IPを固定することも可能です。

Regenerate Image(イメージを再生成)を押し、起動をクリックして20秒待ちます。これで、新しいサーバーに直接SSHでログインできるようになります。

6ヶ月運用してみた結論

この方法に切り替えて以来、手動でOSをインストールしたことは一度もありません。私のHomeLabは、雑然とした実験場の集まりではなく、プロフェッショナルな環境のように感じられます。メニューのクリック作業に飽き飽きしており、本来の目的であるソフトウェアの実行に集中したいのであれば、これはProxmoxのワークフローにおける最高のアップグレードになるでしょう。高速で安定しており、毎月何時間ものストレスから解放してくれます。

Share: