- kvm的命令行工具virsh;
1.概述
virsh工具功能非常丰富,它可以全生命周期的管理kvm;比如创建虚拟机,查看虚拟机,动态热插拔硬盘,给虚拟机做快照,迁移、启动、停止、挂起、暂停、删除虚拟机等等操作。
上图主要描述了kvm的主要工具栈,从大的类别可以分为libvirt和qemu这两大类,其中libvirt中分virtual machine manager和virsh。
- virtual machine manager中的virt-manager是基于图形界面的管理,其他都是可以在命令行直接使用命令来管理虚拟机;
- virsh是基于终端命令行管理;两者都是通过libvirt连接至libvirtd进行管理;而对于qemu来说,它管理虚拟机上直接调用kvm内核中模块的API进行管理;
2.virsh
virsh 是用来管理客户端及其管理程序的命令行界面工具。
virsh 工具是构建在 libvirt 管理 API 上,可作为 xm 命令和图形客户端管理程序(virt-manager)的替代工具使用。非特权用户只能以只读模式使用 virsh。您可使用 virsh 为客户端机器执行脚本。
3.安装和配置 kvm 环境
3.1.检查宿主机处理器是否支持虚拟化
[root@kvm ~]# egrep -o 'vmx | svm' /proc/cpuinfo | wc -l
如果有数据,说明 CPU 支持虚拟化(现在的大部分 CPU 都支持虚拟化,除非你的 CPU 真的太老了),如果没有,则需要开启,如果是物理机则在 BIOS 界面开启这个功能,如果是在虚拟机上,则在虚拟机上开启 CPU 的嵌套虚拟化功能。
3.2.工具安装
sudo apt install qemu-kvm libvirt virt-install virt-manager bridge-utils qemu-img
#qemu-kvm:核心软件包,实现虚拟化
#libvirt:核心软件包,管理KVM的工具,类似VMware也是管理虚拟机的工具
#virt-install:KVM虚拟机命令行管理工具
#virt-manager:KVM虚拟机图形化管理工具,可不装
#bridge-utils:实现网卡桥接的工具
3.3.设置相关网络
- 创建/etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
- 创建/etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
Address=10.0.0.3/16
Gateway=10.0.0.1
DNS=10.0.0.1
- 创建/etc/systemd/network/uplink.network
[Match]
Name=eno1
[Network]
Bridge=br0
查看systemctl status systemd-networkd状态,然后执行systemctl restart systemd-networkd。
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.429f5774d8b6 no eno1
3.3.安装虚拟机
- 创建虚拟机镜像
//关于虚拟机镜像,有很多种类型:raw、qcow2、vmdk等,推荐使用 qcow2 格式的镜像,因为 qcow2 格式的镜像支持快照,使用的比较广泛。
sudo mkdir /data/kvm
sudo qemu-img create -f qcow2 -o preallocation=metadata /data/kvm/liwei01.qcow2 50G
- 执行虚拟机的安装
通过 iso 镜像实现本地安装,支持 vnc ,无文本控制台。
sudo virt-install --connect qemu:///system --virt-type kvm --vcpus=1 --name ubuntu16 --ram 512 --cdrom ubuntu-16.04.6-desktop-amd64.iso --disk path=/var/lib/libvirt/images/ubuntu16.img,size=50,format=qcow2,bus=virtio --network bridge=br0 --os-type=linux
refer to
- https://libvirt.org/
- https://wiki.archlinux.org/index.php/Systemd-networkd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
- https://huataihuang.gitbooks.io/cloud-atlas/content/virtual/
- https://unix.stackexchange.com/questions/411936/configuring-a-bridge-interface-with-systemd-networkd