Proxmox VE7.0をインストールしクラスタを構築する

## Proxmox VE とは

ESXiみたいなOSSです。管理用のWebベースのGUIを持っている仮想化ハイパーバーザーで、ブラウザからVMの設定とか行えます。また、ハイパーバーザーの中身はDebianなのでSSHで入って色々できるそうです。

OSSなのでHAとか分散ストレージとか無料で利用できます。ESXiだとvSphere Centraとかに課金が必要ですがそういうのがないです。
有料のサポート版があり、サブスクリプションキーが無いと利用できなリポジトリ(ガチ安定版が配られると思われる)がありますが、商用リポジトリに入る前のアップデートが入るリポジトリ(開発版は別にリポジトリがあるのである程度安定してるバージョン)は無料で利用できます。
KVM + Debianでできていて、配布されているインストールイメージを利用してサーバーなりPCなりにインストールできます

https://www.proxmox.com/en/proxmox-ve

## クラスターとは
Proxmox VEをインストールしたノード同士でクラスターを構成する事ができます。
すべてのノードを単一のWeb画面から管理できたり、クラスター内でVMのマイグレーションを行ったりすることができます。

今回は3台のノードにProxmox VE 7.0をインストールしクラスターを構築したので、その忘備録として残します。

## 環境
|||
|-|-|
|ノード| NEC iStorage NS100Tg|
|CPU| Xeon E3-1220v5|
|メモリ| 16GB|
|ストレージ| そのへんに落ちてたSSD||

x3台

## クラスターの構築要件
* 時刻・時間が同期されていること
* rootユーザーのパスワードが設定されていること
* HA機能を利用する場合は、3台以上のノードがクラスターに参加していること
* Shared Storageを利用する場合は、クラスター間のトラフィックのために専用のNICを用意することが推奨されます

###ネットワーク的な要件は
同じサブネットにノードを接続しておけば問題ないかと思います
詳細は以下の通りです。

* UDP5404番ポート・UDP5405番ポートで通信が行えること(for corosync to work)
* TCP22番ポートで通信が行えること(ノード間のSSH)
* レイテンシが2ms以下であること
　

## ProxmoxVE のインストール
RufusでインストールUSBを作成します。このとき DDモードで作成する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/87e6c586-4709-5250-1fbd-930ca586bcf0.png)

https://pve.proxmox.com/wiki/Prepare_Installation_Media#_instructions_for_windows

インストールUSBから起動しGUIのインストーラーに従って以下の設定を行います

* インストール先のディスク選択・ファイルシステム選択
    * デフォルトのext4を選択
    * zfsとかも使えるので必要に応じて設定する
* 場所(ミラーサーバーを選ぶのに選択, TimeZone, キーボードレイアウト)
    * 日本に設定
* メールアドレス、rootユーザーのパスワード
* ホスト名、IPアドレス、ゲートウェイ、DNSサーバーの設定
    * ホスト名はFQDNを設定する(host名.example.com みたいな形)よう求められます

インストールが完了し、インストールUSBを抜いて再起動を行うとproxmox VEが起動します。
`https://<設定したIPアドレス>:8006`で管理画面にアクセスできます。アカウントは`root/設定したパスワード`でログインできます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/b1e79eaf-67d3-7615-3086-8e4fd17a2fd2.png)


## リポジトリの設定

デフォルトの設定では有償のサブスクリプションがないと利用できないリポジトリが設定されているので、これを無効にしてサブスクリプション無しでも使えるリポジトリを追加します。
左のメニューのところからノードを選択し、`Shell`を選択するとそのノードのシェルが取れるのでここから設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/814e70fc-ba27-26a6-a0c2-392001a69eef.png)

`/etc/apt/sources.list` を以下のように編集し、`No-Subscription Repository`を追加します。
Debianなので普通にviで編集できます

``` bash
deb http://ftp.debian.org/debian bullseye main contrib
deb http://ftp.debian.org/debian bullseye-updates main contrib

# PVE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription

# security updates
deb http://security.debian.org/debian-security bullseye-security main contrib
```

