通过Libvirt创建KVM虚拟机

创建虚拟机,需要设置步骤:

  • 宿主机安装kvm相关软件
  • 创建一个虚拟磁盘,用于安装虚拟机系统
  • 使用libvirt安装虚拟机系统
  • 设置虚拟机cpu,内存,网卡等参数
  • 使用virsh 启动虚拟机

创建虚拟机磁盘:

虚拟磁盘用于安装虚拟机操作系统,相当于物理机的硬盘;相较于普通的raw格式,qcow2镜像格式具有以下优点

  • 更小的系统占用,文件系统不支持空洞
  • 支持写时拷贝,镜像文件只反映底层的变化
  • 支持快照,镜像文件能够包含多个快照的历史
  • 可选择基于zlib的压缩方式
  • 可以选择AES加密

我们可以利用qemu-img来创建qcow2格式的磁盘

qemu-img create -f qcow2 controller-node.img 20G

安装虚拟机操作系统

编辑XML文件

vi libvirt.xml

以下为xml的示范:参考自manual start vm by libvirt cmd

XML文件注释为双斜杠,下例主要为了方便说明。

<domain type='kvm'>#域类型
    <name>ubuntu-controller</name> #虚拟机的名字,由字母和数字组成,不能包含空格
    <memory unit='GiB'>8</memory> #在不reboot guest的情况下,guset可以使用的最大内存,默认KB为单位
    <currentMemory unit='GiB'>4</currentMemory> #guest启动时内存(当前),可以通过virsh setmem来调整内存,但不能大于最大可使用内存。
    <vcpu>4</vcpu> #分配的虚拟cpu
    <os>
        <type arch='x86_64' machine='pc'>hvm</type> #hvm:全虚拟化
        #<kernel>/tmp/vmlinuz-rhel54</kernel> #kernel:指定guest使用的内核,如果使用ISO(安装时)或guset系统中(系统已经安装完成)的内核,不需要指定该项
        #<initrd>/tmp/initrd-rhel54.img</initrd> #initrd:指定guest使用的ram disk,如果使用ISO(安装时)或guest系统中(系统已经安装完成)的ram disk,不需要指定该项
        #注:kernel 和initrd文件位于RHEL系统光盘的images/pxeboot目录,拷贝这两个文件到本地磁盘,并指定路径。
        #注:这两个元素,如果是为了安装guset而指定,在安装完成以后即可以删除。
        #如果host开启了SELINUX,需要改变文件的security context类型为virt_image_t,从而在启动时libvirtd可以访问这二者
        # chcon -t virt_image_t /tmp/vmlinuz-rhel54
        # chcon -t virt_image_t /tmp/initrd-rhel54.img
        # ls -Z /tmp|grep virt
        <boot dev='hd'/> #boot:指定启动设备,可以重复多行,指定不同的值,作为一个启动设备列表。hd表示从硬盘启动
        <boot dev='cdrom'/> #network表示从pxe启动
    </os>
    <features> #处理器特性
        <acpi/>
        <apic/>
        <pae/>
    </features>
    <clock offset='utc'/> #时钟
    #定义了在kvm环境中power off,reboot,或crash时的默认的动作为destroy。其他允许的动作包括:restart,preserve,rename-restart.
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash> #destroy:停止该虚拟机。相当于关闭电源
    <devices> #设备定义开始
        <emulator>/usr/libexec/qemu-kvm</emulator> #模拟元素,此处写法用于kvm的guest。二进制模拟器设备的完整路径。
        <disk type='file' device='disk'>#disk是用来描述磁盘的主要容器
            <driver name='qemu' type='qcow2'/>
            <source file='/home/zhzej/controller-node.img'/>#指定磁盘上文件的绝对路径
            #使用virtio,采用普通的驱动,即硬盘和网卡都采用默认配置情况下,硬盘是 ide 模式,
            #而网卡工作在 模拟的rtl 8139 网卡下,速度为100M 全双工。
            #采用 virtio 驱动后,网卡工作在 1000M 的模式下,硬盘工作是SCSI模式下。
            #硬盘采用 virtio 后,安装windows 系统,将不能正常的识别硬盘,解决的方法是:
            #从kvm 的官网下载virtio的驱动iso。
            #1. 先采用ide模式安装系统。
            #2. 安装完成后,添加一个virtio模式的硬盘。
            #3. 启动vm后,系统会自动搜索 SCSI的驱动,找到下载的virtio 驱动后,安装即可。
            #4. 修改vm 配置文件,删除掉添加的 vitro 硬盘后,修改ide硬盘为 virtio模式即可
            <target dev='vda' bus='virtio'/>
        </disk>
        <disk type='file' device='cdrom'>
            <source file='/home/iso/ubuntu-14.04.3-server-amd64.iso'/>
            <target dev='hdb' bus='ide'/>
        </disk>
        #使用网桥类型。确保每个kvm guest的mac地址唯一。将创建tun设备,名称为vnetx(x为0,1,2...)
        <interface type='bridge'>
            <source bridge='br0'/>
            <mac address='52:54:02:2B:73:F1'/>
            <model type='virtio'/>
        </interface>
        <interface type='bridge'>
            <source bridge='br0'/>
            <mac address='52:54:02:2B:73:F2'/>
            <model type='virtio'/>
        </interface>
        # 补充:使用默认的虚拟网络代替网桥,即guest为NAT模式。也可以省略mac地址元素,这样将自动生成mac地址。
        # 默认分配192.168.122.x/24的地址,也可以手动指定。网关为192.168.122.1
        #<interface type='network'>
        # <source network='default'/>
        # <mac address="3B:6E:01:69:3A:11"/>
        #</interface>
 
        <input type='mouse' bus='ps2'/> #输入设备
        #定义与guset交互的图形设备。在这个例子中,使用vnc协议。listen的地址为host的地址。prot为-1,表示自动分配端口号。
        <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'/>
    </devices>
