Part 3 - 服务器虚拟化部署

2021-09-15
10分钟阅读时长

«返回课程汇总页面

【版本】

当前版本号v20221105

版本修改说明
v20221105增加常见问题3
v20221015增加更多的说明和导航标题,增加常见问题解决办法
v20221014增加常见问题,解决apic不支持的问题和一些命令错误
v20220408修复切换到D盘的命令
v20211011增加网卡配置说明
v20211005修正centos-vm的网络配置
v20211003修正cirros的网卡配置代码
v20210930增加一些命令说明
v20210928增加 VMWare Workstation 和 AMD CPU的相关命令和说明
v20210915初始化版本

【实验名称】实验3.1 KVM 的安装使用

【实验目的】

  • 掌握KVM的安装和使用

【实验环境】

  • CentOS 7.X
  • FinalShell

【实验资源】

  • cirros 磁盘文件。
  • vnc viewer
链接:https://pan.baidu.com/s/1kw7nT7dbonUTSlPqIHVwhQ 
提取码:heis

【实验步骤】

开启虚拟化嵌套

如果你使用的是VMWare Workstation Pro,仅需要勾选以下选项,请忽略步骤1-3。

  1. 启用虚拟化配置。使用管理员权限进入 Windows 系统的命令行
  • “Win+R”键可以快速调出运行窗口
  • 输入“cmd”、
  • 同时按下“Ctrl+Shift+ENter”键启动管理员权限的命令行窗口
  1. 在 Windows 的命令行窗口输入以下命令。
  • 修改以下D:\"Program Files (x86)"\Oracle\VirtualBox路径为你的 Virtualbox 安装路径。
d:
cd D:\"Program Files (x86)"\Oracle\VirtualBox

如果你安装在d盘,需要先输入 d: 切换到D盘,再运行 cd 命令 VirtualBox 的安装路径可以通过桌面的 VirtualBox 快捷方式打开

  • 执行以下命令启用你的虚拟机的虚拟化扩展特性。以下"Tmpl"需要修改为你的虚拟机名称。
VBoxManage.exe modifyvm "Tmpl" --nested-hw-virt on
  1. 打开 Virtualbox,查看虚拟化选项是否已经启用。

提升虚拟机CPU和内存配置

  1. 为了运行 KVM 虚拟机避免卡顿,修改虚拟机的处理器数量为2。内存为2G。

检查 CPU 是否支持虚拟化特性

  1. 启动虚拟机,打开 FinalShell,使用 root 用户进行登录。

  2. 查看是否有内容输出

grep 'vmx\|svm\|lm' /proc/cpuinfo
  • 正常输出类似以下信息,如果有信息输出带有 vmx 或者 svm 字符(FinalShell 会标红色),就说明支持虚拟化指令;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。
  • 一般英特尔(Intel)的 CPU 会有 vmx 字符输出;AMD 的 CPU 会有 svm 字符输出;lm(KVM仅支持x84_64平台,lm即64位)
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single tpr_shadow flexpriority fsgsbase avx2 invpcid rdseed clflushopt md_clear flush_l1d

加载 KVM 模块

  1. 确保BIOS里开启虚拟化功能,查看是否已加载KVM模块。
modprobe kvm
lsmod | grep kvm
  • 正常情况下输出以下信息,均属于正常输出。
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
kvm_amd             170086  0
kvm                   566340  1 kvm_amd
irqbypass              13503  1 kvm
kvm                   637289  0 
irqbypass              13503  1 kvm

安装桥接网络工具

  1. 安装桥接网络工具,用于配置桥接网络。
yum -y install bridge-utils
  1. 重启系统网络服务
systemctl restart network

关闭防火墙和一些安全设定

  1. 关闭防火墙
systemctl stop firewalld  
systemctl disable firewalld

systemctl stop 表示后台停止服务 systemctl start 表示后台启动服务 systemctl disable 表示禁止开机启动服务 systemctl enable 表示允许开机启动服务

  • 查看防火墙状态是否关闭(inactive)
systemctl status firewalld
  1. 关闭 SELinux
setenforce 0

安装 KVM 和相关管理工具

  1. 安装 KVM 和相关管理工具
yum install qemu-kvm libvirt qemu-kvm-tools qemu-img virt-install virt-manager virt-viewer -y
  1. 启用 libvirtd 服务。
