KVM 虚拟机
KVM 虚拟机
1、安装kvm
- 开启cpu虚拟化
- 虚拟机最低配置,内存 == 4G 磁盘 == 100G
- 操作系统CentOS7.6 1810
[root@localhost ~]# cat /proc/cpuinfo | grep vm
[root@localhost ~]# yum install -y libvirt virt-install qemu-kvm
libvirt # 虚拟机管理, kvm xen lxc等软件
virt-install # 虚拟机的安装和克隆,相当于命令行操作工具
qemu-kvm # 管理虚拟机的磁盘
# 可选的安装包
"GNOME Desktop" #安装GNOME桌面环境
qemu-kvm #KVM模块
qemu-kvm-tools #KVM调试工具,可不安装
qemu-img #qemu组件,创建磁盘、启动虚拟机等
bridge-utils #网络支持工具
libvirt #虚拟机管理工具
virt-manager #图形界面管理虚拟机,在虚拟机桌面上的管理工具
libguestfs-tools #用来管理虚拟机磁盘格式
# 启动服务
[root@localhost ~]# systemctl start libvirtd.service
[root@localhost ~]# systemctl enable libvirtd.service
[root@localhost ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since 六 2022-07-09 13:43:43 CST; 11min ago
Docs: man:libvirtd(8)
2、安装一台centos虚拟机
mkdir -p /data/vm_disk
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name=centos7_web01 --memory 1024 --vcpus 1 --disk /opt/centos7_web01.raw,format=raw,size=10 --cdrom=/opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
开始安装......
正在分配 'centos7_web01.raw' | 10 GB 00:00:00
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
# 安装虚拟机的参数
# 参数 参数说明
--virt-type # 要使用的管理程序名称 (kvm, qemu, xen, ...)
--os-type # 系统类型 linux unix windows
--os-variant # 客户机上安装的操作系统,如:'fedora18'、'rhel7'、'winxp' 等,具体的通过。
# osinfo-query os 命令查询支持的操作系统。
-n/--name # 客户机实例名称
--memory # 配置客户机虚拟内存大小
--vcpus # 配置客户机虚拟 CPU数量。
--disk # 指定存储的各种选项。 raw #不支持做快照,性能好。qcow2 #支持快照。
-cdrom # iso镜像位置
-w/--network # 配置客户机网络接口。
--graphics # 配置客户机显示设置。
--noautoconsole # 不要自动尝试连接到客户端控制台
--autostart # 主机启动时自动启动域。
--noreboot # 安装完成后不重新启动客户机。
# 生成的数据盘
[root@localhost ~]# ll /data/vm_disk/centos7_web01.raw
-rw------- 1 qemu qemu 10737418240 7月 9 14:16 /data/vm_disk/centos7_web01.raw
# 生成虚拟机的配置xml文件,里面记录了虚拟机的各个硬件配置信息,可以使用这个xml来定义虚拟机。
[root@localhost ~]# ll /etc/libvirt/qemu/centos7_web01.xml
-rw------- 1 root root 3933 7月 9 14:16 /etc/libvirt/qemu/centos7_web01.xml
# 保存了网络配置信息
[root@localhost ~]# cat /etc/libvirt/qemu/networks/default.xml
# 虚拟机控制台默认监听5900 端口,如果有下一台虚拟机就是5901端口,使用vnc连接这个端口。
[root@localhost ~]# ss -lntup | grep kvm
tcp LISTEN 0 1 *:5900 *:* users:(("qemu-kvm",pid=10283,fd=18))
(参考步骤)[https://www.cnblogs.com/gshelldon/p/16460865.html]
然后就是正常的centos安装步骤。
3、虚拟机常用操作命令
3.1 查看虚拟机
# 只能查看到正在运行的虚拟机
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
2 centos7_web01 running
# 所有状态的虚拟机
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 centos7_web01 running
3.2 关闭虚拟机
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 centos7_web01 running
# 根据域名称或者是Id来关闭虚拟机。
[root@localhost ~]# virsh shutdown 2
域 2 被关闭
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7_web01 关闭
# 强制关机相当于直接拔掉电源
virsh destroy centos7_web01
3.3 启动虚拟机
[root@localhost ~]# virsh start centos7_web01
域 centos7_web01 已开始
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
3 centos7_web01 running
3.4 获取控制台
# 1、通过ssh的方式
[root@localhost ~]# ssh root@192.168.122.186
The authenticity of host '192.168.122.186 (192.168.122.186)' can't be established.
ECDSA key fingerprint is SHA256:uZBFYR0qhsK21WdFBqMTr0hFTKy/KnL5VCmRFFc7Yj8.
ECDSA key fingerprint is MD5:22:6c:a8:e0:9b:1c:77:79:88:80:66:e6:77:a7:8f:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.186' (ECDSA) to the list of known hosts.
root@192.168.122.186's password:
Last login: Sat Jul 9 16:02:07 2022
# 通过获取控制台,linux 无图形界面的方式
[root@localhost ~]# virsh vncdisplay centos7_web01
:0
virsh console 虚拟机ID/域名称
# 1、登陆虚拟机设置
[root@localhost ~]# ssh root@192.168.122.1
[root@centos7 ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@centos7 ~]# reboot
Connection to 192.168.122.186 closed by remote host.
Connection to 192.168.122.186 closed.
# 2、使用console获取控制端
[root@localhost ~]# virsh console centOS7
连接到域 centOS7
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login: root
Password:
Last login: Sat Jul 9 21:19:07 from gateway
[root@centos7 ~]#
3.5 查询主机信息
[root@localhost ~]# virsh dominfo centos7_web01
Id: 1
名称: centos7_web01
UUID: d36d6ae8-74a6-46c6-aed3-1dd4916c6181
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 23.1s
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
3.6 调整内存
# 开机状态只能调整小,单位Kib
[root@localhost ~]# virsh setmem centos7_web01 524288
virsh setmem centos_server01 --size 524288 --live --config
virsh setmaxmem centos_server01 1572864 --config
--config # 影响下一次引导,会更新配置文件
--live # 影响运行的域
--current # 影响当前域
[root@localhost ~]# virsh dominfo centos7_web01
Id: 1
名称: centos7_web01
UUID: d36d6ae8-74a6-46c6-aed3-1dd4916c6181
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 148.9s
最大内存: 1048576 KiB
使用的内存: 180404 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
# 调大内存,需要虚拟机是在关机状态下,编辑主机配置文件。
[root@localhost ~]# virsh edit centos7_web01
<memory unit='KiB'>2097152</memory> #内存的总大小
<currentMemory unit='KiB'>1048576</currentMemory> #当前可以使用的内存的大小
<vcpu placement='static'>2</vcpu> #cpu的核心
[root@localhost ~]# virsh dominfo centos7_web01
Id: 4
名称: centos7_web01
UUID: d36d6ae8-74a6-46c6-aed3-1dd4916c6181
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 16.0s
最大内存: 2097152 KiB
使用的内存: 2097152 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
#命令行修改最大内存,需要虚拟机状态是关闭状态。
[root@kvm01 /opt]# virsh shutdown centos7_web01
Domain centos7_web01 is being shutdown
[root@kvm01 /opt]# virsh setmaxmem centos7_web01 1048576
[root@kvm01 /opt]# virsh dominfo centos7_web01
Id: -
Name: centos7_web01
UUID: 158ca26b-eebd-41f3-8dc0-5752bd98d151
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#查看CPU的信息,只有1核所以只显示了一个核心数
[root@localhost ~]# virsh vcpuinfo centos7_web01
VCPU: 0
CPU: 3
状态: running
CPU 时间: 349.5s
CPU关系: yyyy
3.7 重命名虚拟机
# 需要虚拟机在关机状态下
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7_web01 关闭
[root@localhost ~]# virsh domrename centos7_web01 centOS7
Domain successfully renamed
[root@localhost ~]# virsh list --all |grep cent
- centOS7 关闭
3.8 恢复和挂起
[root@localhost ~]# virsh suspend centOS7
域 centOS7 被挂起
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
2 centOS7 暂停
[root@localhost ~]# virsh resume centOS7
域 centOS7 被重新恢复
[root@localhost ~]# virsh list|grep run
2 centOS7 running
4、虚拟机配置文件
4.1 导出配置文件
# 编辑配置文件
virsh edit centos7_web01
# 开机状态下导出
[root@localhost ~]# virsh list --all| grep runn
9 centos7_web01 running
[root@localhost ~]# virsh dumpxml centos7_web01 > centos7_web01_bak.xml
# 关机状态下导出
[root@localhost ~]# virsh list --all| grep centos7_web01
- centos7_web01 关闭
[root@localhost ~]# virsh dumpxml centos7_web01 > centos7_web01_shutdown_bak.xml
# 删除配置文件
[root@localhost ~]# rm -fr /etc/libvirt/qemu/centos7_web01.xml
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
# 恢复虚拟机
[root@localhost ~]# virsh define centos7_web01_bak.xml
定义域 centos7_web01(从 centos7_web01_bak.xml)
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
[root@localhost ~]# virsh define centos7_web01_bak.xml
定义域 centos7_web01(从 centos7_web01_bak.xml)
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7_web01 关闭
[root@localhost ~]# virsh start centos7_web01
域 centos7_web01 已开始
[root@localhost ~]# virsh list |grep run
1 centos7_web01 running
5、挂载光驱修改启动项
[root@localhost ~]# virsh destroy centOS7
域 centOS7 被删除
[root@localhost ~]# virsh edit centOS7
# ......省略......
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='cdrom'/> # 第一启动项
</os>
# ......省略......
<disk type='file' device='cdrom'> # 光盘
<driver name='qemu' type='raw'/>
<source file='/opt/CentOS-7-x86_64-Minimal-2009.iso'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
# 编辑之后启动
6、虚拟机开启启动
# 前提libvir[root@localhost ~]# systemctl is-enabled libvirtd
enabled
[root@localhost ~]# virsh autostart centOS7
域 centOS7标记为自动开始
[root@localhost ~]# ll /etc/libvirt/qemu/autostart/
总用量 0
lrwxrwxrwx 1 root root 29 7月 9 21:26 centOS7.xml -> /etc/libvirt/qemu/centOS7.xml
#关闭开机自启动
[root@kvm01 ~]# virsh autostart --disable Centos7_db01
Domain Centos7_db01 unmarked as autostarted
[root@kvm01 ~]# ll /etc/libvirt/qemu/autostart/
total 0
7、磁盘管理
7.1 创建磁盘
# 创建一块2G的磁盘
[root@localhost ~]# qemu-img create -f qcow2 /data/vm_disk/test.qcow2 2G
Formatting '/data/vm_disk/test.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@localhost ~]# qemu-img info /data/vm_disk/test.qcow2
image: /data/vm_disk/test.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
7.2 格式转换
把raw的磁盘转换为qcow2格式的磁盘再启动虚拟机。
[root@localhost ~]# virsh shutdown centOS7
域 centOS7 被关闭
[root@localhost vm_disk]# qemu-img convert -f raw -O qcow2 centos7_web01.raw centOS7.qcow2
[root@localhost vm_disk]# ll
总用量 4785756
-rw-r--r-- 1 root root 1639579648 7月 9 21:39 centOS7.qcow2
-rw------- 1 root root 10737418240 7月 9 21:35 centos7_web01.raw
-rw-r--r-- 1 root root 197120 7月 9 21:32 test.qcow2
# 1、修改虚拟机配置文件
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/> # 硬件类型也需要修改
<source file='/data/vm_disk/centOS7.qcow2'/> # 修改启动的镜像文件
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
# 2、启动配置文件
[root@localhost ~]# virsh start centOS7
域 centOS7 已开始
[root@localhost ~]# virsh list | grep run
3 centOS7 running
8、快照管理
raw 格式不支持快照功能
8.1 创建快照
# 快照的默认名称是时间戳
[root@localhost ~]# virsh snapshot-create centOS7
已生成域快照 1657374440
8.2 查看快照
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374440 2022-07-09 21:47:20 +0800 running
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374440 2022-07-09 21:47:20 +0800 running # 开机状态下的快照
1657374776 2022-07-09 21:52:56 +0800 shutoff # 关机状态下的快照
# 查看快照的详细信息
[root@localhost ~]# virsh snapshot-info centOS7 --snapshotname 1657374440
名称: 1657374440
域: centOS7
当前: 否
状态: running
位置: 内部
上级: -
下级: 1
降序: 1
元数据: 是
# 快照生成的位置
[root@localhost ~]# ll /var/lib/libvirt/qemu/snapshot/centOS7/
总用量 16
-rw------- 1 root root 4824 7月 9 21:52 1657374440.xml
-rw------- 1 root root 4846 7月 9 21:52 1657374776.xml
8.3 恢复快照
# 1、登陆破坏
[root@localhost ~]# virsh console centOS7
连接到域 centOS7
换码符为 ^]
centos7 login: root
Password:
Last failed login: Sat Jul 9 21:58:25 CST 2022 on ttyS0
There was 1 failed login attempt since the last successful login.
Last login: Sat Jul 9 21:21:37 on ttyS0
[root@centos7 ~]# rm -fr /*
# ------------省略-----------
[root@centos7 ~]# bash
-bash: /usr/bin/bash: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
# 2、恢复快照
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374440 2022-07-09 21:47:20 +0800 running
1657374776 2022-07-09 21:52:56 +0800 shutoff
# 恢复快照
[root@localhost ~]# virsh snapshot-revert centOS7 1657374440
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374440 2022-07-09 21:47:20 +0800 running
1657374776 2022-07-09 21:52:56 +0800 shutoff
[root@localhost ~]# virsh snapshot-revert centOS7 1657374440
# 恢复正常
[root@localhost ~]# virsh console centOS7
连接到域 centOS7
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login: root
Password:
Last login: Sat Jul 9 21:21:37 on ttyS0
[root@centos7 ~]# bash
8.4 删除快照
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374440 2022-07-09 21:47:20 +0800 running
1657374776 2022-07-09 21:52:56 +0800 shutoff
# 删除快照
[root@localhost ~]# virsh snapshot-delete centOS7 1657374440
已删除域快照 1657374440
[root@localhost ~]# virsh snapshot-list centOS7
名称 生成时间 状态
------------------------------------------------------------
1657374776 2022-07-09 21:52:56 +0800 shutoff
[root@localhost ~]# ll /var/lib/libvirt/qemu/snapshot/centOS7/
总用量 8
-rw------- 1 root root 4795 7月 9 22:04 1657374776.xml
9、硬盘管理
9.1 创建硬盘
[root@localhost ~]# qemu-img create -f qcow2 /data/vm_disk/disk1.qcow2 4G
Formatting 'disk1.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=65536 lazy_refcounts=off
[root@localhost ~]# ll /data/vm_disk/disk1.qcow2
-rw-r--r-- 1 root root 197120 7月 9 22:20 /data/vm_disk/disk1.qcow2
[root@localhost ~]# qemu-img info /data/vm_disk/disk1.qcow2
image: /data/vm_disk/disk1.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
9.2 给centos7主机添加硬盘
# 如果不加--config 只是临时生效,重启之后配置就丢失了。
[root@localhost ~]# virsh attach-disk centOS7 /data/vm_disk/disk1.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
vdb #第二块虚拟磁盘
--live #在线热添加
--cache=none #开启宿主机对客户机的镜像的读取缓存 off 关闭
--subdriver #驱动类型
--config #会修改虚拟机的配置文件
# 进入到虚拟机中查看
[root@localhost ~]# virsh console centOS7
连接到域 centOS7
换码符为 ^]
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1.1G 0 rom
vda 253:0 0 10G 0 disk
├─vda1 253:1 0 1G 0 part /boot
└─vda2 253:2 0 8G 0 part /
vdb 253:16 0 4G 0 disk
# 卸载磁盘
[root@localhost ~]# virsh detach-disk CentOS7 vdb
9.3 给硬盘扩容
# 硬盘扩容不支持快照过的硬盘,增加2G
[root@localhost ~]# qemu-img resize /data/vm_disk/centOS7.qcow2 +2G
Image resized.
虚拟机需要重启。
9.4 给虚拟机添加光驱
# 使用ide方式挂载,不支持热插拔
virsh attach-disk {instance_name} {iso_path} hda --sourcetype block --driver qemu --subdriver raw --type cdrom
# 使用scsi方式挂载:支持热插拔
virsh attach-disk {instance_name} {iso_path} sda --sourcetype block --driver qemu --subdriver raw --type cdrom
virsh change-media instance_name hdb(光驱盘符) ISO的位置(绝对路径)
--config # 更新配置文件,不加此参数重启虚拟机之后会失效。
10、KVM的克隆
- 虚拟机必须在关闭的情况下进行扩容。
10.1 完整克隆
[root@centos7 ~]# virt-clone --auto-clone -o centOS7 -n centOS7_new
正在分配 'centOS7_new.qcow2' | 12 GB 00:00:21
成功克隆 'centOS7_new'。
-o ORIGINAL_GUEST, --original ORIGINAL_GUEST
Name of the original guest; The status must be shut
off or paused.
--auto-clone Auto generate clone name and storage paths from the
original guest configuration.
-n NEW_NAME, --name NEW_NAME
Name for the new guest
[root@centos7 ~]# ll /etc/libvirt/qemu/
总用量 16
drwxr-xr-x 2 root root 25 7月 9 21:29 autostart
-rw------- 1 root root 4310 7月 10 13:39 centOS7_new.xml
-rw------- 1 root root 4298 7月 9 23:18 centOS7.xml
drwx------. 3 root root 42 7月 9 17:02 networks
[root@centos7 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centOS7 关闭
- centOS7_new 关闭
10.2 使用复制配置文件的方式进行完整克隆
# 1、复制磁盘的镜像文件
[root@centos7 vm_disk]# cp centOS7_new.qcow2 centOS7_new_copy.qcow2
# 2、导出源客户机的配置信息。
[root@centos7 vm_disk]# virsh dumpxml centOS7_new > centOS7_new_copy.xml
[root@kvm ~]# mv centOS7_new_copy.xml /etc/libvirt/qemu/
# 3、修改xml配置文件地址。
<name>centOS7_new_copy</name>
删除UUID一行
<source file='/data/vm_disk/centOS7_new_copy.qcow2'/>
删除mac地址
# 4、根据配置文件定义新的虚拟机
[root@kvm ~]# virsh define /etc/libvirt/qemu/centOS7_new_copy.xml
定义域 centOS7_new_copy(从 /etc/libvirt/qemu/centOS7_new_copy.xml)
# 5、查看
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centOS7 关闭
- centOS7_new 关闭
- centOS7_new_copy 关闭
[root@kvm ~]# virsh start centOS7_new_copy
域 centOS7_new_copy 已开始
[root@kvm ~]# virsh list
Id 名称 状态
----------------------------------------------------
11 centOS7_new_copy running
[root@kvm ~]# virsh console centOS7_new_copy
连接到域 centOS7_new_copy
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login:
10.3 链接克隆
可以根据流程变换为脚本的方式来进行克隆。
# 1、创建一个基于链接克隆的虚拟磁盘文件
[root@kvm vm_disk]# qemu-img create -f qcow2 -b centOS7.qcow2 centOS7_link.qcow2
Formatting 'centOS7_link.qcow2', fmt=qcow2 size=12884901888 backing_file='centOS7.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
# 2、导出源客户机的配置信息
[root@kvm ~]# virsh dumpxml centOS7 > /etc/libvirt/qemu/centOS7_link.xml
# 3.修改配置信息
[root@kvm ~]# vi /etc/libvirt/qemu/centOS7_link.xml
<name>db01</name>
删除UUID一行
<source file='/opt/db01.qcow2'/>
删除mac地址
# 4、重新定义虚拟机
[root@kvm ~]# virsh define /etc/libvirt/qemu/centOS7_link.xml
定义域 centOS7_link(从 /etc/libvirt/qemu/centOS7_link.xml)
[root@kvm ~]# virsh list --all|grep link
- centOS7_link 关闭
# 开机检查
[root@kvm ~]# virsh start centOS7_link
域 centOS7_link 已开始
[root@kvm ~]# virsh console centOS7_link
连接到域 centOS7_link
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login:
11、KVM 虚拟机的桥接网络
11.1 nat上网
11.2 桥接模式
# 添加桥接网卡
virsh iface-bridge ens33 br0
[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE="br0"
[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.4.7.20"
NETMASK="255.255.255.0"
GATEWAY="10.4.7.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29131e87 yes ens33
virbr0 8000.5254007db86f yes virbr0-nic
vnet0
# 2、编辑虚拟机配置文件
<interface type='bridge'> # 修改的网络类型
<mac address='52:54:00:9e:35:b0'/>
<source bridge='br0'/> # 桥接的网卡
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
# 3、启动虚拟机
[root@kvm ~]# virsh start centOS7
域 centOS7 已开始
# 4、登陆虚拟机查看
[root@kvm ~]# virsh console centOS7
连接到域 centOS7
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login: root
Password:
Last login: Sun Jul 10 00:52:22 on tty1
[root@centos7 ~]#
[root@centos7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:9e:35:b0 brd ff:ff:ff:ff:ff:ff
inet 10.4.7.130/24 brd 10.4.7.255 scope global noprefixroute dynamic eth0
valid_lft 1790sec preferred_lft 1790sec
inet6 fe80::5054:ff:fe9e:35b0/64 scope link
valid_lft forever preferred_lft forever
# 5、物理机登陆查看
[E:\~]$ ssh root@10.4.7.130
Connecting to 10.4.7.130:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last failed login: Sun Jul 10 15:09:31 CST 2022 from 10.4.7.3 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sun Jul 10 15:06:51 2022
[root@centos7 ~]#
12、虚拟机的迁移
12.1 冷迁移虚拟机
# 1、准备新的虚拟机
[root@kvm02 ~]# yum install libvirt virt-install qemu-kvm -y
[root@kvm02 ~]# systemctl enable libvirtd.service
[root@kvm02 ~]# systemctl start libvirtd.service
[root@kvm02 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
# 2、源主机,迁移的虚拟机是关闭状态
# 导出配置
[root@kvm ~]# virsh dumpxml centOS7_new > centOS7_new.xml
# 检查虚拟机的磁盘是否是qcow2格式如果是raw格式会很大。
[root@kvm ~]# ll /data/vm_disk/centOS7_new.qcow2
-rw------- 1 root root 1984626688 7月 10 13:39 /data/vm_disk/centOS7_new.qcow2
# 3、将磁盘和配置文件传到新主机
[root@kvm ~]# scp centOS7_new.xml root@10.4.7.30:/etc/libvirt/qemu/
[root@kvm ~]# scp /data/vm_disk/centOS7_new.qcow2 root@10.4.7.30:/data/vm_disk/
# 目的主机上重新定义虚拟机
[root@kvm02 ~]# virsh define /etc/libvirt/qemu/centOS7_new.xml
[root@kvm02 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centOS7_new 关闭
# 启动虚拟机
[root@kvm02 ~]# virsh start centOS7_new
域 centOS7_new 已开始
[root@kvm02 ~]# virsh list
Id 名称 状态
----------------------------------------------------
3 centOS7_new running
12.2 热迁移
磁盘文件 : 共享存储
热迁移的流程:
在运行的过程中,发送Kvm01主机的配置文件及运行在内存中的数据到Kvm02
# 1、部署共享存储
[root@kvm ~]# yum install -y nfs-utils
[root@kvm ~]# vim /etc/exports
/data/vm_disk 10.4.7.0/24(rw,sync,no_root_squash,no_all_squash)
[root@kvm ~]# systemctl restart rpcbind
[root@kvm ~]# systemctl restart nfs
# ------源主机------
# 使用共享存储存放虚拟机的磁盘文件
[root@kvm ~]# mkdir /share_store
[root@kvm ~]# mount -t nfs 10.4.7.20:/data/vm_disk/ /share_store/
[root@kvm ~]# df -h | grep share
10.4.7.20:/data/vm_disk 80G 3.8G 77G 5% /share_store
# ------目的主机------
[root@kvm02 ~]# mkdir /share_store/
[root@kvm02 ~]# mount -t nfs 10.4.7.20:/data/vm_disk/ /share_store/
[root@kvm02 ~]# df -h|grep sha
10.4.7.20:/data/vm_disk 80G 3.8G 77G 5% /share_store
# 2、创建主机为共享存储的虚拟机
[root@kvm vm_disk]# mv centOS7_new.qcow2 centOS7_live_migration.qcow2
[root@kvm share_store]# virsh dumpxml centOS7 > /etc/libvirt/qemu/centOS7_live_migration.xml
[root@kvm share_store]# vim /etc/libvirt/qemu/centOS7_live_migration.xml
<name>centOS7_live_migration</name> # 修改主机名
删除uuid
<source file='/share_store/centOS7_live_migration.qcow2'/> # 启动地址
删除mac地址
[root@kvm share_store]# virsh define /etc/libvirt/qemu/centOS7_live_migration.xml
定义域 centOS7_live_migration(从 /etc/libvirt/qemu/centOS7_live_migration.xml)
[root@kvm share_store]# virsh start centOS7_live_migration
域 centOS7_live_migration 已开始
# 3、开始进行热迁移
# 需要添加hosts解析记录
10.4.7.20 kvm
10.4.7.30 kvm02
# 4、开始迁移
[root@kvm ~]# virsh migrate --live --verbose centOS7_live_migration qemu+ssh://10.4.7.30/system --unsafe
root@10.4.7.30's password:
迁移: [100 %]
13、virt-manager管理管理虚拟机
一个图形化的管理工具,在安装了桌面版的系统上操作。
# 1.安装图形界面
[root@kvm01 ~]# yum groupinstall -y "GNOME Desktop"
# 2.安装vnc的服务端
[root@kvm01 ~]# yum install -y tigervnc-server
#3.给vnc设置个密码
[root@kvm01 ~]# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
# 4.开启vnc
[root@kvm01 ~]# vncserver :1
xauth: file /root/.Xauthority does not exist
New 'kvm01:1 (root)' desktop is kvm01:1
Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/kvm01:1.log
[root@kvm01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 16460/Xvnc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 16460/Xvnc
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 9430/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9043/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 9319/master
tcp6 0 0 :::5901 :::* LISTEN 16460/Xvnc
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::6001 :::* LISTEN 16460/Xvnc
tcp6 0 0 :::22 :::* LISTEN 9043/sshd
tcp6 0 0 ::1:25 :::* LISTEN 9319/master
#安装管理工具
[root@kvm01 ~]# yum install -y virt-manager
#安装ssh插件
[root@kvm01 ~]# yum install -y openssh-askpass