1. はじめに
この記事は、ラクスパートナーズ Advent Calendar 2024 の24日目の記事です。
2. 背景
VMware や KVM などの仮想化環境を用意するにあたり、AWS 上での検証を検討していました。
その過程で、Proxmox VE を使って以下図のような Nested Virtualizaton の検証環境を構築する案が出ましたので、その際調査したEC2インスタンス上に Proxmox VE をインストールする手順をまとめます。
(Debian、Proxmox VE のいずれもフリーで使用できるため候補として挙げられた次第です。)
参考
主に以下サイトの内容を参考にしています。
3. 使用バージョン
3-1. Proxmox VE
-
バージョン: 8.3.1
root@proxmox:~# pveversion pve-manager/8.3.1/fb48e850ef9dde27 (running kernel: 6.1.0-23-cloud-amd64)
3-2. Debian
-
バージョン: 12.8 (bookworm)
root@proxmox:~# cat /etc/debian_version 12.8
4. 構築手順
4-1. cloud-init スクリプトの準備
EC2 インスタンスの起動と同時に Proxmox VE のインストールを自動実行するため、cloud-init スクリプトを作成します。
以下リポジトリにサンプルを公開しています。
GitHub: PROXMOX_on_EC2
4-2. EC2 インスタンスの設定・起動
4-2-1. OS イメージの選択 (AMI)
Debian を選択します。
4-2-2. インスタンスタイプの選択
メモリ 1 GiB のタイプではフリーズしたため、今回は t3.small (2 GiB) を使用しています。
4-2-2-1. 注意点
Proxmox VE 上で仮想マシンを起動したい場合は、ベアメタルインスタンス(〜.metal
)を使用する必要があります。
今回はインストールの検証が目的のためベアメタルではありません。下図は t3.small で Proxmox上にて VM を作成しようとした際に表示されるエラーです。(VM の起動はできないため注意)
4-2-3. ネットワーク設定
セキュリティグループで以下ポートを解放します。
- 22 (SSH用)
- 8006 (Proxmox Web コンソール用)
4-2-4. ストレージ設定
適宜、ルートボリュームの容量や種類 (gp2, gp3 等) を設定します。
4-2-5. cloud-init の設定
EC2 インスタンス作成画面の「高度な詳細」→「ユーザーデータ - オプション」に、用意した cloud-init スクリプトを貼り付けます。
4-2-6. 起動後の cloud-init 実行確認
インスタンスへ SSH できるようになっても、裏で cloud-init が処理中の場合があります。以下コマンドでステータスを確認できます。
root@proxmox:~# cloud-init status
status: running # 実行中の場合
root@proxmox:~# cloud-init status
status: done # 完了
ログの内容は以下コマンドでリアルタイム確認可能です。
root@proxmox:~# tail -f /var/log/cloud-init-output.log
4-3. Proxmox VE へのログイン
4-3-1. root パスワードの設定
SSH 接続後、Proxmox VE の Web コンソール用に root
ユーザのパスワードを設定します。
root@proxmox:~# passwd
New password:
Retype new password:
passwd: password updated successfully
4-3-2. Web コンソールへのアクセス
ブラウザで下記URLにアクセスします。
https://<インスタンスのパブリックIP>:8006
4-3-3. ログイン画面
- ユーザー名:
root
- パスワード: 上記で設定したもの
5. (参考) ベアメタルインスタンスでの構築
c5.metal
のインスタンスタイプにて構築を試してみました。
5-1. Proxmox VE は ARM64 (AArch64) 非対応
動作させる際は x86-64 (x64) のインスタンスを選択する必要があります。
EC2インスタンス起動設定時には x86 と Arm インスタンスタイプがあり、Proxmox VE は x86 環境でのみ動作します。
5-2. NIC 名の注意
-
ens5
やenp125s0
など、インスタンスタイプや NIC デバイスによって命名が異なる場合があります。
その場合、GitHub: PROXMOX_on_EC2 のcloud-initスクリプトの場合、以下記述のインターフェース名(「ens5」の部分)を変更する必要があります。
# EC2インスタンスのプライベートIPを取得して /etc/hosts に追加
- PRIVATE_IP=$(ip addr show ens5 | grep inet | awk '{ print $2 }' | cut -d'/' -f1 | head -n 1)
- echo "$PRIVATE_IP proxmox" >> /etc/hosts
5-3. EC2上のProxmoxでVM起動
5-3-1. ISO アップロード
以下画像のようにISOなどディスクイメージをアップロードします。
5-3-2. VM起動
以下画像は、アップロードしたISOファイルを用い、ベアメタル (〜.metal
)上で VM の起動をした際の画面になります。(ベアメタルであれば Nested でのVM起動も実施可能です。)
6. 感想
最後のベアメタルインスタンス(c5.metal)で数時間動かして検証していましたが、それだけで5,6000円もコストかかってしまっていたので、個人でベアメタルを使うタイミングは来ることは今後一生無いなと痛感しました。。。
(参考)用語
Proxmox VE (Proxmox Virtual Environment)
- KVM(フル仮想化)と LXC(軽量コンテナ仮想化)を組み合わせたハイブリッド仮想化基盤。
- ベース OS は Debian をカスタマイズした Linux ディストリビューション。
- ネットワーク管理には
ifupdown2
を使用し、/etc/network/interfaces
で設定を行う。
cloud-init
- クラウドインスタンス初回起動時の設定(ユーザー作成、ネットワーク設定、ソフトウェアインストールなど)を自動化するツール。
Linuxネットワーク管理ツール
-
ifupdown / ifupdown2:
/etc/network/interfaces
ベースの設定。再起動でインターフェースが再初期化される。 -
NetworkManager: GNOME などのデスクトップ環境向けに使われやすい。
systemctl restart NetworkManager.service
で再読み込み。 -
systemd-networkd: systemd によるネットワーク管理で、設定ファイルは
/etc/systemd/network/
配下に置く。
参考リンク
- Proxmox on AWS 構築 (GitHub)
- Networkingサービス (Qiita)
- cloud-init (Qiita)
- イメージの入手 (OpenStack Docs)
- Proxmox VE 8.3 (Networld Blog)
- Proxmox, Debian バージョン確認 (nofu.jp)
- Proxmox とは (Qiita)
- Debian 最小構成 (Debian Official)
- シェルスクリプト, Ansible, cloud-init の違い (MMMCorp Blog)