systemctl enable libvirtd
systemctl start libvirtd
systemctl status libvirtd

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。 libvirtd 是服务器端 libvirt 的后台服务进程。

  1. 检查 KVM 是否安装成功。运行以下命令查看虚拟机系统列表。
virsh -c qemu:///system list
  • 正常情况会返回
Id    Name                         State
----------------------------------------------------

配置网桥网络

  1. 接下来我们将配置网卡的桥接,用于连接KVM上的虚拟机。首先进入以下目录。
cd /etc/sysconfig/network-scripts/
  1. 查看你的网卡名称。
ls |grep ifcfg-
  1. 复制你当前网卡配置文件。其中ifcfg-enp0s3替换为你的网卡名称(通常使用VMWare Workstation 的默认网卡配置名称为 ifcfg-ens33)。
cp ifcfg-enp0s3 ifcfg-br0
  1. 修改复制出来的ifcfg-br0网卡配置文件,配置为桥接网卡。
vi /etc/sysconfig/network-scripts/ifcfg-br0
  • 修改TYPE="Ethernet"TYPE="Bridge"
  • 修改NAME="enp0s3"NAME="br0"
  • 修改DEVICE="enp0s3"DEVICE="br0"
  • UUID= 这一行行首添加#进行注释

修改以后内容类似以下:

TYPE="Bridge"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"
#UUID="015214e3-3bda-4a8c-b201-05168f20343b"
DEVICE="br0"
ONBOOT="yes"
IPADDR="10.0.0.70"
PREFIX="24"
GATEWAY="10.0.0.254"
DNS1="223.5.5.5"
IPV6_PRIVACY="no"

桥接网卡:桥接技术通常用于给网卡再生成一个逻辑网口,可以让虚拟机连接新的网口。

  1. 修改ifcfg-enp0s3网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
  • 在第2行新增一行,输入BRIDGE=br0
  • IPADDR= 这一行行首添加#进行注释
  • PREFIX= 这一行行首添加#进行注释
  • GATEWAY= 这一行行首添加#进行注释
  • DNS1= 这一行行首添加#进行注释

修改以后内容类似以下:

TYPE="Ethernet"
BRIDGE=br0
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="015214e3-3bda-4a8c-b201-05168f20343b"
DEVICE="enp0s3"
ONBOOT="yes"
#IPADDR="10.0.0.70"
#PREFIX="24"
#GATEWAY="10.0.0.254"
#DNS1="223.5.5.5"
IPV6_PRIVACY="no"
  1. 重启系统网络服务
systemctl restart network
  1. 查看桥接网卡
brctl show

brctl 是以太网桥接管理命令

  • 正常情况会显示类似信息
bridge name     bridge id               STP enabled     interfaces
br0             8000.080027b70551       no              enp0s3
virbr0          8000.525400e4b791       yes             virbr0-nic
  1. 查看所有网卡信息
 ifconfig|grep 'br0\|enp0s3'

没有此命令可以通过yum install net-tools -y来安装

  • 正常情况下可以看到以下输出,多出来了br0virbr0网卡。其中br0是我们新建的桥接网卡。virbr0是 KVM 创建的虚拟桥接网卡。
  • 三个网卡的状态都应该是UP,表示正常工作状态。
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

新建 KVM 虚拟机 cirros

  1. 新建一个目录用于保存 KVM 虚拟机文件,并开放授权访问。
mkdir /kvm-images
chmod 777 /kvm-images
  1. 进入/kvm-images目录,上传cirros-0.4.0-x86_64-disk.img镜像文件。
cd  /kvm-images
rz

rz 命令用于上传文件,如果没有可以用以下命令安装

yum install lrzsz -y
  1. 修改cirros-0.4.0-x86_64-disk.img镜像文件权限。
chmod 777 /kvm-images/cirros-0.4.0-x86_64-disk.img

CirrOS 是一个迷你的 Linux 镜像,启动非常快,通常用于虚拟机测试。

  1. 使用KVM 创建一个虚拟机。
virt-install --connect=qemu:///system --name=cirros --ram=256 --vcpus=1 --disk path=/kvm-images/cirros-0.4.0-x86_64-disk.img,format=qcow2 --import --bridge=br0  --vnc --vncport=5920 --vnclisten=0.0.0.0 --check path_in_use=off

