QEMU-KVM基本操作

本文主要介绍KVM虚拟机的一些基本实践操作。对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的。

一、安装与启动

1. KVM模块检查

(1)查看当前Linux系统核心是否包含KVM模块(Linux内核2.6.20及以上版本包含KVM模块):

uname` `-r``#或``cat` `/proc/version``#或``dmesg | ``grep` `Linux

(2)检查当前Linux系统是否已加载KVM核心模块:

lsmod | ``grep` `kvm

2. 安装libvirt,qemu-kvm

yum ``install` `libvirt libvirt-devel qemu-kvm

3. 启动libvirtd

systemctl start libvirtd``systemctl ``enable` `libvirtd

二、连接配置

1. 本地控制配置

libvirt安装后默认配置就可以连接到本地libvirtd。

测试是否可用:

virsh list

不可用重启试试:

systemctl restart libvirtd

2. 远程控制配置

只需修改服务端配置项,客户端保持默认配置即可。

(1)修改服务端配置文件/etc/libvirt/libvirtd.conf

listen_tls = 0``listen_tcp = 1``tcp_port = ``"16509"``auth_tcp = ``"none"

(2)修改服务端/etc/sysconfig/libvirtd

LIBVIRTD_ARGS=``"--listen"

(3)重启服务端libvirtd服务

systemctl restart libvirtd

(4)客户端保持默认配置,连接服务端的libvirtd服务执行命令

示例:

virsh -c qemu+tcp:``//root``@192.168.2.102:16509``/system` `list --all

此命令连接到服务端192.168.2.102的libvirtd服务,执行命令 virsh list --all。

这里使用的是tcp连接,也可使用其它连接方式,如TLS、ssl等,但配置文件需要做相应修改。

三、日志配置

libvirtd的日志文件一般为:/var/log/libvirt/libvirtd.log

若没有这个文件,需要修改libvirtd服务的日志级别和日志文件配置,配置文件:/etc/libvirt/libvirtd.conf。

配置示例:

log_level = 1``log_outputs = ``"1:file:/var/log/libvirt/libvirtd.log"

然后重启libvirtd:

systemctl restart libvirtd

在日志文件 /var/log/libvirt/libvirtd.log 中可查看每次执行virsh命令输出的info、debug等信息。

另外,目录 /var/log/iibvirt/qemu/ 下保存了每个虚拟机具体的日志信息,log文件名称与虚拟机名称相关。

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

四、网络配置

1. 默认网络配置

查看libvirt的默认网络配置:

virsh net-list

默认网络配置文件为:/etc/libvirt/qemu/networks/default.xml,其内容示例如下:

QEMU-KVM基本操作_第1张图片

其中配置项“bridge”、“mac”和“ip”分别定义了宿主机用于与虚拟机通信的网桥名称、mac地址和ip地址,libvirtd服务启动的时候会自动创建并启动该网桥,“dhcp”则配置了libvirt启动的虚拟机的ip地址范围。

“forward”配置的是网络模式,kvm虚拟机支持两种网络模式:

(1)NAT(网络地址转换):虚拟系统通过网络地址转换,将虚拟机地址映射到宿主机地址上,通过宿主机进行网络访问。这样虚拟机就可访问外网和局域网内的其他主机,但是局域网内的其他主机不能访问虚拟机,相当于单向访问。

(2)Bridge(桥接):双向访问。每个虚拟机都具有一个独立的局域网ip地址,虚拟机与局域网其他主机可相互访问。

2. 自定义网络配置

用户可参考libvirt的默认网络配置文件添加自定义网络配置。

(1)创建网络xml配置文件,然后创建新网络:

virsh net-define net-name.xml

此命令会将网络配置文件移至/etc/libvirt/qemu/networks/目录下。

查看/导出网络配置:

virsh net-dumpxml net-name

(2)启动网络:

virsh net-start net-name

(3)设置开机自启动:

virsh net-autostart net-name

此命令会在 /etc/libvirt/qemu/networks/autostart/ 目录下创建 /etc/libvirt/qemu/networks/ 目录下网络配置文件的软链接。

3. 删除网络

(1)关闭网络:

virsh net-destroy my-net

(2)删除网络:

virsh net-undefine my-net

此命令会将网络配置文件从/etc/libvirt/qemu/networks/目录下删除,若/etc/libvirt/qemu/networks/autostart/目录下存在对应软连接也一并删除。

4. 修改网络配置

修改libvirt网络配置有两种方式。

(1)virsh net-edit

修改网络配置文件:

virsh net-edit my-net

重启网络才能生效:

virsh net-destroy my-net``virsh net-start my-net

(2)virsh net-update

virsh net-update my-net add-last ip-dhcp-host ``""` `--live --config --parent-index 0

virsh net-edit需要重启网络,对线上系统不友好,而virsh net-update可动态修改运行中的网络,不会影响线上系统,但有些修改无法使用virsh net-update进行。

五、KVM虚拟机管理操作

1. 创建虚拟机

(1)从xml配置文件创建虚拟机但是不启动

virsh define vm-name.xml

(2)从xml配置文件创建虚拟机并启动,但不会持久化,虚拟机关机后就消失了

virsh create vm-name.xml

创建虚拟机后,在 /etc/libvirt/qemu/ 路径下自动生成一份虚拟机的xml配置文件,该配置文件在virsh undefine删除虚拟机的时候会自动删除。

虚拟机的xml配置文件主要配置了虚拟机名称、内存大小、vcpu数量、镜像文件路径、网桥等信息。

查看/导出虚拟机xml文件:

virsh dumpxml vm-name

xml文件修改:

virsh edit vm-name

修改后重启虚拟机才能生效:

virsh reboot vm-name

登录虚拟机:

virsh console vm-name

创建示例:

  准备好虚拟机镜像文件,在虚拟机 xml 配置文件中配置好镜像文件的路径:

QEMU-KVM基本操作_第2张图片

然后通过 virsh 命令创建虚拟机:

virsh define vm-name.xml

2. 启动虚拟机

(1)启动:

virsh start vm-name

(2)重启:

virsh reboot vm-name

3. 查看虚拟机列表

(1)运行状态的虚拟机列表

virsh list

(2)所有的虚拟机列表

virsh list --all

QEMU-KVM基本操作_第3张图片

4. 关闭虚拟机

(1)正常关闭

virsh ``shutdown` `vm-name

(2)下电,强制立即关闭

virsh destroy vm-name

5. 删除虚拟机

virsh undefine vm-name

将非运行状态的虚拟机从virsh列表中删除,无法删除运行状态的虚拟机。

undefine命令会将虚拟机配置文件 /etc/libvirt/qemu/vm-name.xm 删除,但不会删除镜像文件。

6. 虚拟机挂起与恢复

(1)挂起

virsh suspend vm-name

只有运行状态(running)的虚拟机才能被挂起。

挂起状态的虚拟机无法被登录,也无法关闭。

(2)恢复

virsh resume vm-name

只有挂起状态(paused)的虚拟机才能被恢复。

7. 设置虚拟机在宿主机启动时自动启动

virsh autostart vm-name

8. 查看虚拟机

(1)查看虚拟机状态

virsh domstate vm-name

(2)查看虚拟机信息

virsh dominfo vm-name

QEMU-KVM基本操作_第4张图片

9. 虚拟机磁盘管理操作

(1)查看磁盘列表

virsh domblklist vm-name

(2)查看磁盘信息

virsh domblkinfo vm-name block-name

(3)扩容磁盘

virsh blockresize --domain vm-name --path block-name --size 10G

(4)动态设置磁盘qos

virsh blkdeviotune vm-name block-name --``read``-bytes-sec 1024 --write-bytes-sec 1024 --``read``-iops-sec 1000 --write-iops-sec 1024 --live

(5)持久化挂载rbd

virsh attach-device vm-name rbd.xml --persistent

10. 内存、CPU管理操作

(1)动态设置CPU个数

virsh setvcpus vm-name --count 4 --config --live

(2)动态设置内存大小

virsh setmem vm-name --size 1024 --config --live

(3)设置最大内存大小

virsh setmaxmem vm-name --size 102400 --config

11. 网卡管理操作

(1)查看网卡列表

virsh domiflist vm-name

(2)添加持久化网卡

virsh attach-interface --domain vm-name --``type` `bridge --``source` `br111 --model virtio --mac ``'00.00.00.00.00.01'``- -live --config --persistent

(3)删除持久化网卡

virsh detach-interface --domain vm-name --``type` `bridge --mac ``'00.00.00.00.00.01'``- -live --config --persistent

参考:

KVM详解,学习kvm系列文章 - 腾讯云开发者社区-腾讯云

KVM 虚拟化技术 - 腾讯云开发者社区-腾讯云

linux如何载入kvm内核_linux 内核 kvm_linux无法载入新内核 - 腾讯云开发者社区 - 腾讯云

原文链接:https://www.cnblogs.com/wujuntian/p/16295818.html

你可能感兴趣的:(linux,c++,KVM,linux,服务器,开发语言,网络编程,网络)