如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机


原文地址:如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

本文分享了如何在CentOS 8中使用KVM设置和管理虚拟化环境。同时还分享了如何使用命令行在物理服务器上安装和管理虚拟机(VM)。

基于Linux内核的虚拟机(KVM)是免费的开放源代码虚拟化软件,用于CentOS8。KVM将您的服务器转变为虚拟机监控程序。

确保在服务器的BIOS中启用了虚拟化技术(VT)。您还可以运行以下命令来测试CPU是否支持Intel VT和AMD-V虚拟化技术: KVM仅支持Intel / AMD 64位和IBM z13,Power 8/9 CPU以及您的主机VM的更高体系结构。

$ lscpu | grep Virtualization
## Test for both Intel/AMD CPU that support KVM ##
$ sort -u
Virtualization: VT-x

在CentOS 8服务器上安装KVM的步骤

请使用su命令或sudo命令成为root用户:

$ sudo -i
## OR ##
$ su -

步骤1:安装kvm

运行以下dnf命令/ yum命令:

dnf module install virt

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

然后安装工具以配置新的虚拟机(VM):

# dnf install virt-install virt-viewer libguestfs-tools

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

使用systemctl命令启用并启动libvirtd服务:

# systemctl enable libvirtd.service
# systemctl start libvirtd.service
# systemctl status libvirtd.service

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

第2步:验证您的kvm安装

确保使用lsmod命令和grep命令加载了KVM Linux内核模块(驱动程序):

# lsmod | grep -i kvm

步骤3:配置桥接网络

默认情况下,libvirtd配置的基于dnsmsq的网桥称为virbr0。您可以使用以下简单命令进行验证: 

# virsh net-info default
# nmcli device
# nmcli connection show

libvirtd使用轻量级DHCP和缓存DNS服务器dnsmasq。我们可以使用cat命令或grep命令/ egrep命令查看包含IP范围的配置文件:

# cat /var/lib/libvirt/dnsmasq/default.conf
# egrep '^(dhcp-range|interface)' /var/lib/libvirt/dnsmasq/default.conf
## use the ip command to verify info about the virbr0 ##
# ip a show virbr0
# ip r

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

如果您希望虚拟机可用于LAN上的其他服务器,请在连接到LAN的服务器上设置网桥。更新您的nic配置文件。这是我的预配置的br0接口,该接口被eno1以太网奴役:

 vi /etc/sysconfig/network-scripts/ifcfg-br0

br0 config:

## my lan 192.168.2.0/24 ##
## Bridge br0 config, only IPv4 and no IPv6 here for now ##
STP=no
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
UUID=dd51480e-fbac-41a8-b5e6-ea3d097f5059
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.2.19
PREFIX=24
GATEWAY=192.168.2.254
DNS1=192.168.2.254
DOMAIN=sweet.home
IPV6_DISABLED=yes

和eno1以太网的

# vi /etc/sysconfig/network-scripts/ifcfg-bridge-slave-eno1

配置:eno1 config:

TYPE=Ethernet
NAME=bridge-slave-eno1
UUID=f43a8688-81f0-4860-91d4-f8f41efe2d10
DEVICE=eno1
ONBOOT=yes
BRIDGE=br0

重新启动网络服务(警告ssh命令将断开连接,最好重新启动Linux机器): 使用nmcli命令验证它。 示例输出:

# systemctl restart NetworkManager.service
## OR ##
# nmcli con up br0
# nmcli connection delete eno1

使用nmcli命令验证

# nmcli device

输出:

DEVICE      TYPE      STATE      CONNECTION        
br0         bridge    connected  br0               
virbr0      bridge    connected  virbr0            
eno1        ethernet  connected  bridge-slave-eno1 
lo          loopback  unmanaged  --                
virbr0-nic  tun       unmanaged  --                
wlp1s0      wifi      unmanaged  --  

步骤5:创建第一个虚拟机/guest VM

我将创建一个全新的CentOS 8.x VM。首先,使用wget命令/ lftp命令获取CentOS 8.x最新 的ISO映像。使用sha256sum命令验证ISO映像:

# cd /var/lib/libvirt/boot/
# wget https://mirrors.edge.kernel.org/centos/8/isos/x86_64/CentOS-8.1.1911-x86_64-boot.iso

