使用virt-install
命令来创建vm(guests)显然是一种最为直接的,“virt-install”支持交互式和非交互式两种模式。另外使用“virt-manger”图形界面创建vm也是一个不错的选择。
下面我们通过实验来了解virt-install
的使用;
使用virt-install创建VM
-
使用xshell登录到KVM的宿主机并且连接会话已经配置好X11转发(参考part1);
-
使用下列命令创建一个vm(guests);
# 下载一个CentOS7的iso镜像 wget https://mirrors.aliyun.com/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso # 执行命令创建kvm virt-install --connect qemu:///system --virt-type kvm \ --network bridge:br0 \ --name test --description "first vm" \ --os-variant rhel7 \ --ram=1024 \ --vcpus=1 \ --disk size=4 \ --os-type=linux \ --graphics vnc,password=123456 \ --cdrom /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1611.iso
-
如果您的回话已经配置好X11转发,将会自动弹出“virt-viewer”的界面,这时就可以在图形界面上按照传统的方式安装您的操作系统了;
image.png -
下面我我们来详细分析下virt-install命令参数;
参数 | 描述 |
---|---|
--connect | 指定连接的hosts,如果是本机该选项可以省略 |
--virt-type | 指定虚拟化类型,kvm or Xen |
--network | 指定网络连接的网桥 |
--description | VM的描述备注 |
os-variant | OS的系统版本,指定后KVM会按照指定的系统版本对性能进行优化 |
--ram | 指定虚拟机的内存大小(mb) |
--vcpus | 指定虚拟机cpu数量 |
--disk | 指定虚拟机的硬盘大小 |
--os-type | 指定虚拟机的系统类型 |
--graphics | 指定虚拟机的图形显示 |
--cdrom | 设定系统的引导镜像 |
-
当系统安装完成之后,我们可以使用
virsh list
命令来列出活动的虚拟机;[root@kvm-node1 images]# virsh list Id Name State ---------------------------------------------------- 13 generic running 14 cirros running 16 test runnin
-
使用命令`virt-top来监控虚拟机的性能状态;
image.png
-
使用
virsh destroy
命令来终止VM虚拟机,这时可以通过命令virsh list --all
来列
出已经关闭的VM;[root@kvm-node1 /]# virsh list Id Name State ---------------------------------------------------- 13 generic running 14 cirros running 16 test running [root@kvm-node1 /]# virsh destroy test Domain test destroyed [root@kvm-node1 /]# virsh list Id Name State ---------------------------------------------------- 13 generic running 14 cirros running [root@kvm-node1 /]# virsh list --all Id Name State ---------------------------------------------------- 13 generic running 14 cirros running - test shut off
-
使用
virsh start
命令来启动终止的VM;[root@kvm-node1 /]# virsh start test Domain test started [root@kvm-node1 /]# virsh list Id Name State ---------------------------------------------------- 13 generic running 14 cirros running 17 test running
深入探讨VM配置文件
-
首先我们来了解一下KVM的VM(guests)的配置文件保存来自哪里;
[root@kvm-node1 /]# ls /etc/libvirt/qemu/ cirros.xml generic.xml networks test.xml
-
KVM的xml配置文件分为几个重要的部分,我们来看整体结构;
<domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 虚拟磁盘(单个或者多个) 虚拟光驱(可选) 虚拟网络(单个或者多个) vnc/spice 配置 </domain>
-
虚拟机整体信息:
从整体上描述虚拟机所需资源<name>test</name> <uuid>d4f875b0-7706-4047-87cb-3b58324bf323</uuid> <description>first vm</description> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu>
- uuid是虚拟机的唯一标示,用户可以自行定义,也可以使用命令
uuidgen
自动生成 - 内存配置一般以KB为单位
- cpu数量支持超配,即允许虚拟机的cpu数量总和大于宿主机的cpu总数
- uuid是虚拟机的唯一标示,用户可以自行定义,也可以使用命令
-
系统信息
接下来是对OS的描述,主要是定义类型和启动信息<os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os>
-
硬件资源特性
主要包括两个方面:电源管理及内存扩展<features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>Broadwell-noTSX</model> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock>
-
突发事件处理
针对三种突发事件定义了不同的处理方式,用户也可以根据自己需要定制操作<on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm>
-
虚拟磁盘
所有的虚拟外设都保存在<device></device>
中的<disk></disk>
中<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/test.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>
- 第2行指定了驱动为qume,image格式为qcow2
- 第3行指定了image的存放位置
- 第4行指定了image做为vm的第几块磁盘,bus代表了所使用的的驱动类型,这里使用
了virtio。这是一种高效的image数据传输方式 - 第5行指定了image所使用的PCI地址,该行可以省略。如果要添加的话注意slot的编
号不要与其他设备相同
-
虚拟网络
虚拟网路有很多种,不同的Hypervisor提供了不同的虚拟网络类型,我们这里采用的是
静态网桥的方式。<interface type='bridge'> <mac address='52:54:00:61:21:c8'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
-
vnc配置
一般生成的vnc配置都会导致外部无法访问,因为没有配置监听地址,我们可以按照如下
配置;<graphics type='vnc' port='-1' autoport='yes' passwd='123456' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics>
-
网友评论