</domain>

使用Virsh操作虚拟机

virsh define ubuntu.xml #定义后可通过virsh list --all 看到虚拟机名称ubuntu-controller,此时并位启动虚拟机

virsh edit ubuntu-controller #定义后再次修改

virsh start ubuntu-controller #启动虚拟机

virsh destroy ubuntu-controller #关闭虚拟机

virsh undefined ubuntu-controller #取消定义

Virsh对虚拟机进行管理

virsh start centos6.3 #开机

virsh create /etc/libvirt/qemu/centos6.3.xml #直接通过主机配置文档启动主机

virsh shutdown centos6.3 #关机

virsh destroy centos6.3 #强制关闭电源

virsh list --all #查看虚拟机状态

virsh define /etc/libvirt/qemu/node5.xml #根据主机配置文档添加虚拟机

virsh list --all #node5已经添加

virsh undefine node5 #移除虚拟机

ls /etc/libvirt/qemu

virsh list --all #node5已经被移除

qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G#为新建虚拟机生产磁盘镜像文件

virsh list

virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml#导出虚拟机node6的硬件配置信息为/etc/libvirt/qemu/node6.xml

vim /etc/libvirt/qemu/node6.xml

<domain type='kvm' id='20'> #修改node6的id号

<name>node6</name> #虚拟机node6的name

<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid> #uuid必须修改,否则会和node4的冲突

<source file='/virhost/node4.img'/> #指定新虚拟机的硬盘文件

virsh define /etc/libvirt/qemu/node6.xml #使用虚拟描述文档建立虚拟机,

可用virsh edit node6修改node6的配置文件

virsh start node6#启动虚拟机

virsh edit node4 #编辑node4的配置文件;不建议直接通过vim node4.xml修改。

<graphics type='vnc' port='-1' listen='127.0.0.1' keymap='en-us'/>

#port='-1' :port自动分配,监听回环网络(virt-manager管理需要listen='127.0.0.1'),无密码

改为

<graphics type='vnc' port='5904' listen='0.0.0.0' keymap='en-us' passwd='xiaobai'/>

#固定vnc管理端口5904,不自动分配,vnc密码xiaobai,监听所有网络


启动虚拟机成功后:

创建磁盘文件,修改XML配置文件(主要修改mac地址,自己的磁盘输出镜像地址,以及虚拟机名),依次创建三台虚拟机,分别作为调度(controller),计算(compute),网络(network)节点;

此时可以通过VNC连接虚拟机进行操作系统的安装;

先通过查看具体端口号:

virsh vncdisplay zhzej-controller

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值