命令解析:–name=虚拟机名称 –ram=内存大小 –vcpus=虚拟处理器核数 –disk path=虚拟磁盘地址 format=磁盘格式 –bridge=连接的网桥 –vncport=VNC的连接端口 –vnclisten=VNC监听地址

创建过程中如果出现“ERROR unsupported format character ‘�’ (0xffffffe7) at index 47”,请忽略,这是软件的bug,不会影响创建的结果。

  1. 使用命令查看cirros虚拟机的状态。
virsh list --all
  1. 如果cirros虚拟机的状态为关闭,可以使用以下命令启动。
virsh start cirros
  1. 使用以下命令查看cirros虚拟机的VNC服务器进程端口5920是否有信息输出。
yum install net-tools -y
netstat -tulpn|grep 5920
  1. 在宿主机 Windows 系统安装 VNC Viewer,过程略。

  2. 打开 VNC Viewer, 输入10.0.0.70:5920(注意这里的英文的冒号!)进行连接。

  3. 在 VNC Viewer 使用以下账号登录cirros虚拟机。

用户名:cirros
密码:gocubsgo
  1. 修改cirros网卡设置。注意以下命令是在 VNC Viewer 下执行。
sudo vi /etc/network/interfaces
  1. 修改网卡配置。注意以下命令是在 VNC Viewer 下执行。
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.0.0.71
netmask 255.255.255.0
gateway 10.0.0.254
  1. 重启网卡。注意以下命令是在 VNC Viewer 下执行。
sudo ifdown eth0 & sudo ifup eth0
  1. 回到 Finalshell,在宿主机CentOS输入以下内容,测试能否连通cirros
ping 10.0.0.71

提示:ping命令可以使用 Ctrl+C 组合键来中止。

  • 正常连通应该有类似以下信息返回
PING 10.0.0.71 (10.0.0.71) 56(84) bytes of data.
64 bytes from 10.0.0.71: icmp_seq=1 ttl=64 time=1.52 ms
64 bytes from 10.0.0.71: icmp_seq=2 ttl=64 time=0.883 ms
  • 无法连通情况会返回如下消息
From 10.0.0.71 icmp_seq=1 Destination Host Unreachable
  1. Finalshell 使用 ssh 命令连接cirros,并使用以上 cirros账号进行登录。
ssh cirros@10.0.0.71
  1. Finalshell登录进入cirros虚拟机以后输入以下命令。请替换以下输出内容为你的学号和姓名拼音。
echo 你的学号和姓名拼音
  1. Finalshell输入以下命令,退出cirros
exit
  1. Finalshell输入以下命令,关闭cirros
virsh shutdown cirros
  1. Finalshell输入以下命令,查看cirros状态。
virsh list --all

【实验名称】实验3.2 KVM 安装 CentOS(选做,加分)

【实验目的】

  • 掌握 KVM 安装CentOS

【实验环境】

  • CentOS 7.X
  • FinalShell

【实验资源】

  • CentOS 7.9 Minimal iso镜像文件

【实验步骤】

  1. 创建一个新的目录,用于 KVM 安装 CentOS。
mkdir /kvm-images/centos-vm
chmod 777 /kvm-images/centos-vm
  1. 进入刚创建的目录,上传CentOS-7-x86_64-Minimal-2009.iso到该目录,并修改权限为777。
cd /kvm-images/centos-vm

上传可以使用rz命令,或者直接使用 FinalShell 上传

  1. 创建虚拟磁盘,并格式化。
qemu-img create -f qcow2 /kvm-images/centos-vm/centos-vm.qcow2 5G
  • 正常会返回类似以下信息
Formatting '/kvm-images/centos-vm/centos-vm.qcow2', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 lazy_refcounts=off
  1. 修改磁盘和镜像文件的权限为777。
chmod 777 /kvm-images/centos-vm/CentOS-7-x86_64-Minimal-2009.iso
chmod 777 /kvm-images/centos-vm/centos-vm.qcow2
  1. 使用以下命令安装 CentOS,虚拟机名称为centos-vm
virt-install --name centos-vm \
--ram=1024 --arch=x86_64 --vcpus=1 \
--check-cpu --os-type=linux \
--os-variant='rhel7' -c /kvm-images/centos-vm/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/kvm-images/centos-vm/centos-vm.qcow2,device=disk,bus=virtio,size=6,format=qcow2 \
--bridge=br0 --noautoconsole --vnc --vncport=5922 --vnclisten=0.0.0.0
  1. Finalshell输入以下命令,查看centos-vm状态。
