设为首页 收藏本站
查看: 1187|回复: 0

[经验分享] 创建虚拟机-qemu-kvm和openvswitch原型环境部署和基本测试 (2)

[复制链接]

尚未签到

发表于 2017-6-24 11:35:45 | 显示全部楼层 |阅读模式
使用qemu-kvm创建虚拟机
  本文包含以下几个部分:


  • 创建磁盘
  • 安装VNC Server
  • 启动虚拟机
  • 通过VNC访问虚拟机
  • 通过nc访问虚拟机监控和管理
  •   遇到的问题
      
    ***

    1. 创建磁盘
  使用qemu-kvm工具中的qemu-img创建磁盘。
  支持的文件类型:blkdebug blkverify bochs cloop dmg file ftp ftps gluster host_cdrom host_device host_floppy http https iscsi nbd parallels qcow qcow2 qed quorum raw rbd sheepdog ssh tftp vdi vhdx vmdk vpc vvfat
  

$ qemu-img create -f qcow2 qcow2.rhel64.img 5G  

  还可以使用dd命令创建raw disk(不推荐)
  

dd if=/dev/zero of=/path/os.img bs=1024 count=1024  
dd if=/dev/zero of=/path/os.img bs=1 count=1 seek=3G
  
mkfs.ext3 /path/os.img
  
mount -o loop /path/os.img /mnt
  

  往/mnt中写东西,然后umount
  
到其它地方挂载即可。
  注: 如果安装图形化界面的Linux,最好5G以上,因为安装完RHEL或者CentOS 6后,系统会占用2.6GB以上的空间。

2. 安装VNC Server
  

$ yum install vnc-server tigervnc #centos 5.x  
$ yum install tigervnc-server tigervnc #centos 6.x
  

  注:如果vncserver仅用于虚拟机VNC访问,那么不需要初始化配置和启动vncserver。

3. 启动虚拟机
  qemu-kvm创建虚拟机时,可以指定CPU、内存、磁盘、光驱、网卡、USB、声卡等硬件,也可以指定monitor监控方式用于监控和管理虚拟机。
  由于虚拟机网络比较复杂,本文不配置网卡,留在虚拟机网络一文和openswitch网络中详细介绍。
  由于虚拟机USB和声卡目前用不到,本文不配置,不介绍。
  启动虚拟机后需要安装操作系统的,用下面的命令:
  

/usr/libexec/qemu-kvm  
-name centos_desktop_vm09 #虚拟机名字
  
-uuid 9929edac-19cb-505c-fbac-1b4d2c30bafe #虚拟机UUID
  
-m 1024 # 内存
  
-smp 2,sockets=2,cores=1,threads=1 # CPU
  
-monitor tcp:10.60.0.45:8809,server,nowait # 监控
  
-drive file=/home/kvmdisk/qcow2.rhel64.3g.05.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=writeback #磁盘
  
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 # 驱动
  
-vnc 192.168.1.5:9 # 远程桌面访问
  
-vga cirrus # 选择显卡
  
-cdrom /home/iso/rhel-server-6.4-x86_64-dvd.iso
  
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
  
-boot once=dc #指定驱动器启动顺序
  

  启动虚拟机后不需要安装操作系统的,去掉-boot或者改为-boot c,去掉-cdrom。
  注: 实际使用时,需要安装操作系统后,制作成虚拟机镜像,每次启动虚拟机时,直接使用复制镜像作为启动磁盘,启动后就不用安装操作系统了。虚拟机镜像会在之后的文章中单独描述。

参数含义:
  -m,指定内存,如果不指定,内存默认为128MB;如果参数值为数字,则单位为MB;可以加单位,M或者G。
  -smp,cpu架构为smp,sockets为插槽数(CPU数),cores为单颗CPU核心数,threads为超线程数。
  -monitor,监视器重定向,默认为vc(图形界面)和stdio(命令行界面);如果希望通过网络访问,可以为telnet:192.168.1.5,server,nowait ,也可以为tcp:192.168.1.5:5555,server,nowait。server表示是一个linstening socket, nowait表示等待客户端连接的时候不应该阻塞。
  -drive和-device,磁盘命令,drive是磁盘,device是驱动,两者配合在一起使用,drive用于指定磁盘文件位置,device用于指定驱动,采用virtio驱动来提升效率,对应的virtio磁盘驱动为virtio-blk-pci。注意-device的drive属性值需要指向某个drive,所以-drive的id和-device的drive要一致。bootindex表示启动顺序。bus、addr用于指定总线,一般是pci,可以指定pci.0, pci.1等,addr不能和其它device重复,大于0即可。
  (-drive详细) -drive option[,option[,option[,...]]]
  
option有以下列表:
  
file=[file path], if=[file type (ide, scsi, virtio...)], index=[index], media=[disk| cdrom], snapshot=[on|off],cache=[none|writeback|unsafe|directsync|writethrough],format=[qcow2|raw|vmdk|...],copy-on-read=[on|off]
  -cdrom,指定CD/DVD的iso文件路径,最常用于系统安装时。
  -boot,指定驱动器启动顺序,可以直接用-boot c或者-boot d,其中d表示磁盘,c表示光驱。这个参数可以用-device参数后面的bootindex属性代替。
  -vnc,指定vnc地址,-vnc后面的格式是:, 不是Port,是Port_Index。vncserver不需要提前启动,指定-vnc 192.168.1.5:9后,qemu-kvm命令执行后,会自动启动vncserver。
  注: 有三个参数本次测试没有使用,但是virt-manager启动虚拟机时会自动加上。
  -nodefconfig (默认下qemu会从sysconfdir和datadir读取配置,-nodefconfig禁止qemu读取 )
  -nodefaults (默认qemu会创建serial port, parallel port, virtual console, monitor device, VGA adapter, floppy and CD-ROM drive and others,-nodefaults禁止创建这些默认的)
  -enable-kvm (允许KVM全虚拟化支持,该选项只有在linux编译时就加入了KVM支持的时候才有效)

