kvm 管理工具
对于管理kvm 其实已经有了很多比较成熟的工具,常用的比如以下这种:
libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
Virsh:基于 libvirt 的 命令行工具 (CLI)
virt-v2v:虚机格式迁移工具 #vsphere 出的一个工具,对于开源的linux来说不太友好。
virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等
目前用的比较多的是libvirt 下的virsh 的工具,管理虚拟机经常会遇到以下情况,比如磁盘扩容,新挂载磁盘,迁移等等。
磁盘扩容
一般的kvm 磁盘扩容会有两种情况:
1.新挂载磁盘
virsh attch-disk instance_name ./vdisk #通过virsh 进行挂载,但是虚拟机重启后会失效。而且经常挂不上
比较好的办法是通过修改配置文件的方式进行挂载,将虚拟机的xml 配置文件加上以下信息:
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" cache="none" /> <!--cache中的none表示直接从硬盘写到disk镜像文件,性能差但是不会丢数据,write-back 模式正好相反-->
<source file="/var/lib/libvirt/images/test.qcow2" /> <!--目的镜像路径-->
<target dev="hda" bus="virtio" />
</disk>
然后重新define 和start 就可以了
2.直接扩容vdisk
之前说过raw经常用于kvm 扩容的中间格式使用,比如vmdk 这种扩容就需要转成raw 后,将新的空白的raw 虚拟硬盘>> 进去,再转会vmdk,比较麻烦,而且需要关机进行:
dd if=/dev/zero bs=1024MB count=10 >> vdisk #增加10G
但是qcow2 可以直接增加硬盘大小,且可以在线扩容:
root@10.1.99.60:~# qemu-img resize 2.img +3G
Image resized.
root@10.1.99.60:~# qemu-img info 2.img
image: 2.img
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 200K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
kvm 迁移
1.kvm 静态迁移
静态迁移没什么好说的,关机,拷贝,修改配置文件,开机即可,最好保持2个节点之间qemu的版本一致。
2.kvm 动态迁移
virsh 自带了migrate 参数。-live 表示动态迁移,但是有个很大的限制条件就是需要2个节点之间共享存储。由此可见,所谓的动态迁移迁移的并非数据,只是kvm 在节点上的配置信息,以及内存数据而且,所以迁移速度很快,且不会宕机:
virsh migrate --live --verbose instance_01 qemu+ssh://10.1.1.2/opt tcp://192.168.159.160
其他
附上从其他人那找来的virsh 命令清单以及注释:
virsh
help 打印帮助
attach-device 从一个XML文件附加装置
attach-disk 附加磁盘设备
attach-interface 获得网络界面
autostart 自动开始一个域
capabilities 性能
cd change the current directory
connect 连接(重新连接)到 hypervisor
console 连接到客户会话
cpu-baseline compute baseline CPU
cpu-compare compare host CPU with a CPU described by an XML file
create 从一个 XML 文件创建一个域
start 开始一个(以前定义的)非活跃的域
destroy 删除一个域
detach-device 从一个 XML 文件分离设备
detach-disk 分离磁盘设备
detach-interface 分离网络界面
define 从一个 XML 文件定义(但不开始)一个域
domid 把一个域名或 UUID 转换为域 id
domuuid 把一个域名或 id 转换为域 UUID
dominfo 域信息
domjobinfo domain job information
domjobabort abort active domain job
domname 将域 id 或 UUID 转换为域名
domstate 域状态
domblkstat 获得域设备块状态
domifstat 获得域网络接口状态
dommemstat get memory statistics for a domain
domblkinfo domain block device size information
domxml-from-native Convert native config to domain XML
domxml-to-native Convert domain XML to native config
dumpxml XML 中的域信息
edit 编辑某个域的 XML 配置
find-storage-pool-sources 发现潜在存储池源
find-storage-pool-sources-as 找到潜在存储池源
freecell NUMA可用内存
hostname 打印管理程序主机名
list 列出域
migrate 将域迁移到另一个主机中
migrate-setmaxdowntime set maximum tolerable downtime
net-autostart 自动开始网络
net-create 从一个 XML 文件创建一个网络
net-define 从一个 XML 文件定义(但不开始)一个网络
net-destroy 删除一个网络
net-dumpxml XML 中的网络信息
net-edit 为网络编辑 XML 配置
net-list 列出网络
net-name 把一个网络UUID 转换为网络名
net-start 开始一个(以前定义的)不活跃的网络
net-undefine 取消定义一个非活跃的网络
net-uuid 把一个网络名转换为网络UUID
iface-list list physical host interfaces
iface-name convert an interface MAC address to interface name
iface-mac convert an interface name to interface MAC address
iface-dumpxml interface information in XML
iface-define define (but don't start) a physical host interface from an XML file
iface-undefine undefine a physical host interface (remove it from configuration)
iface-edit edit XML configuration for a physical host interface
iface-start start a physical host interface (enable it / "if-up")
iface-destroy destroy a physical host interface (disable it / "if-down")
managedsave managed save of a domain state
nodeinfo 节点信息
nodedev-list 这台主机中中的枚举设备
nodedev-dumpxml XML 中的节点设备详情
nodedev-dettach dettach node device from its device driver
nodedev-reattach reattach node device to its device driver
nodedev-reset 重置节点设备
nodedev-create create a device defined by an XML file on the node
nodedev-destroy destroy a device on the node
nwfilter-define define or update a network filter from an XML file
nwfilter-undefine undefine a network filter
nwfilter-dumpxml network filter information in XML
nwfilter-list list network filters
nwfilter-edit edit XML configuration for a network filter
pool-autostart 自动启动某个池
pool-build 建立池
pool-create 从一个 XML 文件中创建一个池
pool-create-as 从一组变量中创建一个池
pool-define 在一个 XML 文件中定义(但不启动)一个池
pool-define-as 在一组变量中定义池
pool-destroy 销毁池
pool-delete 删除池
pool-dumpxml XML 中的池信息
pool-edit 为存储池编辑 XML 配置
pool-info 存储池信息
pool-list 列出池
pool-name 将池 UUID 转换为池名称
pool-refresh 刷新池
pool-start 启动一个(以前定义的)非活跃的池
pool-undefine 取消定义一个不活跃的池
pool-uuid 把一个池名称转换为池 UUID
secret-define define or modify a secret from an XML file
secret-dumpxml secret attributes in XML
secret-set-value set a secret value
secret-get-value Output a secret value
secret-undefine undefine a secret
secret-list list secrets
pwd print the current directory
quit 退出这个非交互式终端
exit 退出这个非交互式终端
reboot 重新启动一个域
restore 从一个存在一个文件中的状态恢复一个域
resume 重新恢复一个域
save 把一个域的状态保存到一个文件
schedinfo 显示/设置日程安排变量
dump 把一个域的内核 dump 到一个文件中以方便分析
shutdown 关闭一个域
setmem 改变内存的分配
setmaxmem 改变最大内存限制值
setvcpus 改变虚拟 CPU 的号
suspend 挂起一个域
ttyconsole tty 控制台
undefine 取消定义一个非活跃的域
update-device update device from an XML file
uri 打印管理程序典型的URI
vol-create 从一个 XML 文件创建一个卷
vol-create-from create a vol, using another volume as input
vol-create-as 从一组变量中创建卷
vol-clone clone a volume.
vol-delete 删除卷
vol-wipe wipe a vol
vol-dumpxml XML 中的卷信息
vol-info 存储卷信息
vol-list 列出卷
vol-pool returns the storage pool for a given volume key or path
vol-path returns the volume path for a given volume name or key
vol-name returns the volume name for a given volume key or path
vol-key returns the volume key for a given volume name or path
vcpuinfo 域 vcpu 的信息
vcpupin 控制域 vcpu affinity
version 显示版本
vncdisplay vnc 显示
snapshot-create Create a snapshot
snapshot-current Get the current snapshot
snapshot-delete Delete a domain snapshot
snapshot-dumpxml Dump XML for a domain snapshot
snapshot-list List snapshots for a domain
snapshot-revert Revert a domain to a snapshot