- ✅宿主机平台: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中的【网络配置】一节,可以采用网桥模式或者路由模式
- 通过在starwind上新建iscsi存储,并让客户机在启动时自动连接到这块硬盘上
- 最后通过编写相关的.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
参考文章
- libvirt 工具实现虚拟机管理 - 博客园 · 尹正杰
- [kvm] 四种简单的网络模型 - 博客园 · Hukey's Blog
- CentOS7 从查看、启动、停止服务说起 systemctl - 博客园 · 我是属车的
更多推荐
Libvirt虚拟化管理及计算环境的规划及部署
发布评论