使用sha256sum命令验证ISO镜像:

# wget https://mirrors.edge.kernel.org/centos/8/isos/x86_64/CHECKSUM
# sha256sum --ignore-missing -c CHECKSUM

创建CentOS 8.x VM

在下面的例子,我创建的CentOS 8.x中有1GB RAM,1个CPU核心,1个NIC和20GB硬盘空间VM,输入:

# virt-install \
--virt-type=kvm \
--name centos8-vm \
--memory 1024 \
--vcpus=1 \
--os-variant=rhel8.1 \
--cdrom=/var/lib/libvirt/boot/CentOS-8.1.1911-x86_64-boot.iso \
--network=bridge=br0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos8.qcow2,size=20,bus=virtio,format=qcow2

配置VNC和完整的CentOS 8 VM安装,SSH从另一终端输入: 

# virsh dumpxml centos8-vm | grep vnc
    <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

然后,向下的端口值(即5900)。您需要使用SSH客户端设置隧道,并使用VNC客户端访问远程VM的VNC显示。在Linux和Unix客户端/ MacBook Pro桌面上键入以下SSH端口转发命令: 

{vivek@linux-desktop:~ }$ ssh vivek@192.168.2.19 -L 5900:127.0.0.1:5900

现在,您已经建立了ssh隧道,将VNC客户端指向127.0.0.1(localhost)地址和端口5900,如下所示:

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

您应该看到CentOS Linux 8 guest虚拟机安装屏幕,如下所示:

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

现在,按照屏幕上的说明进行操作并安装CentOS8。安装完成后,继续并单击重新启动按钮。远程服务器关闭了与我们的VNC客户端的连接。您可以通过KVM客户端重新连接以配置服务器的其余部分,包括基于SSH的会话,防火墙,网络等等。

如何创建RHEL 8.x VM

确保您在本地存储了rhel.iso。在此示例中,我将创建具有2GB RAM,2个CPU内核,1个NIC和40GB磁盘空间的RHEL 8.x VM,输入:

# virt-install \
--virt-type=kvm \
--name rhe8-server \
--memory 2048 \
--vcpus=2 \
--os-variant=rhel8.1 \
--cdrom=/var/lib/libvirt/boot/rhel-server.iso \
--network=bridge=br0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/rhel8.qcow2,size=40,bus=virtio,format=qcow2

 要获取vnc端口信息,请通过ssh从另一个终端登录并键入: 

$ sudo virsh dumpxml rhel8-server | grep vnc
    <graphics type='vnc' port='5906' autoport='yes' listen='127.0.0.1'>

您需要使用SSH客户端设置隧道,使用VNC客户端访问远程vnc VM显示。从客户端/桌面键入以下SSH端口转发命令: 

$ ssh vivek@192.168.2.19 -L 5906:127.0.0.1:5906

建立ssh隧道后,将VNC客户端指向127.0.0.1(localhost)地址和端口5906,以继续进行RHEL 8.x安装。

第6步:使用virt-builder构建guest镜像

可以使用virt-builder命令在CentOS 8上快速构建虚拟机。

列出图片

# virt-builder --list
# virt-builder --list | egrep -i 'debian|ubuntu'
# virt-builder --list | egerp -i centos

编译Ubuntu 18.04 LTS vm

首先, 设置shell变量:

vm="ubuntu-vm1"                  # VM name
os="ubuntu-18.04"                # OS    
tz="Asia/Kolkata"                # Time zone
ram="1024"                       # VM RAM 
disk="10G"                       # VM Disk Size
vcpu="1"                         # Number of Virtual CPUs
key=~/.ssh/id_rsa.pub            # SSH Pub key
pwd="Encrypted_PASSWORD_HERE"    # Use 'mkpasswd --method=sha512crypt' to create Encrypted password
bridge="br0"                     # Network bridge name such as 'br0' or 'virbr0'
ostype="ubuntu18.04"             # Run 'osinfo-query os' to get exact varient

现在,根据变量快速构建虚拟机映像:

# virt-builder "${os}" \
--hostname "${vm}" \
--network \
--timezone "${tz}" \
--size=${disk} \
--format qcow2 -o /var/lib/libvirt/images/${vm}-disk01.qcow2 \
--update \
--firstboot-command "dpkg-reconfigure openssh-server" \
--firstboot-command "useradd -p ${pwd} -s /bin/bash -m -d /home/vivek -G sudo vivek" \
--edit '/etc/default/grub:s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"/' \
--ssh-inject "root:file:${key}" \
--run-command update-grub