virsh list --all
  1. 使用 VNCViewer 连接10.0.0.70:5922。可能窗口加载会比较慢。稍等一会将会出现 CentOS 的安装界面。

  2. 安装选择语言,可以参考 Part1。

  3. 时区设置部分参考以下步骤。

  4. 语言设置部分参考以下步骤。

  5. 禁用 KDUMP。

  6. 磁盘分区如下,步骤参考Part1。

swap分区:512M
/boot 分区:300M
/ 根分区:剩余所有空间
  1. 网卡设置部分。

  2. 开始安装,此过程可能需要三小时以上,实验时请适当评估时间。

  3. 设置以下2个用户。

#root用户
用户名:root
密码:123456

#cdcvm用户
用户名:cdcvm
密码123456
  1. 安装完成以后,请分别使用 VNC Viewer 或 SSH 登录centos-vm虚拟机。

【常用命令】

virsh

  • 查看正在运行的 KVM 的虚拟机
virsh list
  • 查看所有状态的 KVM 的虚拟机
virsh list --all
  • 启动 KVM 虚拟机
virsh start 虚拟机名
  • 正常关闭 KVM 虚拟机
virsh shutdown 虚拟机名
  • 立即中止 KVM 虚拟机(相当于断电)
virsh destroy 虚拟机名
  • 移除 KVM 虚拟机
virsh undefine 虚拟机名
  • 编辑 KVM 虚拟机配置
virsh edit 虚拟机名
  • 重启虚拟机
virsh reboot 虚拟机名
  • 虚拟机随宿主机启动
virsh autostart 虚拟机名

【常见问题】

1. cirros 虚拟机无法正常启动,提示not syncing: I0-APIC + timer doesn't work的错误。

答:需要通过修改内核启动参数,跳过 APIC 检查。

  • (1)重新启动cirros
virsh destroy cirros
virsh start cirros
  • (2)使用 VNC 连接10.0.0.70:5920
  • (3)在进入 grub 引导界面后,不断按下Esc键,随即会跳转到内核参数编辑界面。
  • (4)进入内核参数编辑界面,按下e键进行编辑。
  • (5)按方向键下,选中kernel,按下e键进行编辑。
  • (6)在现有参数基础上加上以下参数(参数要有空格隔开),禁止系统进行时间检查和 APIC检查。编辑完按下Enter
 no_timer_check noapic

  • (7)按下b键重新启动,应该可以进入到 cirros 系统登录界面。

  • (8)进入 cirros 系统以后,编辑内核启动参数,实现以后每次启动都禁用时间检查。

sudo vi /boot/grub/menu.lst

  • (9)进入 cirros 系统以后,编辑内核启动参数,实现以后每次启动都禁用时间检查。
sudo vi /boot/grub/menu.lst
  • 找到console=XXXX字样,在后面加上以下参数,并保存。
 no_timer_check noapic

  • (10)编辑网络检查的启动脚本S40network
sudo vi /etc/init.d/S40network
  • 在第9行开头加入#注释,减少 DHCP 获取时间。

  • (11)重启 cirros
sudo reboot

2. 使用 ping 命令无法连通 KVM 虚拟机 cirros,ping 10.0.0.71失败。

答:

  • (1)首先查看 cirros 的状态是否为running
virsh list --all
  • (2)使用 VNC 进入 cirros,查看 IP 是否为 10.0.0.71。
ip addr
  • (3)在CentOS上重启 cirros。
virsh reboot cirros

3. VMWare 开启嵌套虚拟化失败,提示类似此平台不支持虚拟化的Intel VT-X/EPT 或 AMD-V消息。

答:这是因为 VMWare Workstation 和微软 Windows上的 Hyper-V 不兼容导致的,需要关闭 Windows 的 Hyper-V 功能。

  • (1)在控制面板->程序-打开或关闭Windows功能 下,去掉Hyper-V选项。

  • (2)按下WIN+R组合键打开“运行”,然后输入services.msc回车。在 Windows 的服务禁用 Hyper-V服务。

  • (3)在Windows 的 CMD 下执行命令彻底关闭 Hyper-V。

bcdedit /set hypervisorlaunchtype off
bcdedit /set hypervisorlaunchtype auto
  • (4)重启电脑。