长期支持版本

    社区创新版本

      管理虚拟机

      概述

      StratoVirt可以查询虚拟机信息并对虚拟机的资源和生命周期进行管理。由于StratoVirt使用QMP管理虚拟机,所以查询虚拟机信息,也需要先连接到虚拟机。

      查询虚拟机信息

      简介:

      StratoVirt可以查询虚拟机状态、vCPU拓扑信息、vCPU上线情况等。

      查询状态

      使用query-status命令查询虚拟机的运行状态。

      • 用法:

        { "execute": "query-status" }

      • 示例:

      <- { "execute": "query-status" }
      -> { "return": { "running": true,"singlestep": false,"status": "running" } 
      

      查询拓扑

      使用query-cpus命令查询所有CPU的拓扑结构。

      • 用法:

        { "execute": "query-cpus" }

      • 示例:

      <- { "execute": "query-cpus" }
      -> {"return":[{"CPU":0,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom_path":"/machine/unattached/device[0]","thread_id":8439},{"CPU":1,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom_path":"/machine/unattached/device[1]","thread_id":8440}]}
      

      查询vCPU上线情况

      使用query-hotpluggable-cpus命令查询所有vCPU的online/offline情况。

      • 用法:

        { "execute": "query-hotpluggable-cpus" }

      • 示例:

      <- { "execute": "query-hotpluggable-cpus" }
      -> {"return":[{"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom-path":"/machine/unattached/device[0]","type":"host-x86-cpu","vcpus-count":1},{"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom-path":"/machine/unattached/device[1]","type":"host-x86-cpu","vcpus-count":1}]}
      

      其中,online的vCPU具有qom-path项,offline的vCPU则没有。

      管理虚拟机生命周期

      简介

      StratoVirt可以对虚拟机进行启动、暂停、恢复、退出等生命周期进行管理。

      创建并启动虚拟机

      根据虚拟机配置可知,可以通过命令行参数或json文件指定虚拟机配置,并在主机通过stratovirt命令创建并启动虚拟机。

      • 使用命令行参数给出虚拟机配置,创建并启动虚拟机的命令如下:
      $ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ...
      
      • 使用json文件给出虚拟机配置,创建并启动虚拟机的命令如下:
      $ /path/to/stratovirt \
          -config /path/to/json \
          -api-channel unix:/path/to/socket
      

      其中,/path/to/json为json配置文件的路径。/path/to/socket为用户指定的socket文件(如/tmp/stratovirt.socket),使用上述命令会自动创建socket文件。为确保虚拟机能够正常启动,在创建socket文件前确保该文件不存在。

      虚拟机启动后,内部会有eth0和eth1两张网卡。这两张网卡预留用于网卡热插拔。热插的第一张网卡是eth0,热插的第二张网卡是eth1,目前只支持热插2张virtio-net网卡。

      连接虚拟机

      StratoVirt当前采用QMP管理虚拟机,暂停、恢复、退出虚拟机等操作需要通过QMP连接到虚拟机进行管理。

      在主机上打开新的命令行窗口B,并使用root权限进行api-channel连接,参考命令如下:

      # ncat -U /path/to/socket
      

      连接建立后,会收到来自StratoVirt的问候消息,如下所示:

      {"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}}
      

      现在,可以在窗口B中输入QMP命令来管理虚拟机。

      QMP提供了stop、cont、quit和query-status等来管理和查询虚拟机状态。

      管理虚拟机的QMP命令均在窗口B中进行输入。符号:<-表示命令输入,->表示QMP结果返回。

      暂停虚拟机

      QMP提供了stop命令用于暂停虚拟机,即暂停虚拟机所有的vCPU。命令格式如下:

      {"execute":"stop"}

      示例:

      使用stop暂停该虚拟机的命令和回显如下:

      <- {"execute":"stop"}
      -> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}}
      -> {"return":{}}
      

      恢复虚拟机

      QMP提供了cont命令用于恢复处于暂停状态suspend的虚拟机,即恢复虚拟机所有vCPU的运行。命令格式如下:

      {"execute":"cont"}

      示例:

      使用cont恢复该虚拟机的命令和回显如下:

      <- {"execute":"cont"}
      -> {"event":"RESUME","data":{},"timestamp":{"seconds":1583908853,"microseconds":411394}}
      -> {"return":{}}
      

      退出虚拟机

      QMP提供了quit命令用于退出虚拟机,即退出StratoVirt进程。命令格式如下:

      {"execute":"quit"}

      示例:

      <- {"execute":"quit"}
      -> {"return":{}}
      -> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}}
      

      管理虚拟机资源

      热插拔磁盘

      StratoVirt支持在虚拟机运行过程中调整磁盘数量,即在不中断业务前提下,增加或删除虚拟机磁盘。

      热插磁盘

      用法:

      {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}}
      {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}}
      

      参数

      • blockdev-add中的node-name要和device_add中的id一致,如上都是drive-0。

      • /path/to/block是被热插磁盘的镜像路径,不能是启动rootfs的磁盘镜像。

      • 对于addr来说,它从0x0开始与虚拟机的vda映射,0x1与vdb映射,以此类推。为了兼容QMP协议,"addr"也可以用"lun"代替,但是lun=0与客户机的vdb映射。

      • 由于stratovirt支持的最大virtio-blk磁盘数量是4个,热插磁盘时请注意规格约束。

      示例

      <- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}}
      -> {"return": {}}
      <- {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}}
      -> {"return": {}}
      

      热拔磁盘

      用法:

      {"execute": "device_del", "arguments": {"id":"drive-0"}}

      参数:

      id 为热拔磁盘的ID号。

      示例

      <- {"execute": "device_del", "arguments": {"id": "drive-0"}}
      -> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}}
      -> {"return": {}}
      

      热插拔网卡

      StratoVirt支持在虚拟机运行过程中调整网卡数量,即在不中断业务前提下,给虚拟机增加或删除网卡。

      热插网卡

      准备工作(需要使用root权限)

      1. 创建并启用Linux网桥,例如网桥名为 qbr0 的参考命令如下:
      # brctl addbr qbr0
      # ifconfig qbr0 up
      
      1. 创建并启用 tap 设备,例如设备名为 tap0 的参考命令如下:
      # ip tuntap add tap0 mode tap
      # ifconfig tap0 up
      
      1. 添加 tap 设备到网桥:
      # brctl addif qbr0 tap0
      

      用法

      {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}}
      {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}}
      

      参数

      • netdev_add中的id应该和device_add中的id一致,ifname是后端的tap设备名称。

      • 对于addr来说,它从0x0开始与虚拟机的eth0映射,0x1和虚拟机的eth1映射。

      • 由于stratovirt支持的最大virtio-net数量为2个,热插网卡时请注意规格约束。

      示例

      <- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}}
      -> {"return": {}}
      <- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} 
      -> {"return": {}}
      

      其中,addr:0x0,对应虚拟机内部的eth0。

      热拔网卡

      用法

      {"execute": "device_del", "arguments": {"id": "net-0"}}

      参数

      id:网卡的ID号,例如net-0。

      示例

      <- {"execute": "device_del", "arguments": {"id": "net-0"}}
      -> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}}
      -> {"return": {}}
      

      Ballon设备使用

      使用balloon设备可以从虚拟机回收空闲的内存。Balloon通过qmp命令来调用。qmp命令使用如下:

      用法:

      {"execute": "balloon", "arguments": {"value": 2147483648‬}}
      

      参数:

      • value: 想要设置的guest内存大小值,单位为字节,内存压缩以页为粒度。如果该值大于虚拟机启动时配置的内存值,则以启动时配置的内存值为准。

      示例:

      启动时配置的内存大小为4GiB,在虚拟机内部通过free命令查询虚拟机空闲内存大于2GiB,那么可以通过qmp命令设置guest内存大小为2147483648字节。

      <- {"execute": "balloon", "arguments": {"value": 2147483648‬}}
      -> {"return": {}}
      

      查询虚拟机的当前实际内存:

      <- {"execute": "query-balloon"}
      -> {"return":{"actual":2147483648}}
      

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份