虚拟机配置
概述
不同于Libvirt通过xml文件配置虚拟机的方式,StratoVirt可以通过命令行参数指定配置,也可以通过json文件进行配置。配置包括虚拟机CPU、内存、磁盘等信息。这里给出两种方式的具体操作方法。
同时使用命令行配置和json文件配置时,以命令行配置为准。
本文中的/path/to/socket为用户自定义路径下的socket文件。
规格说明
- 虚拟机CPU个数:[1, 254]
- 虚拟机内存大小:[128M, 512G]
- 虚拟机磁盘个数(包括热插的磁盘):[0, 6]
- 虚拟机网卡个数(包括热插的网卡):[0, 2]
- 虚拟机console设备仅支持单路连接
- x86_64平台,除了磁盘和网卡,最多配置2个其他设备; AArch64平台,除了磁盘和网卡,最多配置12个其他设备。
最小配置
StratoVirt能够运行的最小配置为:
- 有一个PE格式的Linux内核文件
- 将rootfs镜像设置成virtio-blk设备,并添加到内核参数中
- 使用api-channel来控制StratoVirt
- 如果要使用ttyS0登录,添加一个串口到启动命令行,并将ttyS0添加到内核参数中
命令行配置
概述
命令行配置即通过命令行参数直接指定虚拟机配置内容。
命令格式
使用cmdline配置的命令格式如下:
$ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] …
使用说明
首先,为确保可以创建api-channel需要的socket,可以参考如下命令清理环境:
$ rm [参数] [用户自定义socket文件路径]
然后,运行cmdline命令。
$ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ...
参数说明
cmdline命令行配置参数请参见下表:
表1 :命令行配置参数说明
参数 | 参数选项 | 说明 |
---|---|---|
-name | VMName | 配置虚拟机名称 (字符长度:1-255字符) |
-kernel | /path/to/vmlinux.bin | 配置内核镜像 |
-append | console=ttyS0 root=/dev/vda reboot=k panic=1 | 配置内核命令行参数 |
-initrd | /path/to/initrd.img | 配置initrd文件 |
-smp | [cpus=]个数 | 配置cpu个数,范围[1, 254] |
-m | 内存大小(字节单位)、内存大小M(M单位)、内存大小G(G单位) | 配置内存大小,范围[128M, 512G] |
-drive | id=rootfs,file=/path/to/rootfs[,readonly=false,direct=true,serial=serial_num] | 配置virtio-blk设备 |
-netdev | id=iface_id,netdev=tap0[,mac=mac_address] | 配置virtio-net设备 |
-chardev | id=console_id,path=/path/to/socket | 配置virtio-console,运行前须保证socket文件不存在 |
-device | vsock,id=vsock_id,guest-cid=3 | 配置vhost-vsock |
-api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 |
-serial | stdio | 配置串口设备 |
-D | /path/to/logfile | 配置日志文件 |
-pidfile | /path/to/pidfile | 配置pid文件,必须和-daemonize一起使用。运行前须保证pid文件不存在 |
-disable-seccomp | NA | 关闭Seccomp,默认打开 |
-omit_vm_memory | NA | 当进程panic时,不dump虚拟机内存 |
-daemonize | NA | 开启进程daemon化 |
配置示例
删除socket文件,确保可以创建api-channel。
$ rm -f /tmp/stratovirt.socket
运行StratoVirt。
$ /path/to/stratovirt \
-kernel /path/to/vmlinux.bin \
-append console=ttyS0 root=/dev/vda reboot=k panic=1 \
-drive file=/home/rootfs.ext4,id=rootfs,readonly=false \
-api-channel unix:/tmp/stratovirt.socket \
-serial stdio
运行成功后,将根据指定的配置参数创建并启动虚拟机。
json配置
概述
使用json文件配置即在运行StratoVirt创建虚拟机时,读取给定的json文件,该文件中包含了对虚拟机的相关配置。
命令格式
使用json文件配置虚拟机的命令格式如下,其中 /path/to/json 为对应文件的路径。
$ /path/to/stratovirt -config /path/to/json -[参数] [参数选项]
使用说明
编写json文件,将虚拟机配置写入该文件。
执行StratoVirt创建虚拟机。
$ /path/to/stratovirt -config /path/to/json -[参数] [参数选项]
参数说明
json文件中可配置字段及含义请参见下表:
表2:配置文件的字段
配置参数 | 配置参数选项 | 说明 |
---|---|---|
boot-source | “kernel_image_path”: “/path/to/vmlinux.bin”,”boot_args”: “console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet”,”initrd_fs_path”: “/path/to/initrd.img” | 配置内核镜像和内核参数, 参数initrd_fs_path 可选。 |
machine-config | “name”: “abc”,”vcpu_count”: 4,”mem_size”: 805306368,”omit_vm_memory”: true | 配置虚拟cpu和内存大小,参数 omit_vm_memory 可选。 |
drive | “drive_id”: “rootfs”,”path_on_host”: “/path/to/rootfs.ext4”,”read_only”: false,”direct”: true,”serial_num”: “xxxxx” | 配置virtio-blk磁盘 ,参数serial_num 可选。 |
net | “iface_id”: “net0”,”host_dev_name”: “tap0”,”mac”: “xx:xx:xx:xx:xx:xx” | 配置virtio-net网卡,参数mac 可选 |
console | “console_id”: “charconsole0”,”socket_path”: “/path/to/socket” | 配置virtio-console串口,运行前须保证socket文件不存在 |
vsock | “vsock_id”: “vsock0”,”guest_cid”: 3 | 配置virtio-vsock设备 |
serial | “stdio”: true | 配置串口设备 |
使用json运行的参数请参见下表:
表3:使用json运行的参数
参数 | 参数选项 | 说明 |
---|---|---|
-config | /path/to/json | 配置文件的路径 |
-api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 |
-D | /path/to/logfile | 配置日志文件 |
-pidfile | /path/to/pidfile | 配置pid文件,必须配合daemonize使用。运行前须保证pid文件不存在 |
-disable-seccomp | NA | 关闭Seccomp,默认打开 |
-daemonize | NA | 开启进程daemon化 |
配置示例:
- 创建json文件,例如/home/config.json,其内容如下:
{
"boot-source": {
"kernel_image_path": "/path/to/vmlinux.bin",
"boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet"
},
"machine-config": {
"name": "abc",
"vcpu_count": 2,
"mem_size": 268435456,
"omit_vm_memory": false
},
"drive": [
{
"drive_id": "rootfs",
"path_on_host": "/path/to/rootfs.ext4",
"direct": true,
"read_only": false,
"serial_num": "abcd"
}
],
"net": [
{
"iface_id": "net0",
"host_dev_name": "tap0",
"mac": "0e:90:df:9f:a8:88"
}
],
"console": {
"console_id": "charconsole0",
"socket_path": "/path/to/console.socket"
},
"serial": {
"stdio": true
},
"vsock": {
"vsock_id": "vsock-123321132",
"guest_cid": 4
}
}
- 运行StratoVirt,读取json文件配置创建并启动虚拟机。
$ /path/to/stratovirt \
-config /home/config.json \
-api-channel unix:/tmp/stratovirt.socket
执行成功后,虚拟机创建并启动成功。