示例输出:

[   2.0] Downloading: http://libguestfs.org/download/builder/ubuntu-18.04.xz
[   2.4] Planning how to build this image
[   2.4] Uncompressing
[   7.9] Resizing (using virt-resize) to expand the disk to 10.0G
[  20.8] Opening the new disk
[  24.4] Setting a random seed
virt-builder: warning: random seed could not be set for this type of guest
[  24.4] Setting the hostname: ubuntu-vm1
[  25.1] Setting the timezone: Asia/Kolkata
[  25.2] Updating packages
[ 138.7] Installing firstboot command: dpkg-reconfigure openssh-server
[ 138.8] Installing firstboot command: useradd -p $6$XoUElABFFfTFr4/f$dGYZ2MCb2QcMuKQ2RmE./U0v7mhr2LFd4rbvOMdbjPCWwiyOMuirQagJ.9hBobz9Dy61AXS8oeTabem/H5YhB1 -s /bin/bash -m -d /home/vivek -G sudo vivek
[ 138.8] Editing: /etc/default/grub
[ 138.9] SSH key inject: root
[ 139.7] Running: update-grub
[ 139.9] Setting passwords
virt-builder: Setting random password of root to SzzVUrAhaYRUiVJj
[ 140.6] Finishing off
                   Output file: /var/lib/libvirt/images/ubuntu-vm1-disk01.qcow2
                   Output size: 10.0G
                 Output format: qcow2
            Total usable space: 9.8G
                    Free space: 7.9G (81%)

请记下随机root密码。现在,我们的自定义VM映像已使用给定的选项构建。让我们安装VM: 

# virt-install --import --name "${vm}" \
--ram "${ram}" \
--vcpu "${vcpu}" \
--disk path=/var/lib/libvirt/images/${vm}-disk01.qcow2,format=qcow2 \
--os-variant "${ostype}" \
--network=bridge=${bridge},model=virtio \
--noautoconsole

列出VM: 

 virsh list

使用控制台登录 

# virsh console ${vm}

由于我们注入了ssh密钥,请输入:

## this will only work if your br0 dhcpd also provide name resoution via dns ##
# host $vm
# ssh root@vm-ip-here
# ssh root@${vm}

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

我们可以使用virt-builder构建各种本地或云使用的VM,通常在几分钟或更短的时间内。然后,我们使用virt-install在CentOS 8无头服务器上安装KVM。

步骤7:使用云端图片

出于学习目的或构建单个VM的考虑,可以采用手动安装方法。但是,您是否需要部署大量VM?尝试云图像。您可以根据需要修改预构建的云映像。例如,我们可以使用Cloud-init来添加用户,安装ssh密钥,设置时区等,它是事实上的多分发软件包,用于处理云实例的早期初始化。让我们看看如何使用具有1024MB内存,20GB磁盘空间和一个vCPU的云映像创建CentOS 8 VM。

下载CentOS 8云镜像

# cd /var/lib/libvirt/boot
# wget https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2
# wget https://cloud.centos.org/centos/8/x86_64/images/CHECKSUM
# sha256sum --ignore-missing -c CHECKSUM

使用mkdir命令创建所需的目录

# D=/var/lib/libvirt/images
# VM=centos8-vm1 ## your vm goes name ##
# mkdir -vp $D/$VM
mkdir: created directory '/var/lib/libvirt/images/centos8-vm1'

创建元数据文件

# cd $D/$VM
# vi meta-data

附加以下配置:

instance-id: centos8-vm1
local-hostname: centos8-vm1

创建用户数据文件

我将使用ssh键登录到VM。因此,请确保已安装ssh键:

# ssh-keygen -t ed25519 -C "CentOS 8 host server login ssh key"

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

有关更多信息,请参见“如何在CentOS8系统上设置SSH密钥”。如下编辑用户数据:

# cd $D/$VM
# vi user-data

进行如下 添加(根据您的设置替换主机名,用户,ssh授权密钥):

#cloud-config
 
