虚拟化进阶管理
libvirt工具栈详解
支持的虚拟化技术
KVM
Xen
LXC
VMware
Qemu
OpenVZ
libvirt组件
常用libvirt工具
virsh-manager 虚拟机图形化管理工具 virsh-install 能实现虚拟机的创建、安装 virsh 丰富的管理命令管理虚拟机 guestfish 磁盘映像文件API接口,在不挂载磁盘映像文件的前提的,修改文件内容 guestmount 无须挂载映像为即可使用 virt-builder 快速构建、定制虚拟机 virt-cat 快速查看磁盘映像文件中的内容 virt-customize 定制磁盘映像文件 virt-df 磁盘映像文件空间查看 virt-diff 比较两个磁盘映像文件差异 virt-edit 编辑磁盘映像文件 virt-filesystems 发现文件系统、分区、管理卷等 virt-log 虚拟机日志 virt-make-fs 创建文件系统 virt-rescue 进入磁盘映像救援模式 virt-resize 修改磁盘映像文件大小,存储模式 virt-top 查看各虚拟机资源利用率情况 virt-viewer 虚拟机图形化管理功能 wirt-what 探测某程序是否运行在虚拟化环境中 virt-xml-validate 判断xml文件语法
libvirt工具安装
# CentOS6 yum install -y libvirt libvirt-client python-virtinst virt-manager # CentOS7 yum install -y libvirt libvirt-client virt-manager virt-install
启动libvirtd服务
1 systemctl start libvirtd
libvirt和libvirtd配置文件
# 库文件, master and agent all need libvirt配置文件 /etc/libvirt/libvirt.conf 守护进程配置文件 /etc/libvirt/libvirtd.conf
virt-install
简介
它是一个命令行管理工具,它能够为KVM、Xen、或其他支持libvirt API的hypervisor创建虚拟机并完成GuestOS安装
它能够基于串行控制台、VNC或SDL支持文件或图形化安装界面
安装介质
本地介质
如CDROM
通过网络方式,如NFS、HTTP或FTP服务实现
virt-install可以自动加载必要文件以启动安装过程而无须额外提供引导工具
也支持PXE安装
还可以使用现有磁盘映像文件直接启动安装过程
virt-install命令选项
一般选项 指定虚拟机名称、内存大小、VCPU个数及其它特性等
-n NAME, --name=NAME 虚拟名称,需要全局唯一 -r MEMORY, --ram=MEMORY 虚拟机内存大小,单位为MB --vcpus=VCPUS[,maxvcpus=MAX][,socket=#][,cores=#][,threads=#] VCPU个数 --cpu=CPU CPU模式及特性,如coreduo等 可以使用qemu-kvm -cpu ? 来获取支持的CPU模式
安装选项 指定安装方法、GuestOS类型
-c CDROM, --cdrom=CDROM 指定光盘安装介质 -l LOCATION, --location=LOCATION 安装源URL,支持FTP、HTTP及NFS等 ftp://x.x.x.x/path --pxe 基于PXE完成安装 --livecd 把光盘当作LiveCD --os-type = DISTRO_TYPE 操作系统类型,如linux、unix或windows等 --os-variant = DISTRO_VARIANT 某类型操作系统的发行版本,如rhel5、fedora8等 -x EXTRA, --extra-args = EXTRA 根据--location指定的方式安装GuestOS时,用于传递给内核的额外参数 例如指定kickstart文件的位置, --extra-args "ks=http://x.x.x.x/file_path" --boot=BOOTOPTS 指定安装过程完成后的配置选项 指定引导设备次序 使用指定的而非安装的kernel/initrd来引导系统启动 --boot cdrom,hd,network 指定引导次序 --boot kernel = KERNEL,initr=INITRD,kernel_args="console=/dev/ttyS0" 指定启动系统的内核及initrd文件
存储配置 指定存储类型、位置及属性等
--disk = DISKOPTS 指定存储设备及其属性 --disk /some/storage/path,opt1=var1,opt2=var2 常用选项有 device 设备类型,如cdrom、disk、floppy等,默认disk bus 磁盘总线类型,其值可以为ide、scsi、usb、virtio、或xen perms 访问权限,如rw、ro、sh(共享可读写),默认为rw size 新建磁盘映像文件大小、单位为GB cache 缓存类型、其值有none、writethrough、及writeback format 磁盘映像格式,例如raw、qcow2、vmdk等 sparse 磁盘映像使用稀疏格式,即不立即分配指定大小的空间 --nodisks 不使用本地磁盘,在LiveCD模式中使用
网络配置 指定网络接口的网络类型及接口属性如MAC地址、驱动模式等
-w NETWORK, --network=NETWORK,opt1=var1,opt2=var2 将虚拟机连入宿主机的网络中 其中NETWORK可以为 bridge=BRIDGE 连接至名为BRIDGE的桥设备 network=NAME 连接至名为NAME的网络 其它常用的选项有 model GuestOS中看到网络设备型号,如e1000、rtl8139或virtio等 mac 固定mac地址,省略此选项将使用随机地址,但无论哪种方式、对KVM来说,其产商标识符为52:54:00 --nonetwork 虚拟机不使用网络功能
图形配置 定义虚拟机显示功能相关的配置,如VNC相关配置
--graphics TYPE,opt1=var1,opt2=var2 指定图形显示相关的配置 此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口 TYPE 指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc port TYPE为vnc或spice时,所监听的端口 listen TYPE为vnc或spice是,所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值 password TYPE为vnc或spice时,为远程访问监听的服务进行指定认证密码 --noautoconsole 禁止自动连接至虚拟机的控制台
设备选项 指定文本控制台、声音设备、串行接口、并行接口、显示接口等
--serial=CHAROPTS 附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项 --serial=TYPE,opt1=var1,opt2=var2 --serial pty 创建伪终端 --serial dev,path=HOSTPATH 附加主机设备至此虚拟机 --video=VIDEO 指定显卡设备模型,可用取值为cirrus、vag、qxl或vmvga
虚拟化平台 虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等
-v, --hvm 当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化 -p, --paravirt 指定使用半虚拟化 --virt-type 使用的hypervisor,如kvm、qemu、xen等 所有可用值可以使用 virsh capabilities 命令获取
其它
--autostart 指定虚拟机是否在物理机启动后自动启动 --print-xml 如果虚拟机不需要安装过程(--import、--boot) 显示生成的XML而不是创建此虚拟机,默认情况下,此选项仍会创建磁盘映像 --force 禁止进入交互模式,如果有需要回答yes or no,自动回答yes --dry-run 执行整个创建虚拟机的过程,并不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt -d, --debug 显示debug信息
PS
尽管virt-install命令有着众多选项,但实际中,必须提供的选项仅包括
--name、--ram、--disk及安装过程相关选项
有时还需要使用--connect=CONNECT选项来指定连接至一个非默认的hypervisor
virt-install使用实例
实例一
# 基本安装 virt-install -n "centos6" -r 512 --vcpus=2 -l http://192.168.180.128/yum/centos6 \ -x "ks=http://192.168.168.180.128/centos6.x86_64.cfg" --disk path=/images/kvm/centos6.img,size=50G,sparse=yes \ --force -w bridge=br0,model=virtio
实例二
# 下面这个实例创建一个名为rhel5的虚拟机,其hypervisor为KVM,内存大小为512MB,磁盘为8G的映像文件/var/lib/libvirt/images/rhel5.img,通过boot.iso光盘镜像来引导启动安装过程 virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 \ --disk path=/var/lib/libvirt/images/rhel5.img,size=8G \ --graphics vnc --cdrom /tmp/boot.iso --os-variant rhel5
实例三
# 创建一个名为rhel6的虚拟机,其有两个虚拟CPU,安装方法为FTP,并指定了ks文件路径,磁盘映像文件为稀疏格式,连接至物理主机上的名为brnet0的桥接网络 virt-install --connect qemu:///system --virt-type kvm --name rhel6 --ram 1024 \ --vcpus 2 --network bridge=brnet0 --disk path=/iamges/kvm/rhel6.img,size=50G,sparse=yes \ --location ftp://192.168.180.128/rhel/dvd --extra_args "ks=http://192.168.180.128/rhel6.cfg" \ --os-variant rhel6 --force
实例四
# 创建一个名为rhel5的虚拟机,磁盘映像文件为稀疏模式,磁盘映像文件格式为qcow2且总线类型为virtio,安装过程不启动图形界面, # 但会启动一个串行终端将安装过程以字符形式显示在当前文本模式下,虚拟机显卡类型为cirrus virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 \ --vcpus 2,maxvcpus=4 --disk path=/images/kvm/rhel5.8.img,size=50G,format=qcow2,bus=virtio,sparse=yes \ --network bridge=brnet0,model=virio --nographics --location ftp://192.168.180.128/pub \ --extra-agrs "ks=http://192.168.180.128/rhel5.8.cfg console=ttyS0 serial" \ --os-variant rhel5 --force --video=cirrus
实例五
# 利用已经存在的磁盘映像文件(已经安装好的系统)创建一个名为rhel5.8的虚拟机 virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import # 添加一个物理终端,并添加控制台到终端设备上 virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import --serial=pty --console=pty --nographics # 回到原终端 " Ctrl + ] " # 重新连接 virsh console Domain_ID
PS
每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML
virsh工具使用
帮助
virsh help
man virsh
virsh help <options>
命令解析
Domain Management (help keyword 'domain'): * attach-device 从一个XML文件附加装置 * attach-disk 附加磁盘设备 * attach-interface 获得网络界面 autostart 自动开始一个域 blkdeviotune 设定或者查询块设备 I/O 调节参数。 blkiotune 获取或者数值 blkio 参数 blockcommit 启动块提交操作。 blockcopy 启动块复制操作。 blockjob 管理活跃块操作 blockpull 使用其后端映像填充磁盘。 blockresize 创新定义域块设备大小 change-media 更改 CD 介质或者软盘驱动器 * console 连接到客户会话 cpu-baseline 计算基线 CPU cpu-compare 使用 XML 文件中描述的 CPU 与主机 CPU 进行对比 * cpu-stats 显示域 cpu 统计数据 * create 从一个 XML 文件创建一个域 define 从一个 XML 文件定义(但不开始)一个域 desc 显示或者设定域描述或者标题 * destroy 销毁(停止)域 * detach-device 从一个 XML 文件分离设备 * detach-disk 分离磁盘设备 * detach-interface 分离网络界面 domdisplay 域显示连接 URI domfsfreeze Freeze domain's mounted filesystems. domfsthaw Thaw domain's mounted filesystems. domfsinfo Get information of domain's mounted filesystems. domfstrim 在域挂载的文件系统中调用 fstrim。 domhostname 输出域主机名 domid 把一个域名或 UUID 转换为域 id domif-setlink 设定虚拟接口的链接状态 domiftune 获取/设定虚拟接口参数 domjobabort 忽略活跃域任务 domjobinfo 域任务信息 domname 将域 id 或 UUID 转换为域名 domrename rename a domain dompmsuspend 使用电源管理功能挂起域 dompmwakeup 从 pmsuspended 状态唤醒域 domuuid 把一个域名或 id 转换为域 UUID domxml-from-native 将原始配置转换为域 XML domxml-to-native 将域 XML 转换为原始配置 dump 把一个域的内核 dump 到一个文件中以方便分析 * dumpxml XML 中的域信息 edit 编辑某个域的 XML 配置 event Domain Events inject-nmi 在虚拟机中输入 NMI iothreadinfo view domain IOThreads iothreadpin control domain IOThread affinity iothreadadd add an IOThread to the guest domain iothreaddel delete an IOThread from the guest domain send-key 向虚拟机发送序列号 send-process-signal 向进程发送信号 lxc-enter-namespace LXC 虚拟机进入名称空间 managedsave 管理域状态的保存 managedsave-remove 删除域的管理保存 memtune 获取或者数值内存参数 perf Get or set perf event metadata show or set domain's custom XML metadata migrate 将域迁移到另一个主机中 migrate-setmaxdowntime 设定最大可耐受故障时间 migrate-compcache 获取/设定压缩缓存大小 migrate-setspeed 设定迁移带宽的最大值 migrate-getspeed 获取最长迁移带宽 migrate-postcopy Switch running migration from pre-copy to post-copy numatune 获取或者数值 numa 参数 qemu-attach QEMU 附加 qemu-monitor-command QEMU 监控程序命令 qemu-monitor-event QEMU Monitor Events qemu-agent-command QEMU 虚拟机代理命令 * reboot 重新启动一个域 reset 重新设定域 * restore 从一个存在一个文件中的状态恢复一个域,重新继续运行 * resume 重新恢复一个域 * save 把一个域的状态保存到一个文件,挂起 save-image-define 为域的保存状态文件重新定义 XML save-image-dumpxml 在 XML 中保存状态域信息 save-image-edit 为域保存状态文件编辑 XML schedinfo 显示/设置日程安排变量 screenshot 提取当前域控制台快照并保存到文件中 set-user-password set the user password inside the domain * setmaxmem 改变最大内存限制值 * setmem 改变内存的分配 * setvcpus 改变虚拟 CPU 的号 * shutdown 关闭一个域 * start 开始一个(以前定义的)非活跃的域 * suspend 挂起一个域 ttyconsole tty 控制台 undefine 取消定义一个域 update-device 从 XML 文件中关系设备 * vcpucount 域 vcpu 计数 * vcpuinfo 详细的域 vcpu 信息 * vcpupin 控制或者查询域 vcpu 亲和性 emulatorpin 控制火车查询域模拟器亲和性 * vncdisplay vnc 显示 guestvcpus query or modify state of vcpu in the guest (via agent) setvcpu attach/detach vcpu or groups of threads domblkthreshold set the threshold for block-threshold event for a given block device or it's backing chain element Domain Monitoring (help keyword 'monitor'): domblkerror 在块设备中显示错误 domblkinfo 域块设备大小信息 * domblklist 列出所有域块 domblkstat 获得域设备块状态 domcontrol 域控制接口状态 domif-getlink 获取虚拟接口链接状态 domifaddr Get network interfaces' addresses for a running domain * domiflist 列出所有域虚拟接口 domifstat 获得域网络接口状态 * dominfo 域信息 dommemstat 获取域的内存统计 * domstate 域状态 * domstats get statistics about one or multiple domains * domtime domain time * list 列出域 Host and Hypervisor (help keyword 'host'): allocpages Manipulate pages pool size * capabilities 性能 * cpu-models CPU models domcapabilities domain capabilities freecell NUMA可用内存 freepages NUMA free pages hostname 打印管理程序主机名 * maxvcpus 连接 vcpu 最大值 node-memory-tune 获取或者设定节点内存参数 nodecpumap 节点 cpu 映射 nodecpustats 输出节点的 cpu 状统计数据。 * nodeinfo 节点信息 nodememstats 输出节点的内存状统计数据。 nodesuspend 在给定时间段挂起主机节点 * sysinfo 输出 hypervisor sysinfo * uri 打印管理程序典型的URI * version 显示版本 Interface (help keyword 'interface'): iface-begin 生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback) * iface-bridge 生成桥接设备并为其附加一个现有网络设备 iface-commit 提交 iface-begin 后的更改并释放恢复点 * iface-define 定义(但不启动)XML文件中的物理主机接口 * iface-destroy 删除物理主机接口(启用它请执行 "if-down") * iface-dumpxml XML 中的接口信息 iface-edit 为物理主机界面编辑 XML 配置 * iface-list 物理主机接口列表 iface-mac 将接口名称转换为接口 MAC 地址 iface-name 将接口 MAC 地址转换为接口名称 iface-rollback 恢复到之前保存的使用 iface-begin 生成的更改 * iface-start 启动物理主机接口(启用它请执行 "if-up") * iface-unbridge 分离其辅助设备后取消定义桥接设备 * iface-undefine 取消定义物理主机接口(从配置中删除) Network Filter (help keyword 'filter'): * nwfilter-define 使用 XML 文件定义或者更新网络过滤器 * nwfilter-dumpxml XML 中的网络过滤器信息 * nwfilter-edit 为网络过滤器编辑 XML 配置 * nwfilter-list 列出网络过滤器 * nwfilter-undefine 取消定义网络过滤器 Networking (help keyword 'network'): net-autostart 自动开始网络 net-create 从一个 XML 文件创建一个网络 net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy 销毁(停止)网络 net-dhcp-leases print lease info for a given network net-dumpxml XML 中的网络信息 net-edit 为网络编辑 XML 配置 net-event Network Events net-info 网络信息 * net-list 列出网络 net-name 把一个网络UUID 转换为网络名 net-start 开始一个(以前定义的)不活跃的网络 net-undefine undefine a persistent network net-update 更新现有网络配置的部分 net-uuid 把一个网络名转换为网络UUID Node Device (help keyword 'nodedev'): nodedev-create 根据节点中的 XML 文件定义生成设备 nodedev-destroy 销毁(停止)节点中的设备 nodedev-detach 将节点设备与其设备驱动程序分离 nodedev-dumpxml XML 中的节点设备详情 nodedev-list 这台主机中中的枚举设备 nodedev-reattach 重新将节点设备附加到他的设备驱动程序中 nodedev-reset 重置节点设备 nodedev-event Node Device Events Secret (help keyword 'secret'): secret-define 定义或者修改 XML 中的 secret secret-dumpxml XML 中的 secret 属性 secret-event Secret Events secret-get-value secret 值输出 secret-list 列出 secret secret-set-value 设定 secret 值 secret-undefine 取消定义 secret Snapshot (help keyword 'snapshot'): * snapshot-create 使用 XML 生成快照 snapshot-create-as 使用一组参数生成快照 snapshot-current 获取或者设定当前快照 * snapshot-delete 删除域快照 snapshot-dumpxml 为域快照转储 XML * snapshot-edit 编辑快照 XML * snapshot-info 快照信息 * snapshot-list 为域列出快照 snapshot-parent 获取快照的上级快照名称 snapshot-revert 将域转换为快照 Storage Pool (help keyword 'pool'): find-storage-pool-sources-as 找到潜在存储池源 find-storage-pool-sources 发现潜在存储池源 pool-autostart 自动启动某个池 pool-build 建立池 pool-create-as 从一组变量中创建一个池 pool-create 从一个 XML 文件中创建一个池 pool-define-as 在一组变量中定义池 pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file pool-delete 删除池 pool-destroy 销毁(删除)池 pool-dumpxml XML 中的池信息 pool-edit 为存储池编辑 XML 配置 pool-info 存储池信息 pool-list 列出池 pool-name 将池 UUID 转换为池名称 pool-refresh 刷新池 pool-start 启动一个(以前定义的)非活跃的池 pool-undefine 取消定义一个不活跃的池 pool-uuid 把一个池名称转换为池 UUID pool-event Storage Pool Events Storage Volume (help keyword 'volume'): vol-clone 克隆卷。 vol-create-as 从一组变量中创建卷 vol-create 从一个 XML 文件创建一个卷 vol-create-from 生成卷,使用另一个卷作为输入。 vol-delete 删除卷 vol-download 将卷内容下载到文件中 vol-dumpxml XML 中的卷信息 vol-info 存储卷信息 vol-key 为给定密钥或者路径返回卷密钥 vol-list 列出卷 vol-name 为给定密钥或者路径返回卷名 vol-path 为给定密钥或者路径返回卷路径 vol-pool 为给定密钥或者路径返回存储池 vol-resize 创新定义卷大小 vol-upload 将文件内容上传到卷中 vol-wipe 擦除卷 Virsh itself (help keyword 'virsh'): cd 更改当前目录 echo echo 参数 exit 退出这个非交互式终端 help 打印帮助 pwd 输出当前目录 quit 退出这个非交互式终端 connect 连接(重新连接)到 hypervisor
KVM Managerment Tools
http://www.linux-kvm.org/page/Management_Tools
常用
oVirt 较轻量
ConVirt
Eucalyptus
OpenNebula
openQRM