十三、Linux中虚拟化的使用

13.1、Linux中kvm虚拟化软件的安装及硬件设定

安装条件:
对于Intel的cpu,要有vmx
对于amd的cpu,要有svm

执行cat /proc/cpuinfo | grep vmx查看

linux查询虚拟化 linux查看虚拟化是否开启_运维


(1)搭建好软件仓库之后,执行

dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools” -y

(2)virt-manager查看虚拟机

(3)systemctl enable --now libvirtd启动虚拟化服务

(4)设定虚拟化服务

linux查询虚拟化 linux查看虚拟化是否开启_vim_02


linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_03


选择镜像文件

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_04


输入8.0的版本

linux查询虚拟化 linux查看虚拟化是否开启_linux_05


linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_06


linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_07


linux查询虚拟化 linux查看虚拟化是否开启_linux_08


linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_09


linux查询虚拟化 linux查看虚拟化是否开启_linux_10


linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_11


语言为英语

时区为上海

分区如下

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_12


所有设置完成进入安装界面,等待安装完成。

linux查询虚拟化 linux查看虚拟化是否开启_vim_13

13.2、Linux系统中虚拟机中的快照

例:创建虚拟机中的快照node1

虚拟机中快照所在目录/var/lib/libvirt/images/test.qcow2

linux查询虚拟化 linux查看虚拟化是否开启_运维_14


cd /var/lib/libvirt/images/test.qcow2然后执行ls查看

linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_15


创建快照qemu-img create -f qcow2 -b test.qcow2 node1.qcow2

执行ls可以看到快照node1

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_16


快照创建完成。

例:使用快照node1

linux查询虚拟化 linux查看虚拟化是否开启_vim_17


linux查询虚拟化 linux查看虚拟化是否开启_vim_18


选择镜像

linux查询虚拟化 linux查看虚拟化是否开启_vim_19

13.3、Linux中虚拟机命令管理方式

virt-manager    #查看虚拟机
virsh list      #查看运行的虚拟机
virsh list --all     #列出正在运行和没有运行的虚拟机
virsh start node1    #开启虚拟机node1
virsh shutdown node1 #关闭虚拟机node1,遇到关闭不了的情况点Force Off
virsh destory node1  #直接关闭虚拟机node1,等同于手动点Force Off
virsh-viewer node1   #显示node1

13.4、Linux中虚拟机的迁移

虚拟机中硬件信息目录:/etc/libvirt/qemu/

cd /etc/libvirt/qemu/
vim test.xml

linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_20


远程拷贝虚拟机的时候需要拷硬盘和硬件信息。

实验:
真机为Windows
(1)

mv /var/lib/libvirt/images/test.qcow2 /mnt/
mv /etc/libvirt/qemu/test.xml /mnt/

(2)删除之前建立的虚拟机test

linux查询虚拟化 linux查看虚拟化是否开启_运维_21


(3)

mv /mnt/test.* /var/lib/libvirt/images/
cd /var/lib/libvirt/images/
virsh create test.xml      #一次性恢复

linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_22


但关闭之后test消失。若要永久恢复

virsh define test.xml    #永久恢复

13.5、在vmware中做虚拟化实验

(1)在原有虚拟机基础上添加一块20G的硬盘,硬盘类型为SATA。

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_23


添加完成

linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_24


(2)开启虚拟机,在右下角光盘图标右键进行管理,选中以下几项。

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_25


执行df可以看到镜像路径:

/run/media/root/RHEL-8-0-0-BaseOS-x86_64

linux查询虚拟化 linux查看虚拟化是否开启_运维_26


(3)

cd /etc/yum.repos.d/
vim fake.repo

内容为

1 [fake1]
  2 name=AppStream
  3 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/AppStream
  4 gpgcheck=0
  5 
  6 [fake2]
  7 name=BaseOS
  8 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/BaseOS
  9 gpgcheck=0

(3)执行 dnf group list --hidden

(4)安装虚拟化软件

dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools”

(5)开启两个服务 libvirtd 和 libvirt-guests.service

systemctl enable --now libvirtd libvirt-guests.service

(6)对设备进行分区,执行 fdisk /dev/sdb 然后输入两次回车,wq再回车。

linux查询虚拟化 linux查看虚拟化是否开启_运维_27


(7)对上设备进行格式化,执行 mkfs.xfs /dev/sdb1 -K

挂载 mount /dev/sdb1 /var/lib/libvirt/images/

注:此挂载为临时挂载,开机无效,临时挂载方法为 vim /etc/rc.d/rc.local输入挂载指令mount /dev/sdb1 /var/lib/libvirt/images/

linux查询虚拟化 linux查看虚拟化是否开启_vim_28


然后执行chmod a+x /etc/rc.d/rc.local(8)对虚拟机硬件信息进程调整让虚拟机可以支持虚拟化

编辑虚拟机设置

linux查询虚拟化 linux查看虚拟化是否开启_vim_29


内存大小改为4096MB

13.6、利用网络源安装虚拟机

(1)完成以下设置

dnf install httpd -y
systemctl disable --now firewalld
systemctl enable --now httpd
mkdir /var/www/html/fake
umount dev/sr0
mount /dev/sr0 /var/www/html/fake
chown qemu.qemu /var/lib/libvirt/images/   #恢复之前的权限

(2)安装虚拟机

linux查询虚拟化 linux查看虚拟化是否开启_linux_30


