📦

Proxmoxを自宅サーバで試してみた

2025/01/12に公開

Proxmoxとは

自分は最初少し勘違いしていたが、ベアメタル型ハイパーバイザではないらしい。

ただそのような挙動をするだけで、Debianベースの独自のLinuxディストリビューションの上に仮想化に特化した機能を組み合わせた仮想化管理プラットフォームである。

ベアメタル型(Type1)とホスト型(Type2)のどちらに位置するのか?と最初は考えていたが、どちらとも言えないハイブリッド型ハイパーバイザであるとのこと。

Get Started

https://www.proxmox.com/en/products/proxmox-virtual-environment/get-started

インストール方法

Debianをベースに構築されているisoイメージとして公開されている。インストール方法としては大まかに以下二つがある。

  1. 直接PCにインストールしてOSとして動作させる
  2. 既存のDebian環境上にインストールして既存環境と共存させる方法

ddコマンドでisoイメージをUSBに書き込む

【2024年04月版】MacでProxmoxのインストールUSBを作成【diskutil, dd】 - Qiita

USBをMacOSに差し込んだ状態で以下手順でUSBに書き込みできる。

$ diskutil list
$ diskutil eraseDisk ExFAT PVE /dev/disk4
$ diskutil unmountDisk /dev/disk4
$ sudo dd if=./proxmox-ve_8.3-1.iso of=/dev/disk4 bs=1m status=progress

今回のネットワーク構成

Network Configuration - Proxmox VE

今回はドキュメントにある「プライベートLAN内でのProxmoxで、外部ゲートウェイを使用してインターネットに接続する」という構成と一致するので、デフォルトのvmbr0ブリッジインターフェースを使ってDefault Gatewayと同じセグメント上でVMと通信する構成にした。

https://pve.proxmox.com/pve-docs/images/default-network-setup-bridge.svg

Gateway経由でインターネット通信を行うためのやり方としては他に以下2つの方針などがある。

  1. iptablesによるNAT(マスカレード)

    Network Configuration - Proxmox VE

  2. ルーティングする

    Network Configuration - Proxmox VE

機能概要

Proxmoxでどんなことができるのかを全部は理解していないがざっくり理解する目的で、中心的な機能を以下に洗い出してみる。

Proxmox Virtual Environment で仮想化環境構築 - Fenrir Engineers

Cluster

Proxmox VE 6.2では、クラスタに最大8つのフォールバックリンクを追加できます。 冗長リンクを追加するには、Addボタンをクリックし、それぞれのフィールドからリンク番号とIPアドレスを選択します。 Proxmox VE 6.2以前では、フォールバックとして2番目のリンクを追加するには、Advancedチェックボックスを選択し、追加のネットワークインターフェース(リンク1、Corosyncの冗長性も参照)を選択します。

リンク0がデフォルトのリンクで、障害時にバックアップリンクを用意しておくことでそちらにフォールバックできる冗長なネットワークを構築することができる。(あくまでリンク自体は自分で設定する必要があるが)

クラスタ化メリット

  • 他ノードのVM操作のためにいちいち各ノードの管理画面に移動しなくていい。(一元管理機能)
  • ライブマイグレーションによるノード間でCPU使用率の負荷分散ができる。
  • HA機能により、ノードAで停止したVMをノードBで起動できる。

Cluster Network
Proxmox VE では、この部分は、高性能、低オーバーヘッド、高可用性の開発ツールキットの実装である corosync によって実行される。

HA構成
Proxmox VEにおけるHA(High Availability)構成は、VMやコンテナが自動的に再起動されるように設定し、システム障害やノード障害時にサービスの中断を最小限に抑えるための機能。

要件

  • 少なくとも 3 つのクラスターノードが必要
  • VMとコンテナの共有ストレージがあること
  • そのほか諸々…

VM(on Cluster)

VMの複製は簡単にできる。(画像内のCloneから)

VMごとのCPU使用率などを確認する画面はこんな感じ

Storage

以下画像にある種類のストレージへのバックアップがサポートされている。

https://pve.proxmox.com/pve-docs/chapter-pvesm.html

上記対応ストレージ表を見ればどのストレージであればスナップショット取得が可能かが分かる。
今回はシングルノードでクラスタを構築したので、Sharedがnoでも問題ないデフォルトで用意されているLVM-thinをストレージに利用している。

LVM-thinのスナップショットは、Copy-on-Write(CoW)により変更があった時に初めて変更部分が保存先に書き込まれ、スナップショット作成時は元のデータブロックへの参照が記録されるだけ。そのためDBへの負担が少ない。(最近のデファクトなイメージ)

外部メトリクスサーバー

Host System Administration

Proxmox VE では、ホスト、仮想ゲスト、ストレージに関するさまざまな統計情報を定期的に受信する外部メトリック サーバーを定義できる。

GraphiteかInfluxDBといった時系列データベースを扱うことができる。

ACMEプラグインでProxmoxのドメイン用証明書を発行する

Proxmoxではデフォルトで自己署名証明書をクラスターCAが発行してくれるため、最初からhttps通信ができる。(https://192.168.x.x:8006/)

以下に記載があるようにデフォルトでは、独自のクラスターCAによって生成された証明書(/etc/pve/nodes/NODENAME/pve-ssl.pem)が使用される。

https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysadmin_certificate_management

もし独自ドメインでProxmoxを動かしたい時は、SSL証明書を自動更新するようにACMEプラグインを使ってセットアップすることができる。今回は以下記事に従ってこれをやってみた。

https://www.derekseaman.com/2023/04/proxmox-lets-encrypt-ssl-the-easy-button.html

  1. ACMEアカウント追加
  2. ACMEプラグイン追加
    • ここでCloudflareのDNSレコードを操作する権限があるAPIキーが必要
  3. 証明書を発行するドメイン名を設定
  4. 「Order Certificates Now」から証明書発行
    • タスク実行ログを見ればわかるが、TXTレコードをCloudflareのDNSに追加、認証、削除、までACMEプラグインから勝手にやってくれる。
    • もし最初に手動でやるように設定していた場合、ここでTXTレコードを手動で追加、認証、削除をする必要がある。
  5. プライベートネットワーク内なので、/etc/hostsを編集して、取得したドメインへの名前解決設定を行い完了。

以上。Proxmoxに入門してみて学んだことをまとめてみました。

Discussion