libvirt提供了虚拟化的一些操作和管理方式,有libvirt API,virsh,libvirtd等,而virsh是libvirt API的CLI封装;libvirtd顾名思义,应该就是一个daemon进程
对于接口,可以简单通过openstack里nova测试一下
先随便找一台虚拟机,通过nova接口查询一下instanceId
$ nova show e608ab49-4ad3-43f1-9b06-13704a803790 +--------------------------------------------------+-------------------------------------------------------------------+ | Property | Value | +--------------------------------------------------+-------------------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-SRV-ATTR:instance_name | instance-00092797 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | - | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2016-07-18T05:13:42.000000 | | OS-SRV-USG:terminated_at | - | | accessIPv4 | | | accessIPv6 | | | config_drive | 1 | | created | 2016-07-18T05:12:30Z | | flavor | flavor_1 (1) | | hostId | a79519ce4511dccf36123fb973347e9b5f19865ec150433acb41c445 | | hypervisor_type | qemu | | id | e608ab49-4ad3-43f1-9b06-13704a803790 | | idc_58cda77a95d04eff99d22d32b23bde1c network | 10.180.177.87 | | image | Private_28196_Set_Password (9f014e8b-0daf-4d9c-b2a6-06bd3d19d454) | | key_name | dev | | metadata | {} | | name | lihui-testing-libvirtd-1 | | os-extended-volumes:volumes_attached | [] | | os-netease-extended-volumes:volumes_attached | [] | | os-server-status | up | | os_type | linux | | private_58cda77a95d04eff99d22d32b23bde1c network | 10.180.64.11 | | progress | 0 | | security_groups | default | | status | ACTIVE | | tenant_id | 58cda77a95d04eff99d22d32b23bde1c | | updated | 2016-07-18T09:55:35Z | | use_ceph | yes | | user_id | 18b34b038ddd47dcba37939c8712ba0e | +--------------------------------------------------+-------------------------------------------------------------------+
此时虚拟机是启动状态,通过virsh来执行shutdown
$ sudo virsh shutdown instance-00092797 Domain instance-00092797 is being shutdown
此时再来观察虚拟机状态,可以发现虚拟机的确被关闭了
$ nova show e608ab49-4ad3-43f1-9b06-13704a803790 | grep vm_state | OS-EXT-STS:vm_state | stopped | $ nova show e608ab49-4ad3-43f1-9b06-13704a803790 | grep os-server-status | os-server-status | down |
从这里可以看到,和nova stop的效果是一致的,这是因为virsh是libvirt API的命令行封装形式,而nova是openstack里主机API的封装形式,而主机API调用最终的执行也是会通过调用libvirt API来执进行虚拟机的操作
一图解千愁,来自IBM文档库,搜索libvirt即有
从下往上,通过virsh或者其他调用libvirt API,daemon响应后,通过对不同驱动的支持(比如QEMU驱动,XEN驱动等)来调不同的Hypervisor最终实现各种虚拟化的操作
但对于libvirt API的调用和libvirtd的响应,以及执行是否需要通过虚拟机所在的节点上的libvirtd daemon来进行操作,还没完全弄清,待继续研究~!