# Hostname management
preserve_hostname: False
hostname: centos8-vm1
fqdn: centos8-vm1.sweet.home
 
# Users
users:
    - default
    - name: vivek
      groups: ['wheel']
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      ssh-authorized-keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4Owk8inCz5ZnhWSiP2Y5wfVKTFOLTFOJ0K/sC2egDF CentOS 8 host server login ssh key
 
# Configure where output will go
output:
  all: ">> /var/log/cloud-init.log"
 
# configure interaction with ssh server
ssh_genkeytypes: ['ed25519', 'rsa']
 
# Install my public ssh key to the first user-defined user configured
# in cloud.cfg in the template (which is centos for CentOS cloud images)
ssh_authorized_keys:
  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4Owk8inCz5ZnhWSiP2Y5wfVKTFOLTFOJ0K/sC2egDF CentOS 8 host server login ssh key
 
# set timezone for VM
timezone: Asia/Kolkata
 
# Remove cloud-init 
runcmd:
  - systemctl stop NetworkManager.service && systemctl start NetworkManager.service
  - dnf -y remove cloud-init

验证用户数据是否存在语法错误:

# cloud-init devel schema --config-file user-data

复制云镜像

# cd $D/$VM
# cp -v /var/lib/libvirt/boot/CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2 $VM.qcow2
'/var/lib/libvirt/boot/CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2' -> 'centos8-vm1.qcow2'

创建20GB磁盘映像

# cd $D/$VM
# qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G
# virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
# mv -f $VM.new.image $VM.qcow2
# ls -l

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

创建一个cloud-init ISO文件

# mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

创建一个pool

# virsh pool-create-as --name $VM --type dir --target $D/$VM

通过云映像安装CentOS 8 VM

# cd $D/$VM
# virt-install --import --name $VM \
--memory 1024 --vcpus 1 --cpu host \
--disk $VM.qcow2,format=qcow2,bus=virtio \
--disk $VM-cidata.iso,device=cdrom \
--network bridge=br0,model=virtio \
--os-variant=rhel8.1 \
--graphics spice \
--noautoconsole

删除不需要的文件:

# cd $D/$VM
# virsh change-media $VM sda --eject --config
Successfully ejected media.
## use the rm command to deleted files ##
# rm -v meta-data user-data $VM-cidata.iso
rm: remove regular file 'meta-data'? y
removed 'meta-data'
rm: remove regular file 'user-data'? y
removed 'user-data'
rm: remove regular file 'centos8-vm1-cidata.iso'? y
removed 'centos8-vm1-cidata.iso'

找出名为centos8-vm1的KVM VM的IP地址

如果您使用的是'br0',请使用host命令:

# host $VM
centos8-vm1.sweet.home has address 192.168.2.212

使用默认的virbr0 bride interface时, 要查找Linux KVM来宾虚拟机的IP地址:

# virsh net-dhcp-leases default

验证–登录到centos8-vm

使用ssh命令:

# ssh vivek@$VM
# ssh vivek@192.168.2.212

如何在CentOS 8上安装KVM以及如何在物理服务器上安装和管理虚拟机

关于有用的virsh KVM管理命令的说明

让我们看一些管理虚拟机的有用命令。

列出所有虚拟机

# virsh list --all

获取虚拟机信息

# virsh dominfo vmName
# virsh dominfo centos8-vm1

停止/关闭VM

# virsh shutdown centos8-vm1

启动虚拟机

# virsh start centos8-vm1

将VM标记为在CentOS 8服务器启动时自动启动

# virsh autostart centos8-vm1

重启(软安全重启)虚拟机

# virsh reboot ubuntu-vm1

重置(硬重置/不安全)VM 

virsh reset ubuntu-vm1

删除虚拟机

# virsh shutdown centos8-vm1
# virsh undefine centos8-vm1
# virsh pool-destroy centos8-vm1
# D=/var/lib/libvirt/images
# VM=centos8-vm1.img
# rm -ri $D/$VM

查看virsh命令类型的完整列表

# virsh help | less
# virsh help | grep reboot

结论

在本教程中,您学习了如何在CentOS 8 Linux服务器上安装KVM以及如何使用virt-install来配置新的guest VM。此外,您还学会了使用virt-builder快速构建新的虚拟机。

评论

登录后评论

服务器优惠活动

Top