Harvester の HCI ストレージ(Longhorn)のレプリカ通信を、管理ネットワークとは別の NIC 2 本のボンド(active-backup)に分ける手順です。あわせて、仮想マシンを LAN に直接つなぐ VM ネットワークを作ります。
この記事の前提
- インストールと初期設定が終わっていること
- 各ノードにストレージ用の NIC が 2 本(ens20・ens21)あり、同じスイッチ(L2)につながっていること
- 参照: Storage Network、Harvester Network
作るネットワーク
| 名前 | 種類 | 使う NIC | 用途 |
|---|---|---|---|
| mgmt | クラスタ ネットワーク(既定) | ens18・ens19(mgmt-bo) | 管理、VM の通信、クラスタ内の通信 |
| storage | クラスタ ネットワーク(追加) | ens20・ens21(storage-bo) | Longhorn のレプリカ通信(VLAN 100、10.10.100.0/24) |
| vmnet | VM ネットワーク | mgmt の上(タグなし) | 仮想マシンを 192.168.1.0/24 につなぐ |
クラスタ ネットワークの作成
(1) [Networks] → [Cluster Network Configuration] で [Create a Cluster Network] をクリックします。

(2) 名前(storage)と説明を入力し、[Create] をクリックします。

(3) 作った storage の行で [Create Network Configuration] をクリックします。ネットワーク構成(Network Configuration)は、クラスタ ネットワークに各ノードのどの NIC を使うかを決める設定です。

(4) 名前(storage-all)を入力し、[Node Selector] で [Select all nodes] を選びます(3 台すべてが対象になります)。

(5) [Uplink] で NIC を 2 本(ens20・ens21)選び、ボンドのモードと監視間隔を指定して [Create] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| NICs | ボンドにする NIC。全ノードにある NIC だけが選べる | ens20・ens21 |
| Mode | ボンドのモード。スイッチ側の設定が不要な active-backup を選んだ。LACP を使えるスイッチなら 802.3ad も選べる | active-backup |
| Miimon | リンク監視の間隔(ミリ秒)。-1 は既定値 | 100 |
| MTU | 空欄は 1500。ジャンボ フレームを使うときはスイッチと合わせる | (空欄) |
(6) storage-all が Active になれば、各ノードにボンド storage-bo とブリッジ storage-br ができています。

ストレージ ネットワークの設定
ストレージ ネットワークを変えるときは、すべての仮想マシンを止めておく必要があります。仮想マシンを作る前に設定するのがおすすめです。
(1) [Advanced] → [Settings] で「storage-network」を検索し、storage-network の︙から [Edit Setting] をクリックします。

(2) [Enabled] を選び、VLAN・クラスタ ネットワーク・IP アドレスの範囲を入力して [Save] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Type | L2VlanNetwork(VLAN タグを付ける)/UntaggedNetwork | L2VlanNetwork |
| VLAN ID | ストレージ通信の VLAN。スイッチのポートでこの VLAN を通しておく | 100 |
| Cluster Network | 使うクラスタ ネットワーク | storage |
| IP Range | Longhorn のポッドに配る IP の範囲。必要な数は「ノード数×2+ディスク数×2+同時にダウンロード・アップロードするイメージの数」 | 10.10.100.0/24 |
| Exclude IPs | 範囲のうち使わない IP | (なし) |
(3) 数分で Longhorn のポッドが作り直され、storage-network に Modified と設定値が表示されます。

確認
Longhorn のインスタンス マネージャーに、ストレージ ネットワークの IP が付いたことを確認します。
実行する場所:いずれかのノード(rancher ユーザー。kubectl は sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml)
$ kubectl get settings.harvesterhci.io storage-network -o jsonpath='{.value}{"\n"}{.status.conditions[0].reason}{"\n"}'
$ kubectl -n longhorn-system get pod -l longhorn.io/component=instance-manager -o jsonpath='{range .items[*]}{.metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status}{end}' | tr -d ' \n' | grep -o '"ips":\["10\.10\.100\.[0-9]*"\]'
$ cat /proc/net/bonding/storage-bo
期待する出力(抜粋):
{"vlan":100,"clusterNetwork":"storage","range":"10.10.100.0/24"}
Completed
"ips":["10.10.100.2"]
"ips":["10.10.100.1"]
"ips":["10.10.100.3"]
Bonding Mode: fault-tolerance (active-backup)
Currently Active Slave: ens20
MII Polling Interval (ms): 100
Slave Interface: ens20
Slave Interface: ens21
VM ネットワークの作成
(1) [Networks] → [Virtual Machine Networks] で [Create] をクリックし、名前(vmnet)、Type、クラスタ ネットワークを指定して [Create] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Type | L2VlanNetwork(VLAN を指定)/UntaggedNetwork(タグなし)/OverlayNetwork | UntaggedNetwork |
| Cluster Network | 仮想マシンの通信に使うクラスタ ネットワーク。mgmt を選ぶと管理ボンド(ens18・ens19)を通る | mgmt |
(2) vmnet が Active になります。

仮想マシンの通信を管理と分けたいときは、別の NIC でクラスタ ネットワークを作り、L2VlanNetwork の VM ネットワークを作ります。この検証では NIC の数の都合で mgmt に載せています。