Proxmoxでプライベートクラウドを立てる
- 2021.12.05
- パソコン

このページはエンジニアがホームラボにプライベートクラウドを立てる方法を説明するページです。
プライベートクラウドとは
プライベートクラウドとは、自分専用のクラウドのことです。クラウドというのは、ざっくり言うと使い手からは実態が見えないが、インターネット上(またはネットワーク上)で提供されるサービスのことです。ここでいうのは特に仮想サーバを提供するプラットフォームについて語っています。
プライベートクラウドの反対はパブリッククラウドです。一般に公開されたクラウドで、この場合AWS(Amazon Web Services)、GCP(Google Cloud Platform)、Azure(Microsoftが提供)、OCI(Oracle Cloud Infrastructure)などの事を指します。これらにお金を払ってクラウド上にサーバを立てることができます。
プライベートクラウドはデータセンターなどと契約し、個人や企業で専用の仮想基盤を持つことを指します。OpenStackやOpenNebulaなどのクラウドコンピューティングプラットフォームを使い構築します。これがあれば、自社のリソースの範囲内で仮想サーバが立て放題という事になります。
しかし、弱小エンジニアにはそんなお金はないので、自宅で余っているコンピューターを利用して、ホームラボ(自宅開発環境)でプライベートクラウドを立てようというわけです。お手軽なところでは、アメリカのVMware社のESXi、ドイツのProxmox Server Solutions社のProxmoxVEでしょう。どちらも無料である程度使用でき、大きな会社でも社内ラボや本番環境でも使用されるちゃんとしたソフトです。
なぜProxmoxか
ProxmoxでもESXiでもどちらでも構わないのですが、今までESXiをずっと使ってきて使い飽きたからでしょうか。また、サーバが増えてくると無料版の制限が邪魔になり面倒だからです。また、ESXiはサポートしないNIC多く、インストールするまでに、カスタムビルドISOを作ったりと面倒です。
Proxmoxは無料版でクラスター化も可能で、PCI拡張カード(グラフィックカードやSASカードなど)のパススルーが容易です。また、VMごとのコア数の制限もないし、仮想サーバに直接物理HDDを接続してzfsフォーマットや、RAIDZにも対応していることですね。そして、何より文献(英語)が多い!
ということで、Proxmoxの導入をすることにしましたので、手順をメモしておきます。
Proxmoxのインストール
ISOファイルのダウンロードと事前設定
公式サイトから最新版のISOをダウンロードする。
https://www.proxmox.com/en/downloads/category/iso-images-pve

ダウンロードしたISOファイルをRufusなどのソフトでインストール用USBメモリとして作成します。この際、DDモードで作成しないとうまくインストーラーが起動できませんでした。
また、事前にインストールするPCのBIOSにて、CPU Virtualizationサポートを有効にしておく必要があります。Intel CPUの場合はVT-d、AMD CPUの場合はSVM Modeなどと記載があります。メーカー製PCですと、SecureBootを無効にする必要がある場合もあります。
インストール
準備ができたら、USBメモリをセットして、USBから起動します。以下のような画面が表示されます。

「Install Proxmox VE」を選択します。しばらくすると、以下の画面が表示されます。BIOSの設定がちゃんとされていないとエラーが表示されますので、その場合は設定し直してください。そのままでも、インストールはできます。


インストールするHDDが正しく選ばれているか確認します。「Option」ではインストール時のファイルフォーマットを選択できます。複数HDDがつないでおりRAIDにしたい場合は、ここで選べます。「Next」をクリックします。


パスワードを設定し、有効なメールアドレスを設定し、「Next」をクリックします。

proxmox用のIPアドレスを設定し、「Next」をクリックします。

内容を確認して、「Install」をクリックします。
インストールが終わるまでしばらく待ちます。自動的に再起動されたら、以下の画面になります。USB起動を優先にしている場合は、再起動前にUSBメモリを抜いておきましょう。

