zoukankan      html  css  js  c++  java
  • 创建虚拟机-qemu-kvm和openvswitch原型环境部署和基本测试 (2)

    使用qemu-kvm创建虚拟机

    本文包含以下几个部分:

    1. 创建磁盘
    2. 安装VNC Server
    3. 启动虚拟机
    4. 通过VNC访问虚拟机
    5. 通过nc访问虚拟机监控和管理
    6. 遇到的问题

    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_Index>, 不是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 <unix_socket_filepath>访问,但是这种方式实际并不可用。

    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 ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:70:46:65,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
  • 相关阅读:
    DevOps中的测试实践
    jenkins node js插件使用
    jenkins job执行shell时发现node版本跟实际不一致
    ES大批量写入提高性能的策略
    tomcat参数调优
    mongodb常用查询语法
    千锤百炼软工12.17日自评一篇
    千锤百炼软工12.05-12.12
    千锤百炼软工11.28-12.04
    千锤百炼软工11.20-11.27
  • 原文地址:https://www.cnblogs.com/vimisky/p/5686875.html
Copyright © 2011-2022 走看看