このステップバイステップガイドでは、KVMとは何か、およびCentOS8LinuxオペレーティングシステムにKVMをインストールして構成する方法について説明します。
このガイドは、CentOS8最小サーバーエディションで正式にテストされています。ただし、RHEL8およびAlmaLinux8やRockyLinux8などのクローンでも機能するはずです。
KVMとは何ですか?
KVM 、 Kの略 ernelベースのV irtual M achineは、カーネルがハイパーバイザーとして機能できるようにするFreeBSDおよびLinuxカーネルモジュールです。
カーネルバージョン2.6.20以降、KVMはLinuxカーネルメインラインに統合されています。
KVMを使用すると、Linuxマシンで仮想化環境を簡単にセットアップし、Linux、Windows、BSD、MacOSなどのさまざまなゲストオペレーティングシステムを展開できます。
それでは、CentOS8LinuxにKVMをインストールして構成する方法を見てみましょう。
前提条件
KVMをインストールする前に、まずシステムがハードウェア仮想化をサポートしていることを確認してください。次のガイドでは、Linuxシステムが仮想化をサポートしているかどうかを識別するためのいくつかの異なる方法を文書化しています。
- CPUが仮想化テクノロジー(VT)をサポートしているかどうかを確認する方法
システムがハードウェア仮想化をサポートしている場合は、次の手順を続行します。
1。 CentOS8サーバーにKVMをインストールして構成する
このガイドでは、次のシステムを使用します。
KVM仮想化サーバー:
- OS – CentOS 8最小サーバー(GUIなし)
- IPアドレス :192.168.225.53 / 24
CentOS 8でテストされていますが、このガイドはRHEL8でも問題なく動作するはずです。
1.1。 CentOS8にKVMをインストールする
注: このチュートリアル全体で提供されるすべてのコマンドは、 root
として実行する必要があります ユーザー。通常のユーザーとしてログインしている場合は、sudo
を追加します すべてのコマンドの前に以下を示します。
root
としてコマンドを使用して、Kvmと必要なすべての依存関係をインストールしてCentOS8サーバーに仮想化環境をセットアップします ユーザー:
# dnf install qemu-kvm libvirt virt-install
ここで
- emu-kvm -KVMサポート用のQEMUメタパッケージ(つまり、x86ハードウェアでのQEMU完全仮想化)
- libvirt -libvirtライブラリのプログラム
- virt-install -仮想マシンを作成および複製するプログラム。
KVMをインストールしたら、libvertd
を有効にして起動します サービス(まだ開始されていない場合):
# systemctl enable libvirtd
# systemctl start libvirtd
両方のコマンドを組み合わせて、以下のように1つのライナーとして実行することもできます。
# systemctl enable --now libvirtd
次のコマンドでlibvirtdサービスのステータスを確認します:
# systemctl status libvirtd
出力例:
● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enable> Active: active (running) since Wed 2020-07-15 14:27:32 IST; 5s ago Docs: man:libvirtd(8) https://libvirt.org Main PID: 1097 (libvirtd) Tasks: 17 (limit: 32768) Memory: 57.0M CGroup: /system.slice/libvirtd.service └─1097 /usr/sbin/libvirtd Jul 15 14:27:28 centos8.ostechnix.lan systemd[1]: Starting Virtualization daemon... Jul 15 14:27:32 centos8.ostechnix.lan systemd[1]: Started Virtualization daemon.
libvertdサービスが稼働しています!
KVMモジュールがロードされているかどうかを確認します:
# lsmod | grep kvm
出力例:
kvm_intel 294912 0 kvm 786432 1 kvm_intel irqbypass 16384 1 kvm
素晴らしい! KVMモジュールがロードされます。今すぐネットワークブリッジを作成しましょう。
1.2。 CentOSでKVMを使用してブリッジネットワークをセットアップする
ブリッジネットワーク ホストコンピューターの実際のネットワークインターフェイスを他のVMと共有して、外部ネットワークに接続します。したがって、各VMは利用可能なIPv4
に直接バインドできます。 またはIPv6
物理的なコンピュータのように、アドレス。
デフォルトでは、KVMはプライベート仮想ブリッジをセットアップし、すべてのVMがホストコンピューター内で相互に通信できるようにします。
ゲストのネットワークを構成するための独自のサブネットとDHCPを提供し、NATを使用してホストネットワークにアクセスします。
ip
を使用して、KVMのデフォルトの仮想インターフェースのIPアドレスを確認してください。 コマンド:
# 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff inet 192.168.225.52/24 brd 192.168.225.255 scope global dynamic noprefixroute enp0s3 valid_lft 42217sec preferred_lft 42217sec inet6 2409:4072:918:98cf:ad3b:b969:8ec8:f9c7/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::b404:4d52:8bee:18bf/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff 4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff 5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:5b:a4:cd 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 6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff
ご覧のとおり、KVMのデフォルトネットワーク virbr0
192.168.122.1/24
を使用します IPアドレス。すべてのVMは、192.168.122.0/24
のIPアドレスを使用します IP範囲とホストOSは192.168.122.1
で到達可能になります 。
ホストOSにSSH接続できるはずです(192.168.122.1
)ゲストOS内から、scp
を使用します ファイルを前後にコピーします。
ホスト自体から内部のVMにのみアクセスする場合は問題ありません。ただし、ネットワーク内の他のリモートシステムからVMにアクセスすることはできません。
異なるIP範囲を使用しているため、つまり192.168.225.0/24
私の場合。他のリモートホストからVMにアクセスするには、ホストネットワーク上で実行され、ホストネットワーク上にある外部DHCPサーバーを使用するパブリックブリッジをセットアップする必要があります。
これを簡単に言えば、すべてのVMがホストシステムで使用されるのと同じIPシリーズを使用するようにします。
パブリックブリッジネットワークを設定する前に、 Netfilterを無効にする必要があります パフォーマンスとセキュリティ上の理由 。 Netfilterは現在、デフォルトでブリッジで有効になっています。
netfilterを無効にするには、/etc/sysctl.d/bridge.conf
というファイルを作成します :
# vi /etc/sysctl.d/bridge.conf
次の行を追加します:
net.bridge.bridge-nf-call-ip6tables=0 net.bridge.bridge-nf-call-iptables=0 net.bridge.bridge-nf-call-arptables=0
ファイルを保存して閉じます。
次に、/etc/udev/rules.d/99-bridge.rules
:
# vi /etc/udev/rules.d/99-bridge.rules
次の行を追加します:
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"
これにより、システム起動の適切な場所でブリッジのnetfilterを無効にするために必要なフラグが設定されます。ファイルを保存して閉じます。 システムを再起動します これらの変更を有効にします。
次に、KVMがそれ自体のためにインストールしたデフォルトのネットワークを無効にする必要があります。
「iplink」コマンドを使用して、KVMのデフォルトのネットワークインターフェースの名前を見つけます。
# ip link
出力例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff 4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff 5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff 6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff
上記の出力にあるように、エントリvirbr0
およびvirbr0-nic
KVMネットワークです。
次のコマンドを使用して、デフォルトのKVMネットワークを削除しましょう:
# virsh net-destroy default
出力例:
Network default destroyed
次のコマンドでデフォルトネットワークの定義を解除します:
# virsh net-undefine default
出力例:
Network default has been undefined
上記のコマンドが何らかの理由で機能しない場合は、次のコマンドを使用して、KVMのデフォルトネットワークを無効にしたり、定義を解除したりできます。
# ip link delete virbr0 type bridge
# ip link delete virbr0-nic
次に、ip link
を実行します virbr0
かどうかをもう一度確認します およびvirbr0-nic
インターフェイスは実際に削除されます:
# ip link
出力例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff 4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
そうですね、KVMのデフォルトネットワークはなくなりました。
次に、新しいVMを作成するときに使用するKVMパブリックブリッジをセットアップしましょう。
br0
という名前の新しいブリッジインターフェースを作成します nmcli
を使用する コマンド:
# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
ブリッジインターフェースのIPアドレスを設定します:
# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manual
ブリッジインターフェースのゲートウェイを設定します:
# nmcli connection modify br0 ipv4.gateway 192.168.225.1
ブリッジインターフェイスのDNSを設定します:
# nmcli connection modify br0 ipv4.dns 192.168.225.1
次に、ネットワークインターフェイスカードの1つを取り外し、それをスレーブとしてブリッジに追加する必要があります。
サーバーにNICが1つしかなく、SSH経由でサーバーにアクセスしている場合、NICを削除すると接続が終了することに注意してください。サーバーのコンソールで次の手順を実行することをお勧めします。
たとえば、enp0s8
を追加します ブリッジインターフェースbr0
のスレーブとしてのインターフェース 。
ネットワークインターフェースを削除するにはenp0s8
、実行:
# nmcli connection del enp0s8
enp0s8
を置き換えます 自分のネットワークカードを使用します。
注: ブリッジにワイヤレスネットワークインターフェイスカードを使用しないでください。ほとんどのワイヤレスインターレースはブリッジングをサポートしていません。シームレスな接続のために、常に有線ネットワークインターフェースを使用してください!
次に、enp0s8
を追加します コマンドを使用してブリッジに移動します:
# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0
ここでは、ブリッジネットワークインターフェースbr0
ホストのネットワークインターフェースenp0s8
に接続されています 。ネットワークと一致する上記のネットワークインターフェースの名前を置き換えます。
ネットワークマネージャを再起動して、変更を有効にします。
# systemctl restart NetworkManager
可能であれば、システムを再起動することをお勧めします:
# reboot
サーバーにログインし、IPアドレスがブリッジインターフェイスに割り当てられているかどうかを確認します。
$ 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: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff 4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff 5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff inet 192.168.225.53/24 brd 192.168.225.255 scope global noprefixroute br0 valid_lft forever preferred_lft forever inet6 2409:4072:6084:198:df03:d9ed:62eb:df34/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::e8c8:e98b:7fef:5874/64 scope link noprefixroute valid_lft forever preferred_lft forever
上記の出力にあるように、ブリッジネットワークインターフェイス br0
IPアドレス192.168.225.53
が割り当てられています およびenp0s8
エントリにmaster br0
が追加されました エントリ。これは、enp0s8
を意味します 橋に属しています。
bridge
を使用することもできます ブリッジのステータスを表示するコマンド:
# bridge link show br0 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
ブリッジインターフェイスの作成に成功し、アクティブになっています。最後にもう1つ行う必要があります。
このブリッジインターフェイスをデフォルトのインターフェイスとして使用するようにKVMを設定する必要があります。これを行うには、XML
を作成します host-bridge.xml
というファイル :
# vi host-bridge.xml
次の行を追加します:
<network> <name>host-bridge</name> <forward mode="bridge"/> <bridge name="br0"/> </network>
次のコマンドを実行して、新しく作成されたブリッジを起動し、VMのデフォルトブリッジとして作成します。
# virsh net-define host-bridge.xml
# virsh net-start host-bridge
# virsh net-autostart host-bridge
ブリッジがアクティブであり、コマンドを使用して開始されているかどうかを確認します:
# virsh net-list --all
出力例:
Name State Autostart Persistent ------------------------------------------------ host-bridge active yes yes
おめでとう! CentOS8ヘッドレスサーバーにKVMを正常にインストールして構成しました。
2。 KVMゲストマシンを作成および管理する
コマンドラインから、またはコックピットやVirt-managerなどのKVM管理ツールを使用して、VMを作成および管理できます。詳細については、次のガイドを参照してください。
- Virshプログラムを使用してKVM仮想マシンを管理する方法
- コックピットWebコンソールを使用してKVM仮想マシンを管理する
- Virt-Managerを使用してKVM仮想マシンを管理する方法
3。仮想マシンのVirshコンソールアクセスを有効にする
KVMゲストを作成した後、SSH、VNCクライアント、Virt-viewer、Virt-manager、Cockpit Webコンソールなどを介してアクセスできます。ただし、virsh console
を使用してアクセスすることはできませんでした。 指図。 「virshconsole」を使用してKVMゲストにアクセスするには、次のガイドを参照してください。
- KVMゲストのVirshコンソールアクセスを有効にする方法
このブログの他のKVM関連ガイド
- Ubuntu20.04ヘッドレスサーバーにKVMをインストールして構成する
- OpenSUSETumbleweedにKVMをインストールして構成する
- LinuxでQcow2イメージを使用してKVM仮想マシンを作成する
- LinuxでVirtualboxVMをKVMVMに移行する方法
- LinuxでKVM仮想マシンのUEFIサポートを有効にする
- LinuxのKVMでネストされた仮想化を有効にする方法
- LinuxでVirt-topを使用して仮想化システムの統計を表示する
- KVM仮想マシンのIPアドレスを見つける方法
- KVMゲスト仮想マシンの名前を変更する方法
- Libguestfsを使用して仮想マシンのディスクイメージにアクセスして変更する
- Virt-builderを使用して仮想マシンイメージをすばやく構築する
- Virt-rescueを使用して仮想マシンをレスキューする方法
- LinuxでKVM仮想マシンのディスクサイズを拡張する方法
- KVMホストとゲストの間に共有フォルダーを設定する
- KVMLibvirtのデフォルトのストレージプールの場所を変更する方法
- [解決済み]ストレージファイルにアクセスできません、KVMLibvirtでアクセスが拒否されましたエラー
- LinuxでKVM仮想マシンをエクスポートおよびインポートする方法
結論
このガイドでは、CentOS8サーバーエディションにKVMをインストールして構成する方法について説明しました。
また、virsh
を使用してコマンドラインからKVM仮想マシンを作成および管理する方法についても説明しました。 ツールとCockpitおよびVirt-managerという名前のGUIツールを使用します。
最後に、KVM仮想マシンのvirshコンソールアクセスを有効にする方法を確認しました。
この段階では、CentOS8サーバーで完全に機能する仮想化環境が整っているはずです。