これでインストールは終了です。
ブラウザから表示されているURLを開けば設定画面に入れます。今回のインストールでは「https://192.168.1.50:8006」となります。このポート番号は変えられませんので、もしポート指定なしで接続したければ、前段にNginxのリバースプロキシを立てるか、ポート転送をルーターなどで掛ける必要があると思います。
初期設定
最新版に常にアップデートできるようにする
まずは、設定画面をブラウザで開く前に、コンソールですべきことをやってしまいます。rootユーザーで設定したパスワードを使用してSSHアクセスします。
アップデートを有効にするため、設定ファイルを書き換えます。
root@pve:~# nano /etc/apt/sources.list
ファイルの中の一番下の行を書き足します。
deb http://ftp.jp.debian.org/debian bullseye main contrib
deb http://ftp.jp.debian.org/debian bullseye-updates main contrib
# security updates
deb http://security.debian.org bullseye-security main contrib
# not for production use
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
次に、以下の設定ファイルを書き換えます。ライセンスが無い状態でもアップデートを行えるようにするためです。
root@pve:~# nano /etc/apt/sources.list.d/pve-enterprise.list
一行だけ設定されているものをコメントアウトします。
# deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
最後に、変更を読み込み、最新版にアップデートする。最新版になっていたら以下のようになる。
初回はアップデートがある場合が多いので、数百MBのダウンロードになる場合もある。
root@pve:~# apt-get update
Get:1 http://security.debian.org bullseye-security InRelease [44.1 kB]
Hit:2 http://ftp.jp.debian.org/debian bullseye InRelease
Get:3 http://ftp.jp.debian.org/debian bullseye-updates InRelease [39.4 kB]
Get:4 http://download.proxmox.com/debian/pve bullseye InRelease [3,053 B]
Get:5 http://download.proxmox.com/debian/pve bullseye/pve-no-subscription amd64 Packages [204 kB]
Fetched 290 kB in 2s (161 kB/s)
Reading package lists... Done
root@pve:~#
root@pve:~# apt dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@pve:~#
最後に、再起動を行う。変更が多い場合は、再起動に時間がかかることもある。
root@pve:~# reboot
ログイン
ブラウザでhttpsでログインする。IPアドレスが192.168.1.50の場合は 「https://192.168.1.50:8006」。httpアクセスはできないので、httpsのみ受け付ける。

言語を好きなものに変更して、rootユーザーで、指定したパスワードでログインできる。

有効なサブスクリプションが無いと怒られるが、気にしなくて良い。
データの確認
左のペインに、階層が表示されており、一番上がデータセンターレベル。次がサーバーレベル。再度がストレージとなる。「pve」というのはインストール時に指定したホストネームであり、現在インストールされているサーバ。もし、proxmoxでクラスターを組めば、サーバレベルに複数のサーバが表示されるようになる。

ストレージは「local(pve)」が、proxmoxのOS本体のストレージ部分で、「local-lvm(pve)」が仮想サーバなどproxmoxで作成したものの保存となる。他にもストレージを追加するとここに増える。
次に、サーバレベルに行き、ディスクの情報を確認する。

ここに接続されている物理HDDと、パーティションが表示されている。現在はHDDが一つのみだが、他にもつなぐと表示される。それを使用してZFSストレージを作成して使用することもできる。
メニューの一番上のサマリーを選択すると、サーバの状態を確認できる。

ハードウェアのパススルーを設定する
ハードウェアを仮想サーバ側で使えるようにパススルーさせるには、CPUとマザーボードがIOMMUに対応しており、BIOSで設定が有効になっている必要がある。その後、「/etc/default/grub」のパラメータを編集する。

上記、画面の真ん中でパラメータにiommuを有効にするパラメーターを追加している。IntelCPUの場合は「intel_iommu」で、AMDCPUの場合は「amd_iommu」となる。
特定のハードウェアをパススルーするには、他にもパラメーター追加する必要があるので、後ほど調べたい。Windowsを使うならGPUをパススルーさせるとリモートデスクトップ端末として使いやすくなるはず。
次に、grubをアップデートする。
root@pve:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.13.19-2-pve
Found initrd image: /boot/initrd.img-5.13.19-2-pve
Found linux image: /boot/vmlinuz-5.13.19-1-pve
Found initrd image: /boot/initrd.img-5.13.19-1-pve
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
done
root@pve:~#
次に、「/etc/modules」も編集して、以下の4行を追加する。
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

最後にOSの再起動を行う。
VLANを有効にする(オプション)
サーバ間の通信を制限したい場合はVLANを有効にしておく必要がある。
サーバーレベルで、ネットワークを選択する。ここにある「Linux Bridge」がブリッジだ。後から複数作ることもできる。

