图形化方式和模板方式创建KVM虚拟机
一、搭建环境首先搭建一个图形化界面的centos操作系统1 打开虚拟化引擎2 安装相关软件yum -y install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager wget3 启动服务并开启开机自动启动systemctl enable libvirtd && systemctl
一、搭建环境
首先搭建一个图形化界面的centos操作系统
1 打开虚拟化引擎
2 安装相关软件
yum -y install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager wget
3 启动服务并开启开机自动启动
systemctl enable libvirtd && systemctl start libvirtd
二、图形化方式创建虚拟机
1 上传镜像文件到宿主机(阿里云镜像)
wget http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
2 安装流程
开始进行centos系统的安装
3 查看虚拟机的配置文件和虚拟磁盘文件
3.1 配置文件
[root@localhost ~]# cd /etc/libvirt/qemu/
[root@localhost qemu]# ls
centos7-1.xml networks
以.xml结尾的文件就是虚拟机的配置文件
[root@localhost qemu]# vim centos7-1.xml
虚拟机名称(第9行)
<name>centos7-1</name>
uuid(第10行)
<uuid>17d1195b-27b5-4ff4-bf14-801fed0d6635</uuid>
内存(第11行)
<memory unit='KiB'>1048576</memory>
磁盘
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/centos7-1.qcow2'/> #磁盘文件路径
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
mac地址(第77行)
<mac address='52:54:00:5e:ae:a6'/>
3.2虚拟磁盘文件(以.qcow2结尾的文件)
[root@localhost ~]# cd /var/lib/libvirt/images/
[root@localhost images]# ls
centos7-1.qcow2
三、利用模板创建虚拟机
1 创建新虚拟机的配置文件
复制已存在的虚拟机的配置文件
cp /etc/libvirt/qemu/centos7-1.xml /etc/libvirt/qemu/centos7-2.xml
注意:此配置文件可能和你们机器上的文件名不同,请以你们机器上的以.xml结尾的文件为准
2 创建新虚拟机的虚拟磁盘文件
复制已存在的虚拟磁盘文件
[root@localhost ~]# cp /var/lib/libvirt/images/centos7-1.qcow2 /var/lib/libvirt/images/centos7-2.qcow2
注意:此配置文件可能和你们机器上的文件名不同,请以你们机器上的以.qcow2结尾的文件为准
3 修改配置文件里的虚拟机名称、uuid、磁盘、mac地址
[root@localhost ~]# vim /etc/libvirt/qemu/centos7-2.xml
<name>centos7-2</name>
<uuid>17d1195b-27b5-4ff4-bf14-801fed0d6635</uuid> #修改uuid其中一个数即可(不用复制我的)
...
<source file='/var/lib/libvirt/images/centos7-2.qcow2'/> #要和复制的虚拟磁盘文件的绝对路径相同
...
<mac address='52:54:00:5e:ae:a6'/> #和uuid一样,修改其中一个数即可
4 定义虚拟机
[root@localhost ~]# virsh define /var/lib/libvirt/images/centos7-2.qcow2
定义域 centos7-2(从 /etc/libvirt/qemu/centos7-2.xml)
注意:要以结对路径来定义虚拟机
5 启动虚拟机
[root@localhost ~]# virsh list --all # 列出所有KVM虚拟机
Id 名称 状态
----------------------------------------------------
- centos7-1 关闭
[root@localhost ~]# virsh start centos7-1 # 启动指定KVM虚拟机
域 centos7-1 已开始
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
5 centos7-1 running
[root@localhost ~]# virsh domifaddr 5
名称 MAC 地址 Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:15:42:35 ipv4 192.168.122.168/24
四、virsh 管理虚拟机
1 列出正在运行的虚拟机
virsh list
2 列出所有的虚拟机
virsh list --all
3 查看指定虚拟机的元数据信息
virsh dominfo centos7-1
#这里的centos7-1是虚拟机名称,你的是啥就写啥
4 查看指定虚拟机的 IP 地址
virsh domifaddr centos7-1
5 启动虚拟机
virsh start centos7-1
6 正常关闭虚拟机
virsh shutdown centos7-1
7 强制关闭虚拟机,相当于拔掉电源
virsh destroy centos7-1
8 重启虚拟机
virsh reboot vm-name centos7-1
9 删除虚拟机(虚拟机磁盘文件回保留,需要手动删除)
virsh undefine centos7-1
五、给虚拟机添加硬件
1.命令行方式添加
1.1添加内存
首先关闭想要添加内存的虚拟机
virsh shutdown centos7-1
设置最大可分配内存
virsh setmaxmem centos7-1 6G
查看虚拟机信息
[root@localhost network-scripts]# virsh dominfo centos7-1
Id: -
名称: centos7-1
UUID: 32799c03-95c9-4b2e-9b79-cc7ca82e872c
OS 类型: hvm
状态: 关闭
CPU: 1
最大内存: 6291456 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: selinux
安全性 DOI: 0
之后启动该虚拟机,然后添加内存
[root@localhost network-scripts]# virsh start centos7-1
域 centos7-1 已开始
[root@localhost network-scripts]# virsh setmem centos7-1 4G
[root@localhost network-scripts]# virsh dominfo centos7-1
Id: 1
名称: centos7-1
UUID: 96ba6be9-2586-4bc8-918c-80614c22a1bf
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 14.4s
最大内存: 6291456 KiB
使用的内存: 4194304 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: selinux
安全性 DOI: 0
安全性标签: system_u:system_r:svirt_t:s0:c319,c373 (enforcing)
1.2添加硬盘
创建一个虚拟硬盘
[root@localhost ~]# qemu-img create -f qcow2 centos7-1-2.qcow2 1G
Formatting 'centos7-1-2.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off
编辑一个虚拟硬盘的 xml 文件模板
[root@localhost ~]# cat disk.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
<source file='/root/centos7-1-2.qcow2'/> #指定创建的虚拟硬盘的绝对路径
<target dev='vdb' bus='virtio'/> #dev=''指定添加的硬盘名称
</disk>
然后使用 attach-device
命令从XML文件添加
virsh attach-device centos7-1 disk.xml --persistent
查看虚拟机的所有磁盘
virsh domblklist centos7-1
1.3添加网卡
生成mac地址后三位
[root@localhost ~]# openssl rand -hex 3 | sed -r 's/..\B/&:/g'
90:71:b8
参考当前需要添加网卡的这台虚拟机的xml配置文件中的网络部分,创建一个新网卡的 xml 配置文件
[root@localhost ~]# cat mac.xml
<interface type='network'>
<mac address='52:54:00:90:71:b8'/> #把后三位修改成生成的那三位数
<source network='default'/>
<model type='virtio'/>
</interface>
然后使用 attach-device
命令从XML文件添加
[root@localhost ~]# virsh attach-device centos7-1 network.xml --persistent
成功附加设备
用命令查看虚拟机网卡信息
[root@localhost ~]# virsh domiflist centos7-1
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 network default virtio 52:54:00:ba:ac:be
vnet1 network default virtio 52:54:00:90:71:b8
六、虚拟机的存储池
1.KVM默认存储池位置
/var/lib/libvirt/images/
2.定义存储池
使用 virsh pool-define-as
命令创建持久性存储池
[root@localhost ~]# mkdir /vm-pool/centos7
[root@localhost ~]# virsh pool-define-a --name centos7-pool --type dir --target "/vm-pool/centos7"
创建池 centos7-pool
使用 virsh pool-list --all
命令列出所有现有的存储池
[root@localhost ~]# virsh pool-list
名称 状态 自动开始
-------------------------------------------
centos7-pool 非活动 否
default 活动 是
3.启动存储池
[root@localhost ~]# virsh pool-start centos7-pool
池 centos7-pool 已启动
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
centos7-pool 活动 否
default 活动 是
4.打开自动启动
可以使用 virsh pool-autostart
命令将存储池配置为自动启动
[root@localhost ~]# virsh pool-autostart centos7-pool
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
centos7-pool 活动 是
default 活动 是
5.删除存储池
5.1 停止要删除的存储池
[root@localhost ~]# virsh pool-destroy centos7-pool
销毁池 centos7-pool
5.2 对于某些类型的存储池,您可以选择删除存储池所在的目录(可选)
[root@localhost ~]# virsh pool-delete centos7-pool
池 centos7-pool 被删除
5.3 取消存储池的定义
[root@localhost ~]# virsh pool-undefine centos7-pool
池 centos7-pool 已经被取消定义
5.4 存储池删除成功
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
default 活动 是
七、虚拟机的快照
这里以为虚拟机 centos7-1 创建一个快照(磁盘格式必须为qcow2)为例说明对一个虚拟机快照的创建、查询、删除操作。
[root@localhost ~]# qemu-img info /home/kvm/virtual-img/centos7-1.qcow2
image: /home/kvm/virtual-img/centos7-1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.7G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
1. 给指定的虚拟机创建快照
[root@localhost ~]# virsh snapshot-create-as centos7-1 centos7-1.snap1
已生成域快照 centos7-1.snap1
2. 查看指定虚拟机的快照
[root@localhost ~]# virsh snapshot-list centos7-1
名称 生成时间 状态
------------------------------------------------------------
centos7-1.snap1 2021-03-29 16:50:53 +0800 shutoff
3. 恢复快照
[root@kvm ~]# virsh snapshot-revert centos7-1 --snapshotname centos7-1.snap1
4. 删除快照
[root@localhost ~]# virsh snapshot-delete centos7-1 --snapshotname centos7-1.snap1
已删除域快照 centos7-1.snap1
八、虚拟机网络
1. 网络模式介绍
Libvirt虚拟网络使用虚拟网络交换机的概念。虚拟网络交换机是一种在主机物理机服务器上运行的软件结构。
虚拟机通过这个虚拟的网络交换机和物理宿主机进行通信,从而数据通过物理机和外部网络进行通信。
Linux主机物理机服务器将虚拟网络交换机表示为网络接口。
首次安装并启动libvirtd守护程序(libvirtd)时,表示虚拟网络交换机的默认网络接口是virbr0。
libvirt 会依赖 ip_forward
参数, 并添加响应的 iptables(防火墙)规则,允许去往和来自虚拟机的数据。有些程序可能会关闭 ip_forward
参数,因此最好的选择是将以下内容添加到KVM虚拟机的 /etc/sysctl.conf下
[root@localhost ~]# echo 'net.ipv4.ip_forward = 1' >> 1.sh
注意:在KVM虚拟机中运行此命令
2. 设置桥接模式网络
配置文件方式配置桥接:在宿主机上
ip a #找到宿主机用哪个网络,我的是ens33
2.1 创建虚拟网卡配置文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-br0
[root@localhost network-scripts]# cat ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.42.129 #要和宿主机IP地址相同
NETMASK=255.255.255.0
GATEWAY=192.168.42.2
2.2 修改宿主机网卡配置文件(将物理机网卡桥到桥接网卡)
[root@localhost network-scripts]# mv ifcfg-ens33 ifcfg-ens33.back #先给网卡配置文件做备份,以防操作失误
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# cat ifcfg-ens33
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0 #要和虚拟网卡名相同
2.3 重启服务
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# systemctl restart network
KVM虚拟机网络模式就可以修改成桥接模式了
2.4 删除网桥模式
步骤:
1.删除br0配置文件
2.还原ens33的配置文件
3.重启服务
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ #千万不要忘记这一步,不然可能会删根
[root@localhost network-scripts]# rm -rf ifcfg-br0
[root@localhost network-scripts]# mv ifcfg-ens33.back ifcfg-ens33
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# systemctl restart network
3 KVM虚拟机添加桥接模式的网卡
3.1 图形界面添加
3.1.1 打开虚拟系统管理器
3.1.2 双击想要添加网卡的KVM虚拟机
图形界面添加网卡完成
3.2 命令行模式添加(采用模板)
3.2.1 生成mac地址后三位
[root@localhost ~]# openssl rand -hex 3 | sed -r 's/..\B/&:/g'
b7:7f:c9
3.2.2 参考当前需要添加网卡的这台虚拟机的xml配置文件中的网络部分,创建一个新网卡的 xml 配置文件
[root@localhost ~]# cat mac.xml
<interface type='network'>
<mac address='52:54:00:b7:7f:c9'/> #把后三位修改成生成的那三位数
<source network='br0'/> #要改成br0
<model type='rtl8139'/>
</interface>
3.2.3 然后使用 attach-device
命令从XML文件添加
[root@localhost ~]# virsh attach-device centos7-1 network.xml --persistent
成功附加设备
使用命令行模式添加桥接网卡成功
更多推荐
所有评论(0)