ESXi on KVMを実装していきたい
Introduction - ESXi on KVMを実装していきたい
あけましておめでとうございます!ひさびさすぎる更新となりました...
2020年の後半はいろいろ資格を取っていたり、技術的な部分のインプットに時間を充ててました...
(それ以外だとiPad Airを 買ったり、キーボードが届いてテンションが上がったり...)
とまぁ、私事になりますが現在業務でVMwareを扱う機会が多く、今月中にもVCPを取得する予定でもあります。
できれば、身近な環境でVMwareのvShpereを実装してみたいと思いました。
ですので、今回は普段遣いしているLinux環境のKVM上でESXiを動かしたい!という試みです。
結論から申し上げますと、実装はできたけど「まだまだ試す部分が多い」という所感です。
この部分は今後の記事のネタにできればと思います。
Environment - 実装環境
#OSとカーネル $ uname -a Linux Arch-Machine 5.9.14-zen1-1-zen #1 ZEN SMP PREEMPT Sat, 12 Dec 2020 14:36:44 +0000 x86_64 GNU/Linux #実装するマシンのホスト名 $ uname -n Arch-Machine #ハードウェア $ lscpu | grep "Architecture\|Thread(s) per core\|Core(s) per socket\|Model name\|Frequency boost\|CPU MHz" Architecture: x86_64 Thread(s) per core: 2 Core(s) per socket: 6 Model name: AMD Ryzen 5 3600 6-Core Processor Frequency boost: enabled CPU MHz: 2317.892 $ free total used free shared buff/cache available Mem: 32873960 1634276 29700216 410256 1539468 30441708 Swap: 33554428 0 33554428 $ lsblk | grep nvme nvme0n1 259:0 0 465.8G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot ├─nvme0n1p2 259:2 0 32G 0 part [SWAP] ├─nvme0n1p3 259:3 0 64G 0 part / └─nvme0n1p4 259:4 0 369.3G 0 part /home #ネットワーク周り $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 50:3e:aa:14:33:c1 brd ff:ff:ff:ff:ff:ff inet 192.168.10.22/24 brd 192.168.10.255 scope global dynamic noprefixroute enp4s0 valid_lft 34242sec preferred_lft 28842sec inet6 fe80::e894:cfe7:c06f:33e5/64 scope link valid_lft forever preferred_lft forever 3: enp5s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether a8:a1:59:16:44:03 brd ff:ff:ff:ff:ff:ff 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:d3:55:88 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:d3:55:88 brd ff:ff:ff:ff:ff:ff
Concept - 構想
+Arch Machine----------------+-------+----------+ |(192.168.10.22) |enp4s0 | | | +--+----+ | | | | | +----------------------------+--+---------+ | | | | | | | | +virbr0 ----------+--+ | | | | |(192.168.122.1) | | | | | +---------+----------+ | | | | | | | | | +-ESXi Host------+---------------+ | | | | | (192.168.122.252(DHCP)) | | | | | +--------------------------------+ | | | | | | | +Virtual Network--------------------------+ | | (192.168.122.0/24) | +-----------------------------------------------+
上の図のように、ホストマシン(Arch-Machine)の中にLinuxの標準スイッチを設定して、
その下に、VMとしてESXiホストを実装しております。
実装環境にて、NICが複数ありますが、実はマシンを新調したばかりでしてNICを遊ばせてしまっています..
今回はenp4s0のみが登場します。
Preparation - 前準備
まずは、自分の環境でKVNによる仮想化を実行できるかを調査しましょう。
$ LC_ALL=C lscpu | grep Virtualization
または、
$ grep -E --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo
各々、環境にもよりますが下記のように、仮想化を行える旨で回答が来ればヨシっ!
$ LC_ALL=C lscpu | grep Virtualization Virtualization: AMD-V #AMDなら"AMD-V",Intelなら"VT-x" $ grep -E --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo #AMDなら"svm" Intelなら"vmx"が出力されます。 #今回は長いので省略
次に、必要なパッケージのインストール
$ pacman -S qemu virt-manager #qemu -> KVMで仮想マシンを動かす上でハードウェアをエミュレートしてくれる #virt-manager -> KVMのGUIフロントエンド(Linuxのデスクトップ環境なので便利)
ESXiでVMを起動するための設定、いわゆる「VM on VM」を実現する設定もここで、
$ vim /etc/modprobe.d/kvm.conf options kvm_amd nested=1 #options kvm_intel nested=1 ---> intelならこっち #↑今回はAMDなので...
機能が有効になっているかを確認。
$ systool -m kvm_amd -v | grep nested #intelなら"systool -m kvm_intel -v | grep nested" nested = "1" #nested = "Y"でもOK
Run - 実行
実際に動かす際は、ESXiのインストールファイルを公式から持ってきて、"virt-install"を下記のように実行。
※あくまで、一例です。
$ virt-install \ --name esxi70 \ --ram 8000 \ --disk path=/var/lib/libvirt/images/esxi70.img,size=20,bus=sata \ --cpu host-passthrough \ --vcpus=4 \ --os-type linux \ --os-variant=virtio26 \ --network bridge=virbr0,model=e1000e \ --graphics spice,listen=0.0.0.0,password=password \ --video qxl \ --cdrom /var/lib/libvirt/images/VMware-VMvisor-Installer-7.0b-16324942.x86_64.iso \ --features kvm_hidden=on \ --machine q35
NICの問題で、"e1000"で実行していましたが、それではESXiのインストール画面でひたすらエラーが出るので、
"e1000e"に変更!、同じintel-NICなのになぜ...?
root以外のユーザが実行するか否かの設定等もありましたが今回は割愛。
Result - 結果
できたわね!
After Word
以上です!
今回は、そりゃそうだみたいな感じの実装でしたが、これをもう少しNW周りをゴリゴリにして、
ESXi on KVMでガチLAB環境を作りたいものです。
APIとかも作るかも...
それでは、サラダバー!!