「vmbr0」をダブルクリックし、「VLAN aware」にチェックを付ける。その後OKをクリックする。

有効にするためには、proxmoxノード(つまりサーバ本体)を再起動するひつようがある。
以下のように、再起動後は「/etc/netowrk/interfaces」に最後の2行が設定として追加されている。「bridge-vids」がVLANのIDになる。仮想サーバのNICのVLANtagにはこの設定を追加することで、VLANでの通信をさせることができる。

上記のVLANのIDを変更した場合は、必ず再起動を行う必要がある。
ネットワークストレージの接続(オプション)
NASをproxmoxのバックアップ用途に使いたい時は、データセンターレベルからストレージへ行き、NFSを追加する。

バックアップ設定(オプション)
サーバイメージなどのバックアップスケジュールの設定をしたい時は、データセンターレベルからバックアップへ行き、設定を追加する。

バックアップのスケジュールを設定したら、初回のバックアップは先に走らせておいた方が良い。何かの都合で壊れて、全く残っていないという事が無いようにするため。
ISOイメージの準備
Windows端末をインストールする予定なら、KVMのドライバー(VirtIO)を以下のサイトからダウンロードする。最新の安定板(stable)の使用が勧められている。これはWindowsを入れる際に必須なので、用意しておくべき。
https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
ファイルをダウンロードし終わったら、ストレージの「ISOイメージ」のページからアップロードする。

あとは、CentOSやWindows10などのインストール用ディスクをアップロードしておく。
クラスター作成(オプション)
複数のproxmoxサーバを立てており、それでクラスターを構成する場合、データセンターレベルからクラスターへ行き、そこから作成する。

仮想サーバの作成
ISOの準備
インストールしたいOSのISOイメージがアップロードされているか確認し、アップロードされていない場合はアップロードする。ストレージのISOイメージの欄を確認する。

VMの作成
サーバを右クリックして「VMを作成」をクリックするか、上部メニューの「VMを作成」ボタンから行う。
全般タブ
「ノート」はVMを作成するproxmoxノードを指定する。
「VM ID」は必ず必要でproxmoxではVMをIDで管理している。変更の必要がなければそのまま連番で問題ない。
「名前」は、任意の名前を指定する。

OSタブ
画面に従って、インストールするOSに適したものを選ぶ。Windowsの場合はWindowsのインストールISOを選択する。

システムタブ
Windowsをインストールする場合は、「Qemuエージェント」にチェックを付けておく。

ディスクタブ
「バス/デバイス」はSCSIを選択する。
「ストレージ」は複数選択肢があるなら任意の場所を選ぶ。「ディスクサイズ」も任意の値を設定する。
「キャッシュ」は「Write back」を設定する。

CPUタブ
割り当てたいコア数を指定する。

メモリタブ
割り当てたいメモリ数を指定する。詳細設定を有効にして、最小メモリも設定できる。これを設定すると、使っていない時にproxmox上で大きなメモリを占有できないようにできるらしい。

ネットワークタブ
「モデル」をVirtIOにしておく。

確認タブ
構成内容を確認したら、完了ボタンをクリックする。

VM起動の前にすること(Windowsの場合)
Windowsのインストールには、VirtIOのドライバディスクが必要になるので、もう一つCDドライブを追加する。

IDEドライブとして設定し、VirtIOドライバのISOイメージをセットする。


VMの開始
メニューでコンソールを選び、VMを右クリックして「開始」をクリックする。

VirtIOドライバの読み込み
Windows10のインストール途中で、HDDが表示されないという状態になる。ここで、ドライバをVirtIOドライバをインストールする必要がある。以下の3っつをインストールする。
- vioscsi\w10\amd64
- NetKVM\w10\amd64
- Balloon\w10\amd64
Windows10が終わってから、デバイスマネージャーを開くと、ドライバが当たっていない項目があるので、そちらもVirtIOドライバのディスクから読み込む。
最後に、同じディスクからguest-agentのインストールを行う。Windowsのインストーラーになっており32bitと64bitがあるので、64bitの方をインストールする。
最後にOSの再起動を行う。
これで、Windows10のインストールは終了。
Linuxの場合はこのドライバ適用の処理は不要となる。
参考資料
-
前の記事
Kubernetesクラスターをホームラボに立てる 2021.11.21
-
次の記事
DockerをWebUIで管理するPortainer 2022.02.12