次にEnterprise Repository をコメントアウトして使用しないようにします。
`/etc/apt/sources.list.d/pve-enterprise.list` を開き、以下のように編集します

``` 
#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
```

Repositoryを確認すると編集した内容が反映されていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/e5327512-a2ab-a8be-64df-19c330dea2c5.png)

必要に応じてシェルからアップデートを行います

```
apt update
apt upgrade
```

### 参考

https://pve.proxmox.com/wiki/Package_Repositories

## クラスターの構築
注意が必要なこととして、クラスター構成後各ノードのIPアドレスやホスト名を変更できなくなるとドキュメントに記載があります。
また、Cluster Nameを設定する必要がありますがこれも変更できません。

どれか一つのノードで、Datacenter>Cluster>Create Cluster からクラスターを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/306b17e0-2662-44bb-08ed-9d228ea80729.png)
そして、Create Clusterを実行したノードで、Datacenter>Cluster>Join Information から、`Join Information`の情報をコピーします。

次にまだクラスターに参加していないノードの`Datacenter→Cluster→Join Cluster`から`Cluster Join`のメニューを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/53fe76a3-c1c8-c682-ccfe-6da86cd0afdb.png)

コピーした`Join Information`と`Create Cluster`を実行したノードのパスワード、`Cluster Network`の項目でクラスター間の通信に使用するNICを選択し、Join<Cluster名>のボタンを押下しノードをクラスタへ参加させます。
※`Join Information`を入力すると`Peer Address`とか`Fingerprint`は自動で入力されます。

暫く待つとノードがクラスターに参加します。
ノードがクラスターに参加すると、その瞬間からログインしたセッションが切れてWebインターフェースが操作できなくなるので、リロード・再ログインを行う必要があります。
クラスターに参加済みの他のノードからもクラスタに当該のノードが参加したこと確認できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/f12e1367-95d4-34bf-cdd9-0871b722d62d.png)



### 参考
https://pve.proxmox.com/wiki/Cluster_Manager



## ハマったところ - IPアドレスの変更
インストール後にIPアドレスを変更した場合、以下のエラーが出てクラスターの構築に失敗する場合があります。

```
detected the following error(s):
* local node address: cannot use IP '<変更する前のIPアドレス>', not found on local node!

TASK ERROR: Check if node may join a cluster failed!
```

IPアドレスを変更する場合は、以下の2つの場所を編集する必要があるようです。
1だけではだめで忘れずにhostsファイルも編集しないとだめみたいです。

1. ホスト→System→Network からNICを選択してIPアドレスを編集する
2. ホスト→System→Hosts→Hosts からホスト名に紐付けられたIPアドレスを編集する



https://forum.proxmox.com/threads/wrong-ip-shown-joining-cluster-local-node-address-cannot-use-ip-not-found-on-local-node.83067/

## ハマったところその2 - ノード間で異なるファイルシステムを利用する
ext4のノード2台とzfsのノードを混ぜて最初クラスターを構築していたのですが、どうもあまり良くないみたいです・・・

ストレージに関する設定は`/etc/pve/storage.cfg`に記載されるようですが、ext4・LVMを利用する場合とzfsを利用する場合とで設定内容が異なるのですが、クラスターを構築するとこのファイルがすべてのノードで同期されるみたいです。
その結果、自分の場合はファイルシステムにzfsを利用するノードでVMの作成等が行えなくなりました・・・
大人しく当該ノードをクラスターから削除の上、ext4で再インストールし再度クラスターに参加させました。。。

https://pve.proxmox.com/wiki/Storage#_storage_configuration
https://forum.proxmox.com/threads/difference-between-raid1-zfs-and-ext4-option-on-installation-wizard.75909/
https://qiita.com/minoden_osaka/items/07e2cf3d1ef83638fb51

## 個人的なメモ(2021/10/31)
### その１
webコンソールのshellからアップデートしたときに、入力待ちの画面を放置・タイムアウトさせてアップデートが失敗した場合、シェルが壊れてwebからコンソールが取れなくなったので注意する