Proxmox仮想環境
別のオプションとして、Proxmox VEにラボを構築することを検討できます。内部的には、EVE-NG、libvirtdを使用したUbuntuネイティブKVM、およびProxmox VEのハイパーバイザーは同じです。3 つの環境すべてで、 QEMU が VM を実行します。各環境には独自のCLIとGUIがあり、DebianまたはUbuntu Linuxディストリビューションを使用します。
libvirtd を使用した EVE-NG および Ubuntu ネイティブ KVM に対する Proxmox VE の利点は次のとおりです。
- ハイパーバイザーのクラスターを簡単に構築できるため、単一のBMSの範囲が制限されます。
- Cephなどの共有ストレージを簡単に接続できます。
- SDNオプションを使用してサーバー間のネットワークを仮想化します。
- REST APIがシステムを運用します。
libvirtd を使用した EVE-NG および Ubuntu ネイティブ KVM に対する Proxmox VE の利点の欠点は次のとおりです。
- UKSM カーネルをビルドしても、複数の vJunos スイッチ インスタンスの RAM 使用量を節約できません。そのため、各 vJunos スイッチ仮想マシンには 5 GB の RAM が必要です。
- 圧縮された qcow2 イメージまたはバッキング qcow2 イメージは実行されず、代わりにストレージ オプションで raw イメージとして展開されます。そのため、各 vJunos スイッチ仮想マシンには 32 GB のストレージが必要です。
このドキュメントでは、ローカルに設定された単一のProxmoxサーバーと標準のLinuxブリッジを使用して、Proxmox VE上にvJunosスイッチVMを作成する例を紹介します。これは、前述の他の 2 つの環境と比較するのに役立ちます。VM用のProxmox GUIを使用したことがないため、juniper.confイメージを作成した後、設定変更をローカルで実行し、 LinuxブリッジとVMインターフェイスは、Proxmox VEでVM作成の変更後に実行する必要があります。CLI の例を使用すると、複数の vJunos スイッチ仮想マシンを起動するためのスクリプトに含めやすくなります。
複数のサーバーを使用するスケールアウトラボでは、ローカルのLinuxブリッジではなく、VXLANを備えたSDNをネットワークトランスポートオプションとして使用することをお勧めします。
Proxmox VEの準備
ハイパーバイザーを設置したら、ラボ内のvJunosスイッチ仮想マシンなどに使用するネットワークを作成します。上記の例のように、Proxmox GUIを使用して、以下に示す3つの標準Linuxブリッジを作成し、それらがアクティブ化されていることを確認します。
各Linuxブリッジに名前を割り当て、オプションでMTUを9200に設定できます。MTU 値は、VM の作成後にスクリプトを使用して変更できます。他の値の入力や変更は避けてください。
残りのすべての手順では、サーバーへの SSH を使用して、BASH コマンドをローカルで実行します。まず、vJunos-switch の qcow2-image をサーバーにダウンロードします。
mkdir -p /root/download
次に、vJunosスイッチ仮想マシンの無料コピーをURL: https://support.juniper.net/support/downloads/?p=vjunos を使用してディレクトリにダウンロードし、コピーがダウンロードされたかどうかを確認します。
ls -l /root/download/ -rw-r--r-- 1 root root 3966631936 Aug 1 2023 vJunos-switch-23.2R1.14.qcow2
vJunosスイッチVMをProxmox VEに導入する
GUIとしてProxmox GUIを使用して最初のvJunosスイッチVMを作成すると、VMが正常に動作しなくなる原因となるパラメータが追加される可能性があります。代わりに、CLI を使用して初期 VM を作成し、テンプレートとして設定します。次に、このテンプレートを使用して、GUI から以降のすべての VM を起動します。
BASH を使用して、サーバー上で次の手順をローカルに実行します。
- VM を個別に構成します。
- VM ID/番号。この例では、
200. - VM のイメージの実行元のストレージ。この例では、ストレージ
local-lvm.です
- VM ID/番号。この例では、
- 同じ ID の既存の VM が実行されている場合は削除します。これは、エラーが発生して再試行する場合に便利です。
- 後で正しく起動するために、必要なすべてのパラメータを使用して新しい vJunos-switch VM を作成します。
- VM の名前。この例では、
vswitch.名前は変更できます。 - RAMとCPU。変更しないでください。
- この VM を正しく起動するために必要な特別な BIOS および CPU オプション。オプションは変更しないでください。
- 起動順序とシリアル画面。変更しないでください。
- まず、VM の fxp0 インターフェイスに割り当てられるネットワーク
net0。必要に応じて変更しますが、ネットワークが VM の DHCP リースを提供できることを確認します。 - 2つ目は、vJunosスイッチVMのインターフェイス
ge-0/0/0となるnet1を始めとするネットワークを増やすことです。ラボの設計に応じて、より多くのインターフェイスと他のLinuxブリッジを使用して変更する必要があります。内部設計が複雑になりすぎないように、これらのインターフェイスのそれぞれについて、オプションをfirewall=0にしておくことをお勧めします。
- VM の名前。この例では、
- 選択したストレージ オプションに vJunos-switch qcow2-image をインポートします。場合によっては、vJunos-switch qcow2 イメージ ファイルの場所を変更する必要があります。
- BASH 変数に抽出する構成イメージの場所をインポートします。
- 起動元として作成した VM にイメージの場所を追加します。
- この VM の初期 Junos OS 構成を使用して既定の
juniper.confを作成します。 make-config.shスクリプトを使用して、個々のjuniper.confファイルを埋め込むイメージを作成します。- 選択したストレージ オプションに Junos OS 設定イメージをインポートします。
- BASH 変数に抽出する構成イメージの場所をインポートします。
- 作成した VM に構成イメージの場所を追加します。
- VM の完全な構成を確認して確認します。
- オプション:vJunosスイッチの今後の起動のテンプレートとしてVMを使用します。
- 現在の VM をテンプレートとして定義します。
- クローンの新しい VMID を選択します。
- 後で使用するためにクローン VM を作成します。
- 必要に応じて、クローンのインターフェイスの割り当てを変更します。
- VM またはそのクローンを起動します。
- 起動した VM の Linux ブリッジの割り当てをローカルで確認します。
- VM が起動しているかどうかを Proxmox GUI で確認し、コンソールにアクセスします。
# configure the management ID for the VM and your storage location VMID="200" VMSTORAGE="local-lvm" # make sure any prior instance of this VM is down and deleted qm stop $VMID qm destroy $VMID # create a new VM without a virtual disk qm create $VMID --name switch1 --memory 5120 --cores 4 \ --args "-machine accel=kvm:tcg -smbios type=1,product=VM-VEX -cpu 'host,kvm=on'" \ --boot order=virtio0 --serial0 socket \ --net0 virtio,bridge=vmbr0 \ --net1 virtio,bridge=ge000,firewall=0 \ --net2 virtio,bridge=ge001,firewall=0 \ --net3 virtio,bridge=ge002,firewall=0 # import the vJunos image as qcow2 format in proxmox qm disk import $VMID /root/download/vJunos-switch-23.2R1.14.qcow2 $VMSTORAGE --format qcow2 | tee diskimport.txt . . transferred 31.6 GiB of 31.8 GiB (99.52%) transferred 31.8 GiB of 31.8 GiB (100.00%) transferred 31.8 GiB of 31.8 GiB (100.00%) Successfully imported disk as 'unused0:local-lvm:vm-200-disk-0' # extract image location from import VMIMAGE=`cat diskimport.txt | grep "imported disk" | awk '{print $5}' | sed 's/.:/ /' | awk '{print $2}' | sed 's/.$//'` echo $VMIMAGE local-lvm:vm-200-disk-0 # attach the qcow2 disk to the vm qm set $VMID --virtio0 $VMIMAGE,iothread=1,size=32G update VM 200: -virtio0 local-lvm:vm-200-disk-0,iothread=1,size=32G
「vJunosスイッチのJunos OSのデフォルト設定」の章を確認します。この章では、他の環境で類似した、vJunosスイッチ仮想マシンの個々のJunos OS設定を作成するプロセスについて説明します。また、この章では、新しいvJunosスイッチ仮想マシンをMist Cloudのインベントリに自動的に表示できる採用設定を追加する方法についても説明します。ここでは、同じ手順を繰り返さずに、fxp0 インターフェイスでパスワードABC123rootように、リモート SSH アクセスに最小限のスタートアップ コンフィギュレーションを使用しました。
cat <<EOF >juniper.conf
system {
host-name vjunos;
root-authentication {
encrypted-password "\$6\$DOvFAxW9\$HpxgOaGEe5L6MtDJqbWepS5NT6EW23rCuu69gwwGVFr7BpzY2MHS34mPrR0LKRqoGI19tRgpz3vFJkEueW9mQ1"; ## SECRET-DATA
}
services {
ssh {
root-login allow;
protocol-version v2;
}
}
name-server {
8.8.8.8;
9.9.9.9;
}
arp {
aging-timer 5;
}
syslog {
file interactive-commands {
interactive-commands any;
}
file messages {
any notice;
authorization info;
}
}
}
interfaces {
fxp0 {
unit 0 {
family inet {
dhcp force-discover;
}
}
}
}
protocols {
lldp {
interface all;
}
lldp-med {
interface all;
}
}
EOF
この時点で、Junos OS スタートアップ コンフィギュレーションを個別に作成し、プロセスを続行している必要があります。
# download the make-config.sh script from the Juniper CDN if you do not have it yet
# https://webdownload.juniper.net/swdl/dl/anon/site/1/record/168885.html
chmod 777 make-config.sh
./make-config.sh juniper.conf myconfig.img
.
./config/juniper.conf
Cleaning up...
removed '/var/tmp/tmp.hhQ0rcM92K/config/juniper.conf'
removed directory '/var/tmp/tmp.hhQ0rcM92K/config'
removed directory '/var/tmp/tmp.hhQ0rcM92K'
removed directory '/var/tmp/tmp.gvCkmgmvXy'
Config disk myconfig.img created
# import the junos config image to proxmox storage
qm disk import $VMID myconfig.img $VMSTORAGE --format raw | tee diskimport.txt
.
transferred 1.0 MiB of 1.0 MiB (100.00%)
transferred 1.0 MiB of 1.0 MiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-200-disk-1'
# extract image location from import
VMIMAGE=`cat diskimport.txt | grep "imported disk" | awk '{print $5}' | sed 's/.:/ /' | awk '{print $2}' | sed 's/.$//'`
echo $VMIMAGE
local-lvm:vm-200-disk-1
# attach the config-image disk to the vm
qm set $VMID --ide0 $VMIMAGE,size=16M
update VM 200: -ide0 local-lvm:vm-200-disk-1,size=16M
これで、すべての準備が完了しました。結果の VM 構成を確認できます。
# review the VM configuration made qm config $VMID args: -machine accel=kvm:tcg -smbios type=1,product=VM-VEX -cpu 'host,kvm=on' boot: order=virtio0 cores: 4 ide0: local-lvm:vm-200-disk-1,size=4M memory: 5120 meta: creation-qemu=8.1.5,ctime=1728988040 name: switch1 net0: virtio=BC:24:11:01:06:0E,bridge=vmbr0 net1: virtio=BC:24:11:6B:0B:84,bridge=ge000,firewall=0 net2: virtio=BC:24:11:7E:5C:07,bridge=ge001,firewall=0 net3: virtio=BC:24:11:FB:40:37,bridge=ge002,firewall=0 serial0: socket smbios1: uuid=5b184467-bffe-45f3-8a4c-bb2182aa3aa5 virtio0: local-lvm:vm-200-disk-0,iothread=1,size=32524M vmgenid: a3299ccf-293b-4df2-9458-b0fa444a9c61
VM には資格情報やその他の制限要因が含まれていないため、初めて起動する前に、この VM をテンプレートとして使用してください。これにより、複数の仮想マシンをフルとして起動することも、後でイメージクローンにリンクすることもできます。続行する場合は、以下の手順に従ってください。
qm template $VMID
Renamed "vm-200-disk-1" to "base-200-disk-1" in volume group "pve"
Logical volume pve/base-200-disk-1 changed.
WARNING: Combining activation change with other commands is not advised.
Renamed "vm-200-disk-0" to "base-200-disk-0" in volume group "pve"
Logical volume pve/base-200-disk-0 changed.
WARNING: Combining activation change with other commands is not advised.
# select a new VMID for the clone
VMID2="201"
# create a clone of of your template VM
qm clone $VMID $VMID2 --name switch1
create linked clone of drive ide0 (local-lvm:base-200-disk-1)
Logical volume "vm-201-disk-0" created.
create linked clone of drive virtio0 (local-lvm:base-200-disk-0)
Logical volume "vm-201-disk-1" created.
#
# at this point you may change the interfaces assigned according to your topology
#
# review the VM configuration for the clone
qm config $VMID2
args: -machine accel=kvm:tcg -smbios type=1,product=VM-VEX -cpu 'host,kvm=on'
boot: order=virtio0
cores: 4
ide0: local-lvm:vm-201-disk-0,size=4M
memory: 5120
meta: creation-qemu=8.1.5,ctime=1729094281
name: switch1
net0: virtio=BC:24:11:87:61:1B,bridge=vmbr0
net1: virtio=BC:24:11:B2:11:52,bridge=ge000,firewall=0
net2: virtio=BC:24:11:79:0C:A1,bridge=ge001,firewall=0
net3: virtio=BC:24:11:DF:BC:BF,bridge=ge002,firewall=0
serial0: socket
smbios1: uuid=b81068a9-8f7e-423a-bbb8-7738da5f98df
virtio0: local-lvm:vm-201-disk-1,iothread=1,size=32524M
vmgenid: de47f143-5f48-44c4-8674-beb7d1b91bd2
# start the clone vJunos-switch VM
qm start $VMID2
brctl show
bridge name bridge id STP enabled interfaces
ge000 8000.de5f3a3d3a9b no tap201i1
ge001 8000.da08ff719f7c no tap201i2
ge002 8000.8614a67130b7 no tap201i3
vmbr0 8000.5847ca7543fe no enp2s0
tap201i0
テンプレート/クローンをまだ使用しないことにした場合は、テスト用に最初の vJunos-switch VM を起動します。
# start the new vJunos-switch VM
qm start $VMID
# review the linux-bridges and attached interfacs for our first VM
brctl show
bridge name bridge id STP enabled interfaces
ge000 8000.0ac0df72ec4b no tap200i1
ge001 8000.623437ae4bac no tap200i2
ge002 8000.72c0fc5f9933 no tap200i3
vmbr0 8000.5847ca7543fe no enp2s0
tap200i0
これで、Proxmox GUIでVMコンソールを確認できます。ルーティングエンジンの外側の VM 画面が変更されないように、正しいボタンを使用していることを確認してください。ルーティングエンジンは、すべての Junos OS 設定が開始する場所で、独自の画面があります。選択するコンソールオプションについては、下の図を参照してください。
LinuxブリッジとVMインターフェイス ProxmoxVEでのVM作成後の変更
vJunosスイッチ仮想マシンの起動は、ほとんどのラボのニーズを満たしていません。新しい VM を起動するたびに、例で使用されている標準の Linux ブリッジを調整する必要があります。詳細な説明については、「 Linux ブリッジ」および「VM 作成後の VM インターフェイスの変更」の章を参照してください。したがって、ここで繰り返す必要はありません。EVE-NG は、これらの調整を自動的に管理します。
Proxmox VEは、CLIを介してVMインターフェイスの詳細とその名前をローカルに提供しません。ただし、これらの詳細は GUI の REST API で使用できます。提供されているコマンドpveshを使用すると、VMインターフェイスに簡単にアクセスし、作成されたVMインターフェイスに関するJSONベースの情報を抽出できます。したがって、pvesh コマンドと jq コマンド、および通常の BASH プログラミングを使用してvm-bridge-update.sh、新しいスクリプトを再構築する方が簡単です。以下に示す手順を参照してください。
apt-get install jq rm -f vm-bridge-update.sh touch vm-bridge-update.sh chmod 777 vm-bridge-update.sh vi vm-bridge-update.sh
以下の設定をコピーしてエディターに貼り付けます。次に、保存して閉じます。
#!/bin/bash
# use API to get first nodename
pvesh get /nodes --output-format json | jq -r '.[].node' >nodes.txt
VMNODE=`cat nodes.txt | head -1`
echo 'We run this on node: '$VMNODE
# use API to get nic interfaces of our VM
pvesh get /nodes/$VMNODE/qemu/$1/status/current --output-format json | jq -r '.nics | keys[]' >/tmp/vminterfacelist.txt
# ignore first interface fxp0
cat /tmp/vminterfacelist.txt | tail -n +2 >/tmp/vminterfacelist2.txt
#cat /tmp/vminterfacelist2.txt
while IFS= read -r line
do
INTERFACE="$line"
#echo $INTERFACE
BRIDGE=`find /sys/devices/virtual/net -name $INTERFACE | grep '/brif/' | sed 's/// /g' | awk '{print $5}'`
# change MTU to higher value
RUNME="ip link set dev "$INTERFACE" mtu 9200"
echo $RUNME
eval $RUNME
# enable LLDP and 802.1x on bridge
RUNME="echo 65528 > /sys/class/net/"$BRIDGE"/bridge/group_fwd_mask"
echo $RUNME
eval $RUNME
# enable LACP on link
RUNME="echo 16388 > /sys/class/net/"$INTERFACE"/brport/group_fwd_mask"
echo $RUNME
eval $RUNME
done < /tmp/vminterfacelist2.txt
num=0
while IFS= read -r line
do
INTERFACE="$line"
BRIDGE=`find /sys/devices/virtual/net -name $INTERFACE | grep '/brif/' | sed 's/// /g' | awk '{print $5}'`
MTU=`cat /sys/class/net/$BRIDGE/mtu`
if [ "$MTU" != "9200" ]; then
echo 'Warning! Bridge:'$BRIDGE' did not follow new MTU setting of interface:'$INTERFACE' check other interfaces attached to same bridge and correct please!'
num=1
fi
done < /tmp/vminterfacelist2.txt
exit $num
新しいスクリプトを使用すると、起動後に VM の Linux ブリッジとインターフェイスを更新できるようになりました。選択したAPIの最初のノードは、単一のProxmox VEインストールに適しています。クラスターがある場合は、上記のスクリプトを変更する必要があるかもしれません。
./vm-bridge-update.sh $VMID We run this on node: proxmox1 ip link set dev tap200i1 mtu 9200 echo 65528 > /sys/class/net/ge000/bridge/group_fwd_mask echo 16388 > /sys/class/net/tap200i1/brport/group_fwd_mask ip link set dev tap200i2 mtu 9200 echo 65528 > /sys/class/net/ge001/bridge/group_fwd_mask echo 16388 > /sys/class/net/tap200i2/brport/group_fwd_mask ip link set dev tap200i3 mtu 9200 echo 65528 > /sys/class/net/ge002/bridge/group_fwd_mask echo 16388 > /sys/class/net/tap200i3/brport/group_fwd_mask
Linuxブリッジ拡張機能の最初のテストを検証するには、vJunosスイッチ仮想マシンからのLLDPネイバーアナウンスを確認します。 juniper.conf 手順で、微調整を行わないと、 tcpdump )を使用してアナウンスが表示されません。以下の例を参照してください。
root@proxmox1:~# tcpdump -eni ge000 tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on ge000, link-type EN10MB (Ethernet), snapshot length 262144 bytes 13:47:37.917669 bc:24:11:6b:0b:84 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 322: LLDP, length 308: vjunos 13:48:07.692425 bc:24:11:6b:0b:84 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 322: LLDP, length 308: vjunos
最終テストを実行するには、1台目の仮想マシンに1対1で接続された2台目のvJunosスイッチを起動します。次に、2つのVM間でアクティブなLACPを使用してLAGを確立します。Mist Cloud GUIにおける両方の仮想スイッチの設定を以下に示します。
vJunosスイッチコンソールでローカルに検査すると、LLDPネイバーと2つのスイッチ間で確立されたLACPリンクが表示されます。この手順では、ラボが想定どおりに機能することを確認します。
root@switch1> show lldp neighbors
Local Interface Parent Interface Chassis Id Port info System Name
ge-0/0/0 ae0 2c:6b:f5:3b:3b:c0 ge-0/0/0 switch2
ge-0/0/1 ae0 2c:6b:f5:3b:3b:c0 ge-0/0/1 switch2
ge-0/0/2 ae0 2c:6b:f5:3b:3b:c0 ge-0/0/2 switch2
root@switch1> show lacp interfaces
Aggregated interface: ae0
LACP state: Role Exp Def Dist Col Syn Aggr Timeout Activity
ge-0/0/0 Actor No No Yes Yes Yes Yes Fast Active
ge-0/0/0 Partner No No Yes Yes Yes Yes Fast Active
ge-0/0/1 Actor No No Yes Yes Yes Yes Fast Active
ge-0/0/1 Partner No No Yes Yes Yes Yes Fast Active
ge-0/0/2 Actor No No Yes Yes Yes Yes Fast Active
ge-0/0/2 Partner No No Yes Yes Yes Yes Fast Active
LACP protocol: Receive State Transmit State Mux State
ge-0/0/0 Current Fast periodic Collecting distributing
ge-0/0/1 Current Fast periodic Collecting distributing
ge-0/0/2 Current Fast periodic Collecting distributing