带第二块盘:
  

/usr/libexec/qemu-kvm  
-name centos6 -smp 2,cores=2 -m 1024
  
-drive file=/home/kvmdisk/qcow2.rhel64.2.img,media=disk,format=qcow2,if=none,id=systemdisk
  
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x04,drive=systemdisk,id=systemdiskvirtio,bootindex=0
  
-drive file=/home/kvmdisk/qcow2.pdisk.1.img,media=disk,format=qcow2,if=none,id=datadisk
  
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x05,drive=datadisk,id=datadiskvirtio
  
-vnc 10.60.0.45:7
  
-boot c
  

4. 通过VNC访问虚拟机
  客户端:在windows中,下载vncviewer,运行后,访问:<5900+Port_Index> ( 192.168.1.5:5909 ) 地址。

5. 通过nc访问虚拟机监控和管理(虚拟机模拟器)
  根据-monitor指定的参数,如果是tcp类型的,则可以通过以下命令访问:
  

$ nc 192.168.1.5 5555  

  
[xinhua@mysql01 ~]$ nc mysql01 8809
  
QEMU 0.12.1 monitor - type 'help' for more information
  
(qemu) info
  
info
  
info version  -- show the version of QEMU
  
info commands  -- list QMP available commands
  
info network  -- show the network state
  
info chardev  -- show the character devices
  

  注: 如果是telnet类型的,可以直接通过telnet 192.168.1.5访问。如果是unix socket类型的,可以通过 nc -U 访问,但是这种方式实际并不可用。

6.本次测试遇到的问题

(1) 如果忘记设置内存-m,那么系统启动时停止在childrip,即内存越界。
  

[    7.048543]  [<ffffffff8100ce22>] kernel_thread+0x82/0xe0  
[    7.054566]  [<ffffffff8105fec1>] ? __call_usermodehelper+0x0/0x6a  
  
[    7.061482]  [<ffffffff8105fcd8>] ? ____call_usermodehelper+0x0/0x118  
  
[    7.068666]  [<ffffffff8100ce80>] ? child_rip+0x0/0x20  
  
[    7.074407]  [<ffffffff8105ff0c>] ? __call_usermodehelper+0x4b/0x6a  
  
[    7.081403]  [<ffffffff8106168e>] worker_thread+0x14e/0x1f8  
  
[    7.087627]  [<ffffffff810651a3>] ? autoremove_wake_function+0x0/0x38  
  
[    7.094818]  [<ffffffff81061540>] ? worker_thread+0x0/0x1f8  
  
[    7.101039]  [<ffffffff81064f69>] kthread+0x69/0x71  
  
[    7.106488]  [<ffffffff8100ce8a>] child_rip+0xa/0x20  
  
[    7.112027]  [<ffffffff81064f00>] ? kthread+0x0/0x71  
  
[    7.117564]  [<ffffffff8100ce80>] ? child_rip+0x0/0x20  
  

(2) 遇到vnc窗口一闪而过,通过在客户端的expert页面中修改colorlevel属性为rgb222解决。

(3) qemu-kvm命令后面的参数的属性用逗号隔离的,注意逗号前不要加空格

(4) 如果设置内存小于512M,可能不能通过图形化界面安装Linux操作系统,只能通过文本命令行安装。

7. 其它更高级的虚拟化管理工具生成的qemu-kvm进程

OpenStack nova启动的KVM虚拟机进程
  

/usr/libexec/qemu-kvm -name instance-0000008b -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu Westmere,+rdtscp,+pdpe1gb,+x2apic,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pclmuldq,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 9916d558-ca8d-4afe-b545-1b0144ef8c17 -smbios type=1,manufacturer=Fedora Project,product=OpenStack Nova,version=12.0.0-1.el7,serial=6d17f1e0-1901-48a2-aa98-7e8636183b0f,uuid=9916d558-ca8d-4afe-b545-1b0144ef8c17,family=Virtual Machine -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-instance-0000008b/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/data3/novastate/instances/9916d558-ca8d-4afe-b545-1b0144ef8c17/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=32 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:73:cc:7f,bus=pci.0,addr=0x3 -chardev file,id=charserial0,path=/data3/novastate/instances/9916d558-ca8d-4afe-b545-1b0144ef8c17/console.log -device isa-serial,chardev=charserial0,id=serial0 -chardev pty,id=charserial1 -device isa-serial,chardev=charserial1,id=serial1 -device usb-tablet,id=input0 -vnc 192.168.201.253:12 -k en-us -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -msg timestamp=on  

virt-manager启动的KVM虚拟机进程
  如果img为qcow2格式,但是自动创建虚拟机时,向导并没有让指定磁盘类型,因此为raw。这样在安装客户机的操作系统时,会报磁盘没有空间的错误。
  

/usr/libexec/qemu-kvm -name centos-vm01 -S -M rhel6.6.0 -enable-kvm -m 1024 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -uuid 55c34d55-23f2-2f13-a02d-ce8995adebb7 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/centos-vm01.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-reboot -no-shutdown -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/home/kvmdisk/qcow2.rhel64_vm01.img,if=none,id=drive-virtio-disk0,format=raw,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/home/kvmdisk/rhel-server-6.4-x86_64-dvd.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device>  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387507-1-1.html 上篇帖子: 安装 KVM 下篇帖子: KVM学习(初步安装与使用)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表