Proxmox VE
管理画面での場所: Infrastructure › Cloud provider › Providers (
/infra/providers)、および概要、クラスター、VM、サーバー、認証情報のタブがあるプロバイダーページ (/infra/providers/<id>)。プランは Services › Virtual Machines › Plans & pricing (/vm/catalog) で設定します。
動作内容
NexCMPでは、CloudStackの代わりまたはそれと並行して、1つ以上のProxmox VEクラスター上で実行される仮想マシンを販売できます。OSテンプレートをフルクローンでクローン作成し、サイズ、定義したプールからのIPアドレス、rootパスワード、SSHキーなどのcloud-initを通じて構成することでVMが作成されます。お客様は、ポータル内で電源制御、コンソール、スナップショット、再インストール、パスワードリセット、メトリクスを利用できます。クラスター、ノード、ソースの名前がお客様に表示されることはありません。
すでにProxmox VEを運用している場合や、価格の異なる2つ目のVMプールを提供する場合に使用します。
要件
| 項目 | 要件 |
|---|---|
| Proxmox VE | PVE 9.x。統合は9.2で検証済みです。importストレージコンテンツとimport-fromディスクオプション(PVE 8.2以降)が必要です。 |
| パネルからのネットワーク | クラスターAPIへのHTTPS (https://<host or IP>:8006)。パス、ユーザー名、クエリはありません。パネルとワーカーの両方が接続し、ブラウザーコンソールはパネル経由でプロキシされます。 |
| アカウント | APIトークンを持つ専用のPVEユーザーと、以下の特権を持つカスタムロール。root@pamは絶対に使用しないでください。 |
| ストレージ | クローンに対応したVMディスク用ストレージ(例: local-lvm)。組み込みテンプレートビルダーの場合は、localという名前のストレージ(コンテンツタイプimportおよびsnippets)。 |
| ネットワーク | カスタマーIPが存在するネットワークに到達するLinuxブリッジ(例: vmbr0)。VLANタグを入力する場合は、VLAN対応ブリッジを使用してください。 |
| IP | そのブリッジにルーティングされたIPv4ブロック(/16〜/30)とゲートウェイ。NexCMPが自身でアドレスを割り当てます。ProxmoxにはIP管理機能がありません。 |
| Templates | デプロイするすべてのノード上で、OSごとに1つのcloud-initテンプレートVM(QEMUゲストエージェント付き)。 |
| ゾーン | クラスターをアタッチする既存のゾーン。Zonesを参照してください。 |
| 依存関係 | なし。 |
インフラストラクチャの準備
任意のクラスターノード上で、rootとしてコマンドを実行します。
1. 最小権限のロール、ユーザー、APIトークンを作成する
ロールを作成します。特権リストはNexCMPが使用する正確なものであり、ユーザー、ストレージ定義、データセンターを編集するものは含まれていません。
bashpveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use"クラウドイメージのダウンロードには
Sys.AccessNetworkが必要です。PVE 9にはVM.Monitor特権がないため、追加しないでください。ユーザーとトークンを作成します。
--privsep 1は、トークンの権利がユーザー自身の権限とトークン自体の権限の積集合になることを意味します。bashpveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1このコマンドはトークン secret once (UUID) を1回だけ表示します。今すぐコピーしてください。トークンIDは
nexcmp@pve!apiです。ユーザーとトークンの両方にロールを付与します。これは見落とされがちな手順です。特権分離により、ユーザーに権限がない場合、トークンのみが
Datastore.Auditなどの403エラーを受け取ります。bashpveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api'パネルサーバーからテストします:
bashcurl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=<secret>' https://192.0.2.10:8006/api2/json/versionversionが含まれるJSONドキュメントは、トークンが機能していることを示します。(-kはこのクイックチェック用のみです。NexCMP自体が証明書をピン留めします。詳細は下記をご覧ください。)
2. ブリッジとストレージの確認
bash
pvesm status # storages, type, content and free space
ip -br link show type bridge- お客様のVMには、NexCMPで入力したブリッジ上に
virtio個のネットワークインターフェイスが割り当てられます。VLANを設定する場合は、ブリッジがVLANに対応(VLAN-aware)している必要があります。 - お客様のVMをノードの管理用アドレスとは別のブリッジまたはVLANに配置してください。同じネットワークを共有している場合、Proxmoxファイアウォールの自動管理IPセットにより、そのネットワーク内のすべてのVMに対してノードのポート22、8006、3128、5900-5999、60000-60050が開放されます。分離できない場合は、管理用ACCEPTルールの上の行に、そのVMサブネットから上記ポートへの明示的なDROPルールを追加してください。
3. ストレージに関する注意事項(LVM-thin)
- シン・プールのゼロ埋め(zeroing)はデフォルトのままにしてください。無効化(
lvchange -Zn)すると、新しく割り当てられたチャンクに古いデータが残ったままになり、クローンされたVMのパーティションテーブルやファイルシステムが破損する可能性があります。 - 「write cache: disabled」と表示されるディスクは、数 MB/s 程度でしかクローンできません。
hdparm -W /dev/sdXで確認し、ディスクに停電保護機能がある場合は書き込みキャッシュを有効にしてください。
4. import コンテンツの有効化(組み込みテンプレートビルダー用)
組み込みビルダーは、クラウドイメージを local という名前のストレージにダウンロードし、そこからテンプレートを作成します。そのストレージのコンテンツリストに import(および snippets)を追加してください。既存のタイプはそのまま維持してください。--content はリスト全体を置き換えます:
bash
pvesm status --storage local # note the current content
pvesm set local --content iso,vztmpl,backup,import,snippets5. クラウドイメージからのOSテンプレートの構築
テンプレートとは、NexCMPがクローンを作成するcloud-init対応VMのことです。各テンプレートは、VM IDとともに OS key(ubuntu-24.04 など)という短いキーで登録されます。クローンは選択されたノード上で実行されるため、VMを受け取るすべてのノード上にOSごとに1つのテンプレートを構築してください。
オプションA(推奨):ご自身で構築する。 標準のUbuntuおよびDebianのクラウドイメージにはゲストエージェントが含まれておらず、rootログインが許可されていません。また、NexCMPはcloud-initを通じてrootパスワードを設定します。最初にイメージを準備してください:
bash
apt install -y libguestfs-tools
wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
virt-customize -a noble.qcow2 --install qemu-guest-agent \
--write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \
--write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n'次にテンプレートVMを作成します(ID 9000は一例です。テンプレートIDは vmid from の値、デフォルトは1000未満にしてください):
bash
qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \
--scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0
qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1
qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0
qm template 9000オプションB: 内蔵ビルダー。 クラスタタブにある Create OS template from cloud image カード(下記参照)は、qcow2イメージをダウンロードし、テンプレートを構築して登録します。これはcloud-initとゲストエージェントフラグ付きでVMを作成しますが、イメージ内部のコンテンツを変更することはしません。ルートログインがすでに許可されゲストエージェントが実行されているイメージを使用するか、cloud-initのvendor-dataスニペットも提供する場合にのみ使用してください。
ゲストエージェントは、Reset password およびVMのIPアドレスを表示するために必要です。
6. 証明書のフィンガープリントの確認(オプション)
NexCMPはTLS証明書のSHA-256フィンガープリントをピン留めすることでクラスターを信頼するため、自己署名証明書でも問題ありません。NexCMPがピン留めする値を確認するには:
bash
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256NexCMP での接続
Infrastructure › Cloud provider › Providers を開き、Add cloud provider をクリックします。Proxmox VE を選択して以下を入力します:
項目 入力例 Name Proxmox cluster 1Endpoint https://192.0.2.10:8006Token id nexcmp@pve!apiToken secret XXXX(手順1で出力されたUUID)Slug pve-1(a-z、0-9、ハイフン、2〜32文字)Default node pve1(空欄:最も空きRAMが多いオンラインノード)ストレージ local-lvmBridge vmbr0
Save & open providerをクリックし、求められたら理由を入力します。トークンは暗号化されて保存されます。
OverviewタブでTest connectionをクリックします。最初の接続テスト成功時にクラスタのTLSフィンガープリントがピン留めされ、以降異なる証明書は拒否されます。
Clustersタブを開きます。Node · storage · bridgeカードにはAPIから認識される内容がリストされ、Cluster configurationカードには設定が保持されます:
項目 意味 Default node 新規VMに使用されるノード。空欄の場合は最も空きRAMが多いオンラインノードを意味します。 Storage, Bridge, VLAN ディスクストレージ、NICブリッジ、および任意のVLANタグ(0はなしを意味します)。 CPU type デフォルトで host。ノードのCPU世代が異なる場合はx86-64-v2-AESを使用します。vmid from 顧客VMに割り当てられる最初のVM ID(デフォルトは1000)。 Storage ISO, Storage backup 使用する場合以外は空欄のままにします。空欄の場合、ISOおよびバックアップ機能は提供されません。 Template OS 1行に1つ、 os-key=vmid(例:ubuntu-24.04=9000)。Pinned TLS fingerprint (SHA-256) 最初のテストによって入力されます。クラスタ証明書を置き換えた後、クリアして再度テストしてください。 
オプション:上記のオプションBを使用した場合、Create OS template from cloud image(OSキー
ubuntu-24.04、vmid9000、ノードpve1、qcow2イメージのURL)を入力し、Create templateをクリックします。数分間バックグラウンドで実行され、結果は監査ログに記録されます。
Add poolをCluster IP pool内でクリックし、VMがアドレスを取得するプールを作成します:
項目 入力例 Name customers-1CIDR 198.51.100.0/24Gateway 198.51.100.1(VMには絶対に割り当てられません)DNS 1.1.1.1,8.8.8.8(1〜4個のIPv4アドレス)Bridge, VLAN vmbr0,0Already used IPs 1行に1つ、 ip note(例:198.51.100.10 monitoring)NexCMPは、ネットワークアドレス、ブロードキャストアドレス、ゲートウェイ、または予約済みアドレスを割り当てることはありません。同じクラスタのプール同士が重複することはできません。プールは、そのアドレスが一つも使用されていない場合にのみ削除できます。

Attach cluster to zoneで、ゾーンと(オプションで)ノード名を選択し、Attach to zoneをクリックします。クラスタはすでにVMを販売しているゾーンに参加するため、1つのゾーンにCloudStackとProxmoxを混在させることができます。新しいソースはデフォルトでは販売されず、既存プランの動作には影響しません。

Services › Virtual Machines › Plans & pricingを開き、Add planをクリックします。Infrastructure sourceでProxmoxクラスタを選択し、CPU、RAM、ディスク、価格を設定します。ProxmoxプランにCloudStackオファリングは必要ありません。両方のソースから同じ構成を販売するには、プランでCloneを使用し、別のソースを選択します。プランのディスクはテンプレートのディスク以上の大きさでなければなりません。Proxmoxではディスクを縮小できないためです。
既存VMのインポート
Serversタブを開いて、クラスター上のVMを一覧表示します。Importは、既存のVMを料金発生なしでお客様アカウントに割り当てます。時間料金、停止中の時間、トラフィックのいずれも請求されません。お客様は起動、停止、再起動、コンソールのオープンを行えますが、削除はできません。削除できるのは管理者のみです。NexCMPはインポート中、クラスターからの読み取りのみを行います。
クラスターは、そのVMのノード名が設定されたゾーンに紐づけられている必要があります(ノードを空のままにすると、リージョンが設定されていないというエラーがレポートされます)。
VMを保護状態にする(停止、再起動、再インストール、スナップショット復元、破棄、プラン変更が拒否されます)には、コマンドラインから
--protectを使用してインポートします。bashsudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect
Proxmoxでサポートされる機能とサポートされない機能
| 機能 | Proxmox VE |
|---|---|
| 作成、電源オン/オフ/再起動、削除 | はい |
| CPUとRAMの変更、ディスクの拡張 | はい。ただし、VMを一度停止してから変更し、再起動します(ライブリサイズ不可) |
| Snapshots | はい(VMあたり最大5個): 作成、一覧表示、復元、削除 |
| 再インストール | はい。テンプレートからVMが再構築され、ID、IP、設定が維持されたまま、新しいパスワードが設定されます |
| パスワードのリセット | はい。ゲストエージェント経由 |
| コンソール | はい。パネル経由でプロキシされるブラウザコンソール |
| メトリック | はい: CPU、メモリ、ネットワーク、ディスク |
| ISOマウント、バックアップ、ファイアウォール、IPv6、ポートフォワーディング、IP変更、追加ボリューム、Auto Scaling、DDoS Shield、VPC、帯域幅測定 | 利用できません。お客様のVMページには、ソース側で実行できない機能は表示されません。 |
確認
- Test connectionがOKを表示し、プロバイダーのステータスがアクティブになります。
- Clustersにノードがオンラインとして表示され、ストレージとブリッジが確認できます。
- Cluster IP poolに、空き、使用中、保留中の数が表示されます。
- クラスターのアタッチ後、ゾーンのテンプレート(Services › Virtual Machines › Template)の下にOSキーが表示されます。
- クラスターを使用するプランからテスト用VMを注文します。プールからアドレス、rootパスワード、動作するコンソールが割り当てられ、プール上の使用済みアドレスが1つ増加することを確認します。
制限と注意点
ソース混在ゾーン
NexCMP 1.4.0 以降、CloudStack と Proxmox VE がゾーンを共有している場合でも、公開 Cloud Server 価格リストが機能するようになりました。各プランは独自のInfrastructure sourceを使用します。クラスターを接続した後、公開価格リストを確認し、ソースごとにテスト注文を行ってください。
- 複数のProxmoxクラスターを追加できます。それぞれが1つのプロバイダーとなります。
- 1つのゾーンはデフォルトのソースを1つ提供します。独自のInfrastructure sourceを持つプランは、そのクラスターがアクティブであり、かつプランのゾーン内にある場合に限り、正確にそのクラスターにデプロイされます。
- CloudStackと同じゾーンの背後にあるクラスターは、CloudStack上のレガシープランを維持します。ローンチ前にエンドツーエンドで注文をテストしてください。
- APIトークンは閲覧できず、置き換えることのみ可能です。Credentialsタブで置き換えてください:まずProxmoxで新しいトークンを作成し、それを入力してTest connectionを実行してから、古いトークンを無効化します。
- テスト、同期、およびクラスター情報の各アクションは、管理者1人あたり1分間に6回までに制限されています。
- NexCMPはお客様への請求を行いますが、クラスターのハードウェアおよびライセンス費用はお客様の負担となります。
トラブルシューティング
| 症状 | 原因 | 対処法 |
|---|---|---|
| テスト: 「Key rejected (wrong access key / secret, or revoked)」またはHTTP 401/403 | トークンIDまたはシークレットが間違っているか、ACLがトークンにのみ付与されている | 2つのpveum acl modifyコマンド(ユーザーおよびトークン)を再実行し、トークンIDがuser@realm!tokenidであることを確認します。 |
| テスト:「プロバイダーに接続できませんでした」または「タイムアウトしました」 | ファイアウォール、または誤ったホストやポート | パネルサーバーからhttps://host:8006を確認します。 |
| テスト:「無効なエンドポイント、または許可リストに含まれていません」 | エンドポイントにパス、ユーザー、クエリが含まれているか、HTTPSではありません | 正確にhttps://host:8006を使用してください。 |
| 「クラスターのTLS証明書がピン留めされたフィンガープリントと一致しません」 | クラスター証明書が置き換えられました | ClustersタブのPinned TLS fingerprintをクリアして保存し、Test connectionを再度実行します。 |
| スラッグが拒否されました | a-z、0-9、ハイフン以外であるか、2〜32文字ではありません | pve-1のようなものを使用してください。 |
| 「トークンIDの形式: user@realm!tokenid と secret が必要です」 | トークンIDまたはシークレットがありません | 両方を入力します。シークレットは、トークン作成時に表示されたUUIDです。 |
| 「無効なテンプレート行: …」 | Template OS内の行がkey=vmidではありません | キーには英字、数字、.、_、-を使用し、vmidは100以上にします。 |
| 「OSキー: a-z 0-9 . _ - および vmid ≥ 100」 | Create template内の無効なキーまたはID | OSキーを修正し、使用されていないvmidを使用してください。 |
| テンプレート作成時の「vmid … はすでに存在します」 | vmidがすでに使用されています | 別のIDを選択してください。 |
| 「URLが内部アドレスを指しています」 | イメージURLが内部IPです | 公開URLを使用してください。名前はProxmoxによって解決されます。 |
| ダウンロード時にテンプレートタスクが失敗します | ストレージ local に import コンテンツがありません | pvesm set local --content …,import,snippetsを実行してから再試行してください。ファイル名は .qcow2、.raw、.vmdk、.ova、または .ovf で終わる必要があります。 |
| 「クラスターにオンラインのノードがありません」または「ノード … はオンラインではありません」 | デフォルトノードが停止しているか、スペルが間違っています | Default nodeを修正するか、空のままにします。 |
| 「イメージがクラスターに属していません」 | プランのOSが Template OS にありません | リストにキーを追加して保存します。 |
| デプロイが待機状態になった後、クローン作成で失敗します | テンプレートVMが選択したノード上にありません | そのノード上でテンプレートを作成するか、Default nodeをテンプレートがあるノードに設定します。 |
| 顧客がrootとしてログインできません | イメージがrootログインをブロックしています | オプションAのようにテンプレートを再ビルドします。 |
| パスワードリセットが何も行われません | ゲスト内にゲストエージェントがありません | テンプレートに qemu-guest-agent をインストールして有効化します。 |
| 「名前、CIDR、およびゲートウェイは必須です」 | プールフィールドがありません | 3つすべて入力してください。 |
| プール作成時: 「プールと重複しています…」「ゲートウェイは範囲内(ネットワーク/ブロードキャストアドレス以外)である必要があります」または「cidr: ネットワークアドレスは…でなければなりません」 | プールが重複している、ゲートウェイが間違っている、またはCIDRがネットワーク境界上にありません | 空きレンジ、その中のゲートウェイ、およびネットワークアドレスとして記述されたCIDR(例: 198.51.100.0/24)を使用します。 |
| インポート: 「リージョンが設定されていません」 | VMのノード名なしでクラスターがアタッチされています | ノード名を指定してクラスターをゾーンにアタッチします。 |