linux查询虚拟化 linux查看虚拟化是否开启_虚拟化_31


进入安装界面

linux查询虚拟化 linux查看虚拟化是否开启_运维_32

13.7、虚拟机中网桥网络配置

linux中使用虚拟化默认没有桥接模式,虚拟机配置完成启动后会生成一个接口叫vnet0。

linux查询虚拟化 linux查看虚拟化是否开启_运维_33


使用的网络模式为NAT模式,并且选项里没有网桥模式。

linux查询虚拟化 linux查看虚拟化是否开启_vim_34

例:在虚拟机中进行网桥网络配置
(1)网卡配置目录:/etc/sysconfig/network-scripts/
执行cd /etc/sysconfig/network-scripts/ 然后复制一份网卡配置文件 cp ifcfg-ens160 ifcfg-br0

vim ifcfg-ens160

1 TYPE=Ethernet
  2 BOOTPROTO=none
  3 NAME=ens160
  4 DEVICE=ens160
  5 ONBOOT=yes
  6 BRIDGE=br0

vim ifcfg-br0

1 TYPE=Bride
  2 BOOTPROTO=none
  3 IPADDR=192.168.1.4
  4 NETMASK=255.255.255.0
  5 NAME=br0
  6 DEVICE=br0
  7 ONBOOT=yes

(2)重新加载网络配置

nmcli connection reload
nmcli connection down ens160
nmcli connection up ens160
nmcli connection down br0
nmcli connection up br0
nmcli connection show

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_35


执行virt-manager查看网桥,搭建成功。

linux查询虚拟化 linux查看虚拟化是否开启_运维_36


(3)删除之前的虚拟机,新建一个虚拟机,网络模式默认为网桥模式

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_37


finish完成安装。

结论:
如果默认NAT模式,虚拟机的安装会连接virbr0,从virbr路由器获取ip。
如果用网桥模式,则使用br0放到物理网卡ens160,会导致主机安装时候网络获取不到ip的情况,解决方案如下。

例:使用dhcp服务给虚拟机分配ip
(1)安装dhcp服务

dnf install dhcp-server -y

(2)执行

cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
 vim /etc/dhcp/dhcpd.conf

三处更改

6 # option definitions common to all supported networks...
  7 option domain-name "fake.org";
  8 option domain-name-servers 114.114.114.114
30 subnet 192.168.1.0 netmask 255.255.255.0 {
 31   range 192.168.1.0 192.168.1.40;
 32   }

删除32行之后内容。

注:以上三步操作可参照dhcpd服务设置
(3)打开dhcpd服务

systemctl enable --now dhcpd

(4)此时再使用网桥的方式安装虚拟机不会报错,因为dhcp会给虚拟机分配ip

linux查询虚拟化 linux查看虚拟化是否开启_vim_38

13.8、虚拟机硬件设定脚本

在虚拟机创建过程中每次都需要做大量硬件设定工作,那么可以考虑用脚本代替手动设定,从而简化安装过程。

例:创建虚拟机设定脚本(以利用网络源安装虚拟机为例)

(1)执行cd /mnt 切换目录进行实验,执行man virt-install 查看安装虚拟机的帮助,然后执行/EXAMPLE 查找相关安装实例。

linux查询虚拟化 linux查看虚拟化是否开启_linux_39


(2)编辑脚本文件vim fake.sh

#!/bin/bash
virt-install \
        --location http://192.168.1.4/fake \
        --os-variant rhel8.0 \
        --vcpus 1 \
        --memory 1024 \
        --disk /var/lib/libvirt/images/fake.qcow2,size=8,bus=virtio \
        --name fake \
        --network bridge=br0,model=virtio

(3)删除之前的虚拟机,执行脚本sh fake.sh直接创建出虚拟机fake

linux查询虚拟化 linux查看虚拟化是否开启_linux_40


但是这种方法只能一次性用于建立一个名为fake的虚拟机,如何使用脚本建立多个不同名字的虚拟机?步骤如下(1)如果我们建立一个名为test的脚本,脚本内容为echo hello wold。那么在执行sh test.sh时的效果为

linux查询虚拟化 linux查看虚拟化是否开启_运维_41

此时执行sh test.sh haha 无论后面跟什么输出皆为hello world

linux查询虚拟化 linux查看虚拟化是否开启_linux_42


(2)test脚本内容改为echo $1保存退出之后执行sh test.sh haha则输出为haha,即脚本的输出为执行脚本指令后跟的字符。

linux查询虚拟化 linux查看虚拟化是否开启_linux查询虚拟化_43


(3)那么如果把fake.test脚本内容换做

#!/bin/bash
virt-install \   #虚拟机安装命令
        --location http://192.168.1.4/fake \  #指定安装源
        --os-variant rhel8.0 \  #指定安装系统版本
        --vcpus 1 \  #cpu核心数量
        --memory 1024 \  #内存大小
        --disk /var/lib/libvirt/images/$1.qcow2,size=8,bus=virtio \  #硬盘位置,硬盘大小,硬盘工作总线
        --name $1 \   #虚拟机名称
        --network bridge=br0,model=virtio  #虚拟网卡为桥接,网卡工作模式为虚拟输入输出      
                                         
#注意每一行命令和换行符“\”之前要有空格m,且换行符后不能存在字符。

(4)此时执行sh fake.sh test会新建一个名为test的虚拟机

linux查询虚拟化 linux查看虚拟化是否开启_linux_44