注意:

在 Oracle Linux 上使用 KVM 创建 VM

简介

基于内核的虚拟机 (Kernel-based Virtual Machine,KVM) 是一个开源的 type-1(裸机)虚拟机管理程序。此功能允许主机系统(如 Oracle Linux 8)在受支持的硬件上运行时托管多个虚拟机 (Virtual Machine,VM) 或来宾。

本教程将部署 Oracle Linux 内核虚拟化管理器 (KVM) 来创建虚拟机。

目标

先决条件

具有以下配置的任何 Oracle Linux 8 或更高版本系统:

验证环境支持虚拟化

注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。

  1. 如果尚未连接,请打开一个终端并通过 ssh 连接到您的实例。

    ssh oracle@<ip_address_of_instance>
    
  2. 运行以下命令以确定 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 的输出显示。

  3. 对于 Intel 系统,键入以下命令。

    grep -e 'vmx' /proc/cpuinfo
    

    命令输出中存在 vmx 标志表示此系统支持虚拟化。

  4. 检查装入的 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

  1. 安装与 Oracle Linux 虚拟化模块关联的软件包。

    sudo dnf module install virt -y
    

    此命令安装虚拟化软件包的集合,包括 libvirt、qemu-kvm 和其他依赖项。

  2. 安装 virt-installvirt-viewer

    sudo dnf install virt-install virt-viewer -y
    

    这将完成所需软件包集的安装。

  3. 验证主机是否已准备就绪并设置为运行 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 的值,请考虑按照说明改进虚拟化功能。

  4. 启动 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

  1. 安装 cockpit-machines 扩展以基于 Libvirt 管理 VM。

    sudo dnf install cockpit cockpit-machines –y
    
  2. 启动 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)
    ...
    

    输出指示服务已启用并正在监听。

  3. 要远程访问此站点,请为 cockpit 服务启用防火墙端口并重新加载防火墙配置以应用新更改。

    sudo firewall-cmd --add-service=cockpit --permanent
    sudo firewall-cmd --reload
    

    注:从 lunabox Desktop 上的第二个终端运行下一个命令。

  4. 在 lunabox 桌面上打开第二个终端,然后输入以下命令使用 ssh 为 Cockpit 创建本地端口转发。

    ssh -L 9090:localhost:9090 oracle@<instance_ip_address>
    
  5. 在桌面上打开 Web 浏览器并浏览到 https://localhost:9090。

    Cockpit Web 控制台使用自签名证书启用 HTTPS。

    accept_cert

    从浏览器收到警告后,单击 "Advanced"(高级)并接受连接。

  6. 以口令为 oracleoracle 用户身份登录。

    登录

    此时将显示 "Cockpit" 显示板。

  7. 单击“Limited Access(有限访问)”按钮获得管理权限。

    通道

  8. 关闭“Administration(管理)”访问窗口。

    克隆

基于 ISO 创建虚拟机

  1. 单击左侧导航面板中的“Virtual Machines(虚拟机)”选项。

  2. 单击 "Create VM"(创建 VM)按钮。

    VM

  3. 请提供以下信息:

    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
    

    VM

  4. 单击“Create(创建)”开始。

  5. 从虚拟机列表中,单击 OL-demo 链接。

    vmlist

  6. 向下滚动以查看 VNC 控制台。

    如果您速度足够快,您将看到包含安装 Oracle Linux 或测试此介质和安装选项的菜单。默认情况下,将在几秒钟后选择“Test(测试)”选项。安装程序将验证介质上的内容是否正确,然后启动安装程序。

    战利品

  7. 安装程序引导后,会显示 "Welcome to Oracle Linux" 屏幕。通过选择安装过程的语言开始安装。

    lang

    此实验不会继续执行安装过程。

    注意:可以通过以下视频链接观看演示 Oracle Linux 安装过程的免费视频:安装 Oracle Linux 8

  8. 单击窗口右上角的“X”关闭 Web 浏览器。

使用 Oracle Cloud 映像创建虚拟机

注:请确保从云实例 (ol-node01) 终端窗口中输入以下命令。

  1. 转到 KVM 映像存储位置。

    cd /var/lib/libvirt/images
    
  2. 下载 Oracle Linux VM 模板。

    sudo curl -O https://yum.oracle.com/templates/OracleLinux/OL8/u6/x86_64/OL8U6_x86_64-kvm-b126.qcow
    
  3. 创建元数据文件。

    cat << 'EOF' | sudo tee ~/meta-data > /dev/null
    instance-id: iid-local01
    local-hostname: vm-01
    EOF
    
  4. 创建用户数据文件。

    cat << 'EOF' | sudo tee ~/user-data > /dev/null
    #cloud-config
    
    system_info:
      default_user:
        name: opc
    
    ssh_authorized_keys:
      - <paste_public_key_here>
    EOF
    
  5. 生成 SSH 密钥对

    ssh-keygen -t rsa -b 4096
    

    单击 Enter 可接受每个默认值。密钥对将写入用户主目录中的 .ssh 目录。

  6. 将公钥复制到用户数据文件中。

    SSHKEY=$(cat ~/.ssh/id_rsa.pub)
    sed -i "s|<paste_public_key_here>|${SSHKEY}|g" ~/user-data
    
  7. 生成 ISO 映像。

    sudo genisoimage -output /var/lib/libvirt/images/vm-01.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
    
  8. 创建实例。

    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
    
  9. 列出 VM。

    sudo virsh list
    
  10. 检索 vm-01 虚拟机的 IP 地址。

    sudo virsh net-dhcp-leases --network default
    

    注:根据虚拟机的启动速度,可能需要再次运行该命令以显示 IP 地址。

  11. 或者,可以基于 MAC 地址进行过滤。

    sudo virsh domiflist vm-01
    
  12. 从上一个输出复制 MAC 地址并在以下命令中提供。

    sudo virsh net-dhcp-leases --network default --mac <MAC_address>
    
  13. 使用 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 上的终端运行下一个命令。

  1. 从 lunabox Desktop 终端窗口输入以下命令,以便使用 ssh 为 Cockpit 创建本地端口转发。

    ssh -L 9090:localhost:9090 oracle@<instance_ip_address>
    
  2. 在桌面上打开 Web 浏览器并浏览到 https://localhost:9090。

  3. 以口令为 oracleoracle 用户身份登录。

    登录

    此时将显示 "Cockpit" 显示板。

  4. 如有必要,请单击“Limited Access(有限访问)”按钮以获取管理权限。

  5. 单击左侧导航面板中的“Virtual Machines(虚拟机)”选项。

  6. 从虚拟机列表中,单击 vm-01 链接。

  7. 根据需要浏览“概览”部分、“磁盘”部分、“网络接口”等。

    注:由于 vm-01 虚拟机是使用带有 virt-install--graphical none 选项创建的,因此控制台在 Cockpit 中未处于活动状态。

此实验结束。

详细信息:

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle 学习资源管理器。

有关产品文档,请访问 Oracle 帮助中心