• ✅宿主机平台:CentOS Linux 7;
  • ✅计算环境的处理器平台及结构:x86、SMP结构、CPU数量>=2;
  • ✅虚拟网络:提供桥模式及NAT模式两种网络,且与外部物理网络互通;
  • ✅虚拟存储:使用ISCSI磁盘设置作为虚拟机存储资源;
  • ✅虚拟机的远程管理:通过VNC协议实现;
  • ✅计算资源自启动:宿主机开机,自动进行计算资源的启动、

基础知识

  • libvirt:Libvirt 是用于管理虚拟化平台的开源的 API,后台程序和管理工具。它可以用于管理 KVM、Xen、VMware ESX,QEMU 和其他虚拟化技术。这些 API 在云计算的解决方案中广泛使用
  • ISCSI:iSCSI 是一种存储设备远程映射技术,它可以将一个远程服务器上的存储设备映射到本地,并呈现为一个块设备(大白话就是磁盘)。从普通用户的角度,映射过来的磁盘与本地安装的磁盘毫无差异

相关命令

virsh:进入virsh界面

pool-define --file "/opt/iscsi_pool.xml":指定iscsi的.xml文件

define "/opt/guest.xml":指定启动虚拟机的.xml文件

vol-create "/opt/block_vol.xml":指定卷的.xml文件#实际上如果是使用的iscsi,这个卷是自动创建了的

net-list --all:显示当前网卡配置

vol-list --pool 'StarWind iscsi pool':显示iscsi卷

net-dumpxml default:显示网卡内容

net-destroy --network default :关闭网卡

pool-undefine --pool 'StarWind iscsi pool':关闭启动的文件

pool-start --pool 'StarWind iscsi pool':启动iscsi池

pool-list --all:显示当前的所有卷

net-list --all:显示当前所有网卡

pool-autostart --pool 'StarWind iscsi pool':开机自动读取卷

net-autostart default:开机自动读取网络配置

edit centos6.5:编辑虚拟机的配置文件(直接生效)

list --all:显示所有domain

设计

  1. 使客户机与宿主机还有外网连通,网络配置方法参照课题1中的【网络配置】一节,可以采用网桥模式或者路由模式
  2. 通过在starwind上新建iscsi存储,并让客户机在启动时自动连接到这块硬盘上
  3. 最后通过编写相关的.xml文件实现计算资源的自启动(主要编写guest.xml和iscsi_pool.xml即可,block_vol.xml由于是使用iscsi硬盘,则会自动创建卷,不需要单独设置,route-net.xml由于virsh的默认网卡会有一个默认的网络配置,也不需要单独设置)

1 虚拟网络

客户机的eth0网卡配置

宿主机的网络配置:

客户机 Ping 宿主机: 

客户机 Ping 百度: 

2 虚拟存储

在真机上下载安装一个starwind:https://www.starwindsoftware/
启动时选择“以管理员身份启动”
(1)添加主机,右键【StarWind Servers】后选择【Add Host】

(2)默认即可,点击【OK】 

(3)右键刚刚创建的主机名称,点击【Connect】 

(4)输入密码(默认为starwind) 

(5)右键【Targets】,点击【Add Target】 

(6)随便输入一个名称,如【000】,勾选下面的【Target Name】,记住此处的内容【iqn.2008-08.starwindsoftware:kubernetes.docker.internal-000】,之后点击【下一页】 

(7)默认,下一步 


(8)默认,下一步 

(9)默认,下一步 

(10)选择【Create new virtual disk】,下一步

(11)选择一个路径,之后加上名称,要带上.img的后缀;设置一下下面的大小【Size in MBs】 

(12)默认,下一步 

(13)默认,下一步 

(14)默认,下一步 

(15)最后,完成
(16)最后再使用如下命令启动客户机

qemu-kvm -smp cpus=4 -boot order=cn -m size=1024  -name centos6.5 -hda "/root/zhangxi/centos6.5" -display vnc=:1 -net nic,model=e1000,netdev=hdwk -netdev tap,id=hdwk,script=no,downscript=no,ifname=wangka -drive  file=iscsi://192.168.27.1/iqn.2008-08.starwindsoftware:kubernetes.docker.internal-00/0

3 编写.xml文件实现计算资源自启动

学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

查看libvirtd服务的状态:

上图为启动状态 

如果未启动则打开服务

开启starwind:

3.1 iscsi_pool.xml

<pool type="iscsi"> 
   <name>StarWind iscsi pool</name>
   <source>
     <device path="iqn.2008-08.starwindsoftware:kubernetes.docker.internal-00"/>
     <host name="192.168.203.15" port="3260" />
     <initiator name="iqn.2021-09.centos:iscis-00" />
   </source>
   <target>
      <path>/dev/disk/by-id</path>
      <permissions>
      <mode>0777</mode>
      <owner>107</owner>
      <group>107</group>
      </permissions>
    </target>
</pool>

查看iscsi设备:iscsiadm -m discovery -t st -p 192.168.203.15

3.2 guest.xml

<domain type='kvm' id='1'>
  <name>centos6.5</name>
  <title>001 VM</title>
  <description>First VM</description>
  <os>
    <smbios mode='sysinfo'/>
    <type>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='yes' timeout='3000'/>
  </os>
  <sysinfo type='smbios'>
     <bios>
        <entry name='vendor'>vmware</entry>
     </bios>
     <system>
        <entry name='manufacturer'>centos</entry>
        <entry name='product'>Virt-Manager</entry>
        <entry name='version'>1.0</entry>
     </system>
  </sysinfo>
  <vcpu>8</vcpu>
  <cpu>
    <topology  sockets='1' cores='4' threads='2'/>
  </cpu>
  <features>
     <acpi/>
  </features>
  <memory unit='KiB'>126976</memory>
  <devices>
    <video>
      <model type='vga' vram='1048576' heads='1'>
      <acceleration accel3d='no' accel2d='no'/>
    </model>
    </video>
    <graphics type='vnc' port='5901' sharePolicy='allow-exclusive'>
        <listen type='address' address='0.0.0.0'/>
    </graphics>
    <input type='keyboard' bus='usb'/>
    <input type='tablet' bus='usb'/>
    <interface type='network'>
      <source network='default'/>
    </interface>
    <disk type='volume' device='disk'>
      <source  pool='StarWind iscsi pool' volume='unit:0:0:0'/>
      <target dev='hdb' bus='ide'/>
    </disk>
    <disk type='file' device='disk'>
      <source file="/root/zhangxi/centos6.5" type="qcow2"/>
      <target dev='hda' bus='ide' />
    </disk>
  </devices>
</domain>

3.3 block_vol.xml

如果是使用iscsi硬盘,则会自动创建卷,不需要单独设置

参考设置:

<volume type='block'>
  <name>sdb1</name>
  <capacity unit="G">4</capacity>
  <target>
     <path>/dev/sdb1 </path>
  </target>
</volume>

3.4 route-net.xml

virsh的默认网卡会有一个默认的网络配置,不需要单独设置

<network>
  <name>default</name>
  <forward mode='nat' />
  <bridge name='virbr0' stp='on' delay='0'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

4 设置自启动

选择guest.xml文件:define /opt/guest.xml

设置虚拟机自启动:autostart centos6.5 

 

选择iscsi.xml文件:pool-define /opt/iscsi.xml 

设置iscsi自启动:pool-autostart --pool 

设置网卡文件自启动:net-autostart default 

5 测试

重启宿主机,此时可以明显感到启动速度变慢,应该是因为在加载客户机的资源所导致的
查看当前客户机的启动情况:ps -ef | grep qemu

iscsi已经连接:pool-list --all

客户机启动状态:list --all


使用vnc连接客户机:

6 遇到的问题

6.1 客户机和宿主机互通,但无法与真机互通

原因:宿主机上未开启路由转发功能
先抓一下虚拟网卡的包tcpdump -n -i wangka icmp,此时是可以通的
之后对ens33进行抓包tcpdump -n -i ens33 icmp可以看到此时是不通的,所以判断是ens33不能将路由包正常转发,即未开启路由转发功能
解决方法:
在宿主机上开启路由转发功能:sysctl -w net.ipv4.ip_forward=1

6.2 客户机与真机互通,但是无法Ping通域名

原因:未关闭防火墙
此时客户机与宿主机和真机能通,甚至能ping通外网的IP,但就是无法直接ping通域名,这说明在网络层已经没有问题了,问题出在应用层,即可能是防火墙阻止了到达应用层的数据包
通过tcpdump抓包tcpdump -i wangka -n udp port 53也可以看到此时的dns域名解析服务未生效
解决方法:
关闭防火墙策略:iptables -F

6.3 在对virsh配置iscsi.xml后无法启动

原因:杀毒软件、防火墙、端口问题(3260是管理端口,3261是控制端口)
解决方法:

  • 关闭杀毒软件
  • 关闭防火墙
  • 端口配置为3260

6.4 配置好xml文件后重启自启动客户机失败

原因:iscsi连接设置问题,starwind由于默认监听所有网卡,所以它会在电脑启动后会立刻绑定当前启用的所有网卡,而如果此时电脑还没有连接wifi或者未能马上识别本地网络,就不会绑定到这些后面启动的网络上
解决方法:
所以建议在iscsi_pool.xml文件中设置连接的IP地址为vmnet8的IP

6.5 No bootable device

原因:硬盘启动顺序启动错误

解决方法:
修改为正确的启动顺序,将本地硬盘启动修改为hda,iscsi硬盘修改为hdb即可

6.6 Kernel panic - not syncing:Attempted to kill init?

原因:虚拟内存分配不够
解决办法:
修改guest.xml文件中的虚拟内存大小,注意前面的单位

6.7 启动客户机时网卡变成了eth2

原因:宿主机MAC地址发生变化,因为最初是用qemu命令创建的客户机,后面又用libvirtd来创建虚拟机,就导致了MAC地址绑定发生了变化
解决办法:
进入修改规则的目录:cd /etc/udev/rules.d
修改启动时的MAC绑定:vi 70-persistent-net.rules

删除网卡配置中的uiid:cd /etc/sysconfig/network-scripts/ifcfg-eth0

原文链接:https://zhuanlan.zhihu/p/414973565 

参考文章

  1. libvirt 工具实现虚拟机管理 - 博客园 · 尹正杰
  2. [kvm] 四种简单的网络模型 - 博客园 · Hukey's Blog
  3. CentOS7 从查看、启动、停止服务说起 systemctl - 博客园 · 我是属车的

更多推荐

Libvirt虚拟化管理及计算环境的规划及部署