注意:
- 此教程在 Oracle 提供的免费实验室环境中提供。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成练习后,将这些值替换为特定于云环境的值。
在 Oracle Linux 上使用 KVM 创建 VM
简介
基于内核的虚拟机 (Kernel-based Virtual Machine,KVM) 是一个开源的 type-1(裸机)虚拟机管理程序。此功能允许主机系统(如 Oracle Linux 8)在受支持的硬件上运行时托管多个虚拟机 (Virtual Machine,VM) 或来宾。
本教程将部署 Oracle Linux 内核虚拟化管理器 (KVM) 来创建虚拟机。
目标
- 部署 KVM
- 为虚拟机部署 Cockpit
- 基于 ISO 创建虚拟机
- 使用 Oracle Cloud 映像创建虚拟机
先决条件
具有以下配置的任何 Oracle Linux 8 或更高版本系统:
- 具有 sudo 权限的非 root 用户
验证环境支持虚拟化
注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。
-
如果尚未连接,请打开一个终端并通过 ssh 连接到您的实例。
ssh oracle@<ip_address_of_instance>
-
运行以下命令以确定 CPU 类型。
grep -e 'vendor_id' /proc/cpuinfo
输出示例:
[oracle@ol-node01 ~]$ grep -e 'vendor_id' /proc/cpuinfo vendor_id : GenuineIntel vendor_id : GenuineIntel vendor_id : GenuineIntel vendor_id : GenuineIntel vendor_id : GenuineIntel vendor_id : GenuineIntel
此系统基于 Intel,由 GenuineIntel 的输出显示。
-
对于 Intel 系统,键入以下命令。
grep -e 'vmx' /proc/cpuinfo
命令输出中存在 vmx 标志表示此系统支持虚拟化。
-
检查装入的 KVM 模块。
lsmod | grep kvm
输出示例:
[oracle@ol-node01 ~]$ lsmod |grep kvm kvm_intel 262144 0 kvm 696320 1 kvm_intel irqbypass 16384 1 kvm
输出基于此系统的硬件显示 KVM 内核模块和 kvm_intel 处理器模块。默认情况下,这些模块应在现代 Linux 系统上加载。
安装和启动 KVM
-
安装与 Oracle Linux 虚拟化模块关联的软件包。
sudo dnf module install virt -y
此命令安装虚拟化软件包的集合,包括 libvirt、qemu-kvm 和其他依赖项。
-
安装
virt-install
和virt-viewer
。sudo dnf install virt-install virt-viewer -y
这将完成所需软件包集的安装。
-
验证主机是否已准备就绪并设置为运行 libvirt VM。
virt-host-validate
输出示例:
[oracle@ol-node01 ~]$ virt-host-validate QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible : PASS QEMU: Checking if device /dev/vhost-net exists : PASS QEMU: Checking if device /dev/net/tun exists : PASS QEMU: Checking for cgroup 'cpu' controller support : PASS QEMU: Checking for cgroup 'cpuacct' controller support : PASS QEMU: Checking for cgroup 'cpuset' controller support : PASS QEMU: Checking for cgroup 'memory' controller support : PASS QEMU: Checking for cgroup 'devices' controller support : PASS QEMU: Checking for cgroup 'blkio' controller support : PASS QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform) QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
如果所有检查 PASS,则系统将为创建的 VM 准备。如果有任何检查失败,请按照说明更正问题。如果有任何检查返回 WARN 的值,请考虑按照说明改进虚拟化功能。
-
启动
libvirtd
守护进程并使其在每次引导时自动启动。然后检查其状态以确认其已启动且正在运行。sudo systemctl enable --now libvirtd.service sudo systemctl status libvirtd.service
输出示例:
[oracle@ol-node01 ~]$ sudo systemctl enable --now libvirtd.service [oracle@ol-node01 ~]$ sudo systemctl status libvirtd.service * libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor pr> Active: active (running) since Mon 2022-06-13 21:28:19 GMT; 8s ago Docs: man:libvirtd(8) https://libvirt.org ...
输出指示服务已启用且正在运行。
设置 Cockpit Web 控制台以在 Oracle Linux 上管理 KVM
-
安装 cockpit-machines 扩展以基于 Libvirt 管理 VM。
sudo dnf install cockpit cockpit-machines –y
-
启动 cockpit 套接字并使其能够在系统引导时自动启动。
sudo systemctl enable --now cockpit.socket sudo systemctl status cockpit.socket
输出示例:
[oracle@ol-node01 ~]$ sudo systemctl enable --now cockpit.socket Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket -> /usr/lib/systemd/system/cockpit.socket. [oracle@ol-node01 ~]$ sudo systemctl status cockpit.socket * cockpit.socket - Cockpit Web Service Socket Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; enabled; vendor pres> Active: active (listening) since Mon 2022-06-13 21:39:24 GMT; 10s ago Docs: man:cockpit-ws(8) Listen: [::]:9090 (Stream) ...
输出指示服务已启用并正在监听。
-
要远程访问此站点,请为 cockpit 服务启用防火墙端口并重新加载防火墙配置以应用新更改。
sudo firewall-cmd --add-service=cockpit --permanent sudo firewall-cmd --reload
注:从 lunabox Desktop 上的第二个终端运行下一个命令。
-
在 lunabox 桌面上打开第二个终端,然后输入以下命令使用 ssh 为 Cockpit 创建本地端口转发。
ssh -L 9090:localhost:9090 oracle@<instance_ip_address>
-
在桌面上打开 Web 浏览器并浏览到 https://localhost:9090。
Cockpit Web 控制台使用自签名证书启用 HTTPS。
从浏览器收到警告后,单击 "Advanced"(高级)并接受连接。
-
以口令为
oracle
的oracle
用户身份登录。此时将显示 "Cockpit" 显示板。
-
单击“Limited Access(有限访问)”按钮获得管理权限。
-
关闭“Administration(管理)”访问窗口。
基于 ISO 创建虚拟机
-
单击左侧导航面板中的“Virtual Machines(虚拟机)”选项。
-
单击 "Create VM"(创建 VM)按钮。
-
请提供以下信息:
Name: OL-demo Connection: System Installation type: URL (ISO image or distro install tree) Installation source: https://yum.oracle.com/ISOS/OracleLinux/OL8/u6/x86_64/OracleLinux-R8-U6-x86_64-dvd.iso Operating system: Oracle Linux 8.6 Storage: Create new volume Size: 20 GiB Memory: 16 GiB Immediately start VM: check
-
单击“Create(创建)”开始。
-
从虚拟机列表中,单击 OL-demo 链接。
-
向下滚动以查看 VNC 控制台。
如果您速度足够快,您将看到包含安装 Oracle Linux 或测试此介质和安装选项的菜单。默认情况下,将在几秒钟后选择“Test(测试)”选项。安装程序将验证介质上的内容是否正确,然后启动安装程序。
-
安装程序引导后,会显示 "Welcome to Oracle Linux" 屏幕。通过选择安装过程的语言开始安装。
此实验不会继续执行安装过程。
注意:可以通过以下视频链接观看演示 Oracle Linux 安装过程的免费视频:安装 Oracle Linux 8
-
单击窗口右上角的“X”关闭 Web 浏览器。
使用 Oracle Cloud 映像创建虚拟机
注:请确保从云实例 (ol-node01) 终端窗口中输入以下命令。
-
转到 KVM 映像存储位置。
cd /var/lib/libvirt/images
-
下载 Oracle Linux VM 模板。
sudo curl -O https://yum.oracle.com/templates/OracleLinux/OL8/u6/x86_64/OL8U6_x86_64-kvm-b126.qcow
-
创建元数据文件。
cat << 'EOF' | sudo tee ~/meta-data > /dev/null instance-id: iid-local01 local-hostname: vm-01 EOF
-
创建用户数据文件。
cat << 'EOF' | sudo tee ~/user-data > /dev/null #cloud-config system_info: default_user: name: opc ssh_authorized_keys: - <paste_public_key_here> EOF
-
生成 SSH 密钥对
ssh-keygen -t rsa -b 4096
单击
Enter
可接受每个默认值。密钥对将写入用户主目录中的.ssh
目录。 -
将公钥复制到用户数据文件中。
SSHKEY=$(cat ~/.ssh/id_rsa.pub) sed -i "s|<paste_public_key_here>|${SSHKEY}|g" ~/user-data
-
生成 ISO 映像。
sudo genisoimage -output /var/lib/libvirt/images/vm-01.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
-
创建实例。
sudo cp /var/lib/libvirt/images/OL8U6_x86_64-kvm-b126.qcow /var/lib/libvirt/images/vm-01.qcow sudo virt-install --name vm-01 \ --memory 2048 \ --vcpus 2 \ --disk /var/lib/libvirt/images/vm-01.qcow,device=disk,bus=virtio \ --disk /var/lib/libvirt/images/vm-01.iso,device=cdrom \ --os-type linux --os-variant ol8.6 \ --virt-type kvm --graphics none \ --network network=default,model=virtio \ --noautoconsole \ --import
-
列出 VM。
sudo virsh list
-
检索
vm-01
虚拟机的 IP 地址。sudo virsh net-dhcp-leases --network default
注:根据虚拟机的启动速度,可能需要再次运行该命令以显示 IP 地址。
-
或者,可以基于 MAC 地址进行过滤。
sudo virsh domiflist vm-01
-
从上一个输出复制 MAC 地址并在以下命令中提供。
sudo virsh net-dhcp-leases --network default --mac <MAC_address>
-
使用
ssh
连接来验证虚拟机工作。ssh opc@<vm-01-ip_address>
输出示例:
[oracle@ol-node01 images]$ ssh opc@192.168.122.46 The authenticity of host '192.168.122.46 (192.168.122.46)' can't be established. ECDSA key fingerprint is SHA256:xcuVfQdoFDCC72i7plD0OfqDTSBG6QWhOm5ti4HIKEs. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.122.46' (ECDSA) to the list of known hosts. [opc@vm-01 ~]$ uname -a Linux vm-01 5.4.17-2136.307.3.1.el8uek.x86_64 #2 SMP Mon May 9 17:29:47 PDT 2022 x86_64 x86_64 x86_64 GNU/Linux
[可选] 从 Cockpit 仪表盘查看 VM
注:从 lunabox Desktop 上的终端运行下一个命令。
-
从 lunabox Desktop 终端窗口输入以下命令,以便使用 ssh 为 Cockpit 创建本地端口转发。
ssh -L 9090:localhost:9090 oracle@<instance_ip_address>
-
在桌面上打开 Web 浏览器并浏览到 https://localhost:9090。
-
以口令为
oracle
的oracle
用户身份登录。此时将显示 "Cockpit" 显示板。
-
如有必要,请单击“Limited Access(有限访问)”按钮以获取管理权限。
-
单击左侧导航面板中的“Virtual Machines(虚拟机)”选项。
-
从虚拟机列表中,单击 vm-01 链接。
-
根据需要浏览“概览”部分、“磁盘”部分、“网络接口”等。
注:由于
vm-01
虚拟机是使用带有virt-install
的--graphical none
选项创建的,因此控制台在 Cockpit 中未处于活动状态。
此实验结束。
详细信息:
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle 学习资源管理器。
有关产品文档,请访问 Oracle 帮助中心。
Create VMs with KVM on Oracle Linux
F58831-01
June 2022
Copyright © 2022, Oracle and/or its affiliates.