一:什么是云计算
-
云计算是按量付费的模式
-
云计算:实现数据的计算、储存、处理和共享的一种技术。需要掌握网络知识、linux、虚拟化、数据库、python、云计算等技术知识;
云:在多个物理服务器安装部署软件整合物理资源(cpu、内存、磁盘)叫做云;也是分布式的一种;
计算:把整合的物理资源分配出去提供给用户,用户部署自己的业务称之为计算;
-
核心技术:
虚拟化技术:提供iaas支撑,包括:cpu(计算资源)、硬盘(存储资源)、网卡(网络资源)
分布式技术:保证数据的高可靠性,存储在不同的物理设备中,摆脱了硬件设备的限制
二:什么是虚拟化
- 服务器虚拟化:将一台物理服务器划分为多个虚拟机,每个虚拟机可以运行独立的操作系统和应用程序。服务器虚拟化可以实现资源的高效利用和灵活的管理,从而降低硬件成本和管理复杂度。
- 存储虚拟化:将多个物理存储设备抽象为单个逻辑存储设备的技术。通过存储虚拟化,可以实现存储资源的池化和集中管理,从而提高存储资源的利用率和灵活性。
- 网络虚拟化:是一种对网络资源进行抽象和隔离的技术,使多个虚拟网络能够共享同一组物理网络资源。网络虚拟化可以实现灵活的网络配置和管理,满足不同应用和使用者的网络需求。
三:qemu和kvm虚拟化软件的差别
虚拟化软件:
1:qemu
-
qemu软件纯模拟全虚拟化软件,效率低!兼容性好(模拟多种硬件,X86架构处理器、AMD64架构处理器、ARM、AIX架构等)!
qemu是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括:cpu、内存、io设备。
qemu有两种工作模式:
系统模式:可以模拟出整个电脑系统;
用户模式:可以运行不同于当前硬件平台的其他平台上的程序(比如在x86cpu架构运行arm的操作系统)
1.0以后次版本只能使用qemu-kvm(只支持Linux)进行加速,1.3版本后qemu和qemu-kvm整合了
qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘
2:kvm
-
KVM(linux) 全虚拟化,它有硬件支持cpu。工作在内核层,性能高;
kvm需要经过修改qemu软件(qemu-kvm)来实现虚拟机的管理;
kvm是一个内核模块,用户空间通过qemu模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,虚拟机中vcpu就是该进程中的线程
3:qemu-kvm
-
qemu-kvm
kvm只负责cpu和内存的虚拟化,系统加载了kvm模块之后用户就可以进一步通过工具创建虚拟机(kvm提供接口),但是仅仅kvm是不够的,用户无法直接控制内核去做事情(kvm只提供接口,怎么创建虚拟机、分配vcpu等并不在kvm上面进行操作),还必须有一个运行在用户空间的工具才行,kvm的开发者选择了比较成熟的开源虚拟机软件qemu来作为这个工具,并对其进行了修改,最后形成了qemu-kvm;
qemu将kvm 整合进来,通过ioctl调用/dev/kvm接口,将有关cpu指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘、输入输出设备等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。由于qemu模拟io设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟机io设备。
- qemu-kvm作用:
- kvm负责:cpu,内存
- qemu负责:io设备,对各种虚拟设备的创建,调用管理;
四:libvirt简介
libvirt是一套免费、开源的支持linux下主流虚拟化管理程序的C函数库,为包括kvm在内的各种虚拟化管理程序提供一套方便、可靠的编程接口;
libvirt虚拟机的管理软件:kvm,xen,qemu,lxc,vmware,hyper-v,virtual box等虚拟化系统;
Libvirtd可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机;
一个针对各种虚拟化平台的虚拟机管理的api库,一些常用的虚拟机管理工具如:virsh、virt-install、virt-manager、virt-clone等和云计算平台openstack都在底层使用了libvirt提供的应用程序接口,libvirt主要由三部分组成:api库、守护进程libvirtd和默认cli管理工具virsh
五:安装kvm虚拟化管理工具
apt install qemu virt-manager
宿主机:内存4G + 纯净的系统ubuntu 22.04.1。
cpu开启虚拟化。
两个网卡,eth0 仅主机模式 10.0.0.11, eth1 nat模式 172.16.0.11 。
检查服务器是否开启虚拟化
[root@localhost ~]# hostnamectl set-hostname kvm-server
[root@kvm-server ~]# lscpu |grep -i virtualization
Virtualization: VT-x
Virtualization type: full
[root@kvm-server ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
4
配置离线源并安装软件包
# 创建解压目录
[root@kvm-server ~]# mkdir -p /var/www/html
[root@kvm-server ~]# tar zxvf openstack-yoga-ceph.tar.gz -C /var/www/html/
# 基础工具包
bash-completion
安装kvm工具
[root@kvm-server ~]# yum install libvirt virt-install qemu-kvm virt-manager -y
virt和libvirtd以及qemu-kvm验证
[root@kvm-server ~]# systemctl start libvirtd
[root@kvm-server ~]# systemctl enable libvirtd
[root@kvm-server ~]# virt-manager
[root@kvm-server ~]# systemctl stop libvirtd
[root@kvm-server ~]# virt-manager #停止了libvirtd之后virt-manager无法连接到qemu-kvm
[root@kvm-server ~]# yum -y install mesa-libGLES-devel mesa-dri-drivers
总结:virt-manager通过libvirtd管理qemu-kvm虚拟机
六:安装一台kvm虚拟机
启动libvirtd服务
[root@kvm-server ~]# systemctl start libvirtd.service
[root@kvm-server ~]# systemctl status libvirtd
创建虚拟机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
[root@kvm-server ~]# mkdir /kvm
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos76-01 --memory 1024 --vcpus 1 --disk /kvm/centos01.raw,format=raw,size=10 --cdrom /kvm/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
--virt-type kvm 虚拟化的类型(不写此参数默认为qemu)
--os-type=linux 系统类型
--os-variant centos7 系统版本
--name centos76-01 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos01.raw,format=raw,size=10 虚拟机所用磁盘或镜像文件格式以及保存位置,以G为单位
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 系统镜像
--network network=default 使用默认桥接的网络
--graphics vnc,listen=0.0.0.0 --graphics 控制模式,listien=监听地址,port=监听端口
--noautoconsole 不自动开启控制台
查看端口:
[root@kvm-server ~]# netstat -auntlp|grep 5900
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 19480/qemu-kvm
vnc:10.0.0.11:5900
启动第一台云主机端口是5900,第二台云主机为5901,以此类推。
安装操作系统配置
云主机不建议用swap分区
swap分区属于硬盘上面的空间,云主机硬盘本身就是虚拟的比物理硬盘性能要低,这个时候要拿性能低的来作为内存加速或者作为虚拟内存,那么这个内存性能也很低,最后导致一些进程占用swap空间会出现进程卡顿、计算跟不上。所以云主机为了提高性能尽可能关闭swap。
第一次安装完操作系统需要手动启动
virsh start centos76-01
七:kvm虚拟机的virsh日常管理和配置
1:libvirt软件提供virsh命令
列表:virsh list --all
开机:virsh start $name
关机:virsh shutdown $name
拔电源关机:virsh destroy $name
重启:virsh reboot $name
2:导入导出虚机配置及删除
虚拟机由两个文件组成:磁盘文件和配置文件
导出配置dumpxml例子:virsh dumpxml centos76-01>centos76-01.xml
删除virsh undefine centos76-01.xml 推荐:先拔电源destroy,在删除undefine
导入配置virsh define centos76-01.xml
[root@kvm-server ~]# virsh dumpxml centos76-01>centos76-01.xml #导出虚机配置文件
[root@kvm-server ~]# virsh destroy centos76-01 #拔电源
[root@kvm-server ~]# virsh undefine centos76-01 #删除虚机
[root@kvm-server ~]# virsh list --all #再次查看就没有centos7实例了
[root@kvm-server ~]# virsh define /root/centos76-01.xml #导入配置
[root@kvm-server ~]# virsh list --all #再次查看恢复了
[root@kvm-server ~]# virsh start centos76-01
3:重命名
domrename 必须关机状态下操作
[root@kvm-server ~]# virsh shutdown centos76-01
[root@kvm-server ~]# virsh domrename centos76-01 centos76-001
[root@kvm-server ~]# virsh list --all
Id Name State
----------------------------------------------------
- centos76-001 shut off
4:挂起
suspend,挂起之后到vnc控制界面输入任何字符都无法输入
[root@kvm-server ~]# virsh suspend centos76-001
5:恢复挂起虚拟机
resume,恢复之后解锁
[root@kvm-server ~]# virsh resume centos76-001
6:查询vnc端口号
vncdisplay
[root@kvm-server ~]# virsh vncdisplay centos76-001
:0
vnc可以使用长接口10.0.0.11:5900,还可以使用短接口10.0.0.0:0去连接
7:kvm虚机开机自启动
下面两种方法哪一种都行
[root@kvm-server ~]# virsh autostart centos76-001
[root@kvm-server ~]# ln -s /etc/libvirt/qemu/centos76-001.xml /etc/libvirt/qemu/autostart/
前提:systemctl enable libvirtd(libvirtd服务开机自启动)
开机自启动的本质就是创建一个软件接到/etc/libvirt/qemu/autostart/目录下面
[root@kvm-server ~]# ll /etc/libvirt/qemu/autostart/centos76-001.xml
lrwxrwxrwx 1 root root 34 Oct 13 13:37 /etc/libvirt/qemu/autostart/centos76-001.xml -> /etc/libvirt/qemu/centos76-001.xml
8:kvm虚机取消开机自启动
autostart --disable
[root@kvm-server ~]# virsh autostart --disable centos76-001
[root@kvm-server ~]# rm -rf /etc/libvirt/qemu/autostart/centos76-001.xml
9:xshell-console登录,代替vnc
[root@kvm-server ~]# virsh console centos76-001 #默认无法登录的,没有配置console 波特率。
[root@kvm-server ~]# ssh 192.168.122.159
[email protected]'s password:
Last login: Fri Oct 13 13:39:31 2023
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #115200=波特率,n8=8位
[root@localhost ~]# reboot
测试:
[root@kvm-server ~]# virsh console centos76-001
Connected to domain 'centos76-001'
Escape character is ^] (Ctrl + ]) # 到这里之后敲回车
CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64
localhost login: root # 输入账号
Password: #输入密码
Last login: Sun Sep 17 22:05:35 from kvm01
[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64
localhost login: # ctrl + ] # 退出
[root@kvm-server ~]#
10:模拟磁盘分区满了,迁移虚拟机到其它的磁盘分区
修改配置edit
直接mv移动磁盘文件到新的分区下面
[root@kvm-server ~]# virsh shutdown centos76-001
[root@kvm-server ~]# mkdir /data
[root@kvm-server ~]# mv /kvm/centos01.raw /data/
再次启动的时候会报错(还是会去/kvm/下面寻找磁盘文件)
[root@kvm-server ~]# virsh start centos76-001
error: Failed to start domain 'centos76-001'
error: Cannot access storage file '/kvm/centos01.raw': No such file or directory
既然找不到磁盘文件很具推断应该应该修改配置文件/etc/libvirt/qemu/centos76-001.xml
当打开这个文件之后都会有提示让使用virsh edit centos76-001去修改。
[root@kvm-server ~]# virsh edit centos76-001
<source file='/kvm/centos01.raw'/> 修改成 <source file='/data/centos01.raw'/>
[root@kvm-server ~]# virsh start centos76-001 #再次启动成功
Domain 'centos76-001' started
[root@kvm-server ~]# virsh dumpxml centos76-001 |grep raw #验证,能看到磁盘路径ok
<driver name='qemu' type='raw'/>
<source file='/data/centos01.raw'/>
八:kvm虚拟机虚拟磁盘格式转换和快照管理
raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输。假设:总10G占用10G
qcow2: cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输。假设:总10G占用2G
如下两条命令安装操作系统的格式不一样。一个raw一个qcow2。
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos01.raw,format=raw,size=10 --cdrom /opt/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos01.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
1:磁盘工具的常用命令
qemu-img info,create,resize,convert
1.1:查看虚拟磁盘信息:info
[root@kvm-server ~]# qemu-img info /data/centos01.raw
image: /data/centos01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
1.2:创建一块qcow2格式的虚拟硬盘:create
[root@kvm-server ~]# qemu-img create -f qcow2 /data/centos01.qcow2 1G
Formatting '/data/centos01.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm-server ~]#
[root@kvm-server ~]# qemu-img info /data/centos01.qcow2
image: /data/centos01.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
1.3:调整磁盘容量:
resize(qcow2不支持减少磁盘容量,raw支持)
[root@kvm-server ~]# qemu-img resize /data/centos01.qcow2 +1G
Image resized.
[root@kvm-server ~]# qemu-img info /data/centos01.qcow2 #再次查看virtual size变成2G为ok。
image: /data/centos01.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
1.4:raw转qcow2并使用qcow2文件启动:
qemu-img convert -f raw -O qcow2 xxx.raw xxx.qcow2
[root@kvm-server ~]# qemu-img info /data/centos01.raw
image: /data/centos01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
[root@kvm-server ~]# qemu-img convert -f raw -O qcow2 /data/centos01.raw /data/centos02.qcow2
[root@kvm-server data]# ll -h /data/
total 3.1G
-rw-r--r-- 1 root root 257K Oct 13 14:12 centos01.qcow2
-rw------- 1 qemu qemu 10G Oct 13 14:13 centos01.raw
-rw-r--r-- 1 root root 1.4G Oct 13 14:13 centos02.qcow2
[root@kvm-server ~]# qemu-img info /data/centos02.qcow2
image: /data/centos02.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
验证qcow2格式磁盘启动虚拟机
[root@kvm-server ~]# virsh edit centos76-001
<driver name='qemu' type='raw'/> 修改为:<driver name='qemu' type='qcow2'/>
<source file='/data/centos01.raw'/> 修改为:<source file='/data/centos02.qcow2'/>
[root@kvm-server ~]# virsh start centos76-001 #启动实例
[root@kvm-server ~]# ll -h /data/centos02.qcow2
-rw-r--r-- 1 root root 1.4G Oct 13 14:13 /data/centos02.qcow2 #qcow2格式原始大小
测试增加数据以及删除数据查看磁盘空间会不会随着删除而减少
[root@kvm-server ~]# ssh 192.168.122.159 #测试ssh登录也可以使用vnc测试
[email protected]'s password:
Last login: Fri Oct 13 13:56:10 2023
[root@localhost ~]# dd if=/dev/zero of=test.raw bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 7.70743 s, 68.0 MB/s
[root@localhost ~]# exit
logout
Connection to 192.168.122.159 closed.
[root@kvm-server ~]# ll -h /data/centos02.qcow2
-rw-r--r-- 1 qemu qemu 1.8G Oct 13 14:41 /data/centos02.qcow2 #qcow2格式用多少占多少
当在虚机删除500M文件之后空间也不会释放,因为只能扩大不能缩小。
[root@kvm-server ~]# ssh 192.168.122.159
[email protected]'s password:
Last login: Fri Oct 13 14:40:59 2023 from gateway
[root@localhost ~]#
[root@localhost ~]# rm -rf test.raw
[root@localhost ~]# exit
logout
Connection to 192.168.122.159 closed.
[root@kvm-server ~]# ll -h /data/centos02.qcow2
-rw-r--r-- 1 qemu qemu 1.8G Oct 13 14:42 /data/centos02.qcow2
raw和qcow2格式磁盘大小对比:
(字节单位换算器:https://tool.520101.com/calculator/zijie/ https://www.5ii.com/calcdata/)
[root@kvm-server ~]# ll /data/centos02.qcow2
-rw-r--r-- 1 root root 1908604928 Oct 8 15:04 /data/centos02.qcow2
[root@kvm-server ~]#
[root@kvm-server ~]# ll /data/centos01.raw
-rw------- 1 root root 10737418240 Oct 8 09:20 /data/centos01.raw
[root@kvm-server ~]# virsh help domblkinfo
[root@kvm-server ~]# virsh domblkinfo centos76-001 vda
[root@kvm-server ~]# virsh domblkinfo centos76-001 --all
[root@kvm-server ~]# virsh domblkinfo centos76-001 vda --human
2:快照管理
创建快照virsh snapshot-create-as --name snapshot01 centos76-001
[root@kvm-server ~]# virsh snapshot-create centos76-001 #默认时间戳为名字
Domain snapshot 1694961947 created
[root@kvm-server ~]# virsh snapshot-create-as --name snapshot01 centos76-001 #指定名字为snapshot01
Domain snapshot snapshot01 created
查看快照virsh snapshot-list centos76-001
[root@kvm-server ~]# virsh snapshot-list centos76-001
Name Creation Time State
------------------------------------------------------------
1697179540 2023-10-13 14:45:40 +0800 running
snapshot01 2023-10-13 14:45:52 +0800 running
删除快照virsh snapshot-delete centos76-001 --snapshotname 1694961947
[root@kvm-server ~]# virsh snapshot-delete centos76-001 --snapshotname 1697179540
Domain snapshot 1697179540 deleted
还原快照virsh snapshot-revert centos76-001--snapshotname snapshot01
测试:虚拟机开机之后创建一些测试文件,再关机还原快照查看文件是否存在,如果不存在则说明恢复成功
[root@kvm-server ~]# virsh snapshot-revert centos76-001 --snapshotname snapshot01
raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
# 快照保存在qcow2磁盘文件中
[root@kvm-server ~]# qemu-img info /data/centos02.qcow2
image: /data/centos02.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 1.52 GiB
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
2 snapshot01 216 MiB 2023-09-17 07:01:18 08:08:45.019
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
九: kvm虚拟机克隆
1:完整克隆
完整克隆是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储空间;
1.1:自动克隆
[root@kvm-server ~]# ll -h /data/centos02.qcow2
-rw-r--r-- 1 root root 2.3G Oct 13 14:53 /data/centos02.qcow2
[root@kvm-server ~]#
[root@kvm-server ~]# virt-clone --auto-clone -o centos76-001 -n centos76-001-backup
Allocating 'centos02-clone.qcow2' | 10 GB 00:00:02
Clone 'centos76-001-backup' created successfully.
[root@kvm-server ~]# ll /data/centos02* #再次查看大小不一样,克隆的时候不会克隆快照
-rw------- 1 root root 1390411776 Oct 13 14:57 /data/centos02-clone.qcow2
-rw-r--r-- 1 root root 2378695168 Oct 13 14:53 /data/centos02.qcow2
1.2:手动克隆
[root@kvm-server ~]# cp /data/centos02-clone.qcow2 /data/node1.qcow2 #拷贝磁盘文件
[root@kvm-server ~]# virsh dumpxml centos76-001 >node1.xml #备份配置文件
[root@kvm-server ~]# vim node1.xml #编辑配置文件
#修改虚拟机的名字为node1
<name>centos76-001</name> 改为 <name>node1</name>
#删除虚拟机uuid
#删除mac地址
#修改磁盘路径
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/data/centos01.qcow2'/> # centos01改为node1
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
[root@kvm-server ~]# virsh define node1.xml #导入配置文件
[root@kvm-server ~]# virsh start node1 #启动系统
2:链接克隆
链接克隆是对原始虚拟机的引用,所需的存储空间较少。但是必须能够访问原始虚拟机才能运行;
[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos01.qcow2 /data/node2.qcow2
Formatting '/data/node2.qcow2', fmt=qcow2 size=2147483648 backing_file='/data/centos01.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm-server ~]# qemu-img info /data/node2.qcow2
image: /data/node2.qcow2 #在你使用web02.qcow2这块盘的时候也会要求先加载centos01-clone.qcow2这块盘,然后再把web02.qcow2这块盘的差异数据补上。
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
backing file: /data/centos01.qcow2 #基于centos01.qcow2做的连接克隆
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm-server ~]# ll -h /data/node2.qcow2 #查看一下大小
-rw-r--r-- 1 root root 193K Oct 13 15:29 /data/node2.qcow2
[root@kvm-server ~]# virsh dumpxml centos76-001 >node2.xml
[root@kvm-server ~]# vim node2.xml
#修改虚拟机的名字
<name>centos76-001</name> 改为 <name>node2</name>
#删除虚拟机uuid
<uuid>ded20983-d091-48f9-af0c-1e18ea3b9c72</uuid>
#删除mac地址
<mac address='52:54:00:3f:7f:62'/>
#修改磁盘路径
<source file='/data/node2.qcow2'/>
[root@kvm-server ~]# virsh define node2.xml
[root@kvm-server ~]# virsh start node2
[root@kvm-server ~]# ll -h /data/node2.qcow2 #再次查看大小变大了。这个是因为开机之后生成一些日志、数据
-rw-r--r-- 1 qemu qemu 7.7M May 2 21:08 /data/node2.qcow2
九:kvm虚拟机桥接网络
默认的虚拟机网络是nat模式,网段192.168.122.0/24
1:创建桥接网卡
创建桥接网卡
[root@kvm-server ~]# virsh iface-bridge eth1 br0
Created bridge br0 with attached device eth1
Bridge interface br0 started
创建网桥会自动修改网卡配置文件
[root@kvm-server ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="172.16.0.11"
NETMASK="255.255.255.0"
GATEWAY="172.16.0.254"
STP="on"
DELAY="0"
[root@kvm-server ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BRIDGE="br0"
删除桥接网卡(删除也会自动删除 br0 网卡配置文件)
[root@kvm-server ~]# virsh iface-unbridge br0
2:新虚拟机使用桥接模式
默认NAT模式
重点修改’bridge=‘参数
[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02-clone.qcow2 /data/bridge.qcow2
Formatting '/data/bridge.qcow2', fmt=qcow2 size=10737418240 backing_file='/data/centos02-clone.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name bridge --memory 1024 --vcpus 1 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Domain creation completed.
验证网段是否和虚拟机桥接网段一样
[root@kvm-server ~]# virsh console bridge
[root@localhost ~]# ip a|grep 172
inet 172.16.0.26/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0
抓包测试:虚拟机长ping
[root@kvm-server ~]# tcpdump -i vnet0 -enl icmp #vnet网线
[root@kvm-server ~]# tcpdump -i br0 -enl icmp #br0网桥
[root@kvm-server ~]# tcpdump -i virbr0 -enl icmp #默认net网络模式,br0启动的虚拟机这个无法抓到包
[root@kvm-server ~]# tcpdump -i eth1 -enl icmp #eth1网卡
1.2:修改默认网络虚拟机为桥接网络
[root@kvm-server ~]# virsh destroy centos76-001
[root@kvm-server ~]# virsh edit centos76-001
<interface type='network'>
<mac address='52:54:00:42:53:52'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<!--修改成如下-->
<interface type='bridge'>
<mac address='52:54:00:4b:b9:6a'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
[root@kvm-server ~]# virsh start centos76-001 #启动
[root@kvm-server ~]# virsh console centos76-001 #consle连接
[root@localhost ~]# ip a|grep 172
inet 172.16.0.27/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0
抓包测试:虚拟机长ping
[root@kvm-server ~]# tcpdump -i vnet0 -enl icmp #vnet网线
[root@kvm-server ~]# tcpdump -i br0 -enl icmp #br0网桥
[root@kvm-server ~]# tcpdump -i virbr0 -enl icmp # 默认net网络模式,br0启动的虚拟机这个无法抓到包
[root@kvm-server ~]# tcpdump -i eth1 -enl icmp # eth1网卡
1.3:网络详解
上图中左边为br桥接网络模式,右边为默认net网络模式。net模式想要上外网就需要内核转发到服务器的网卡。
# 课后学习
[root@kvm-server ~]# virsh net-list
Name State Autostart Persistent
------------------------------------------------
default active yes yes
[root@kvm-server ~]# virsh net-edit default # nat模式
# 查看虚拟机网络模式
[root@kvm-server ~]# virsh edit $name # 搜索interface
[root@kvm-server ~]# virsh net-dumpxml default
十:kvm虚拟机扩容
(硬盘、网卡、内存、cpu)
[root@kvm-server ~]# virsh snapshot-list centos76-001
[root@kvm-server ~]# virsh snapshot-delete centos76-001 --snapshotname snapshot01
[root@kvm-server ~]# virsh domrename centos76-001 vm01
1:kvm虚拟机添加硬盘
注意:必须先创建硬盘在执行添加硬盘
临时生效
virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2
永久生效--config
virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2 --config
临时剥离硬盘
virsh detach-disk vm01 vdb
永久剥离硬盘--config
virsh detach-disk vm01 vdb --config
创建一块10G的盘符
[root@kvm-server ~]# qemu-img create -f qcow2 /data/vm01-disk01.qcow2 10G
Formatting '/data/vm01-disk01.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
查看当前web实例盘符的名字(vda)
[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd
<target dev='vda' bus='virtio'/>
vm01虚拟机添加一块硬盘为vdb,必须要用绝对路径(需要虚拟机开机才可以添加)
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb
error: Failed to attach disk
error: Requested operation is not valid: domain is not running
[root@kvm-server ~]# virsh start vm01 # 必须启动虚拟机才可以添加硬盘
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb
Disk attached successfully
[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd #再次查看
<target dev='vda' bus='virtio'/>
<target dev='vdb' bus='virtio'/>
默认用raw格式打开硬盘所以为0MB。原因没有指定打开的格式
[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# lsblk |grep vdb
vdb 253:16 0 192.5K 0 disk
[root@localhost ~]#
[root@localhost ~]# fdisk -l|grep vdb
Disk /dev/vdb: 0 MB, 197120 bytes, 385 sectors #查看硬盘没有显示大小
剥离硬盘
[root@kvm-server ~]# virsh detach-disk vm01 vdb
Disk detached successfully
[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd #再次查看
<target dev='vda' bus='virtio'/>
加上此参数--subdriver qcow2能识别大小。--config永久添加,如果不加重启服务器之后丢失vdb盘
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2 --config
再次到虚拟机查看10G的硬盘能识别出来并挂载
[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# fdisk -l |grep vdb
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
[root@localhost ~]#
[root@localhost ~]# lsblk |grep vdb
vdb 253:16 0 10G 0 disk
[root@localhost ~]# mkfs.xfs /dev/vdb
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 10G 33M 10G 1% /mnt
[root@localhost ~]# cp /etc/services /mnt/ #拷贝一个文件,等扩容完了之后查看文件还存不存在
[root@localhost ~]# umount /mnt/ #扩容是硬盘不能是挂载状态
测试扩容
[root@kvm-server ~]# virsh detach-disk vm01 vdb #剥离硬盘
[root@kvm-server ~]# qemu-img resize /data/vm01-disk01.qcow2 +10GG #扩容
[root@kvm-server ~]# qemu-img info /data/vm01-disk01.qcow2 #查看大小为20G
image: /data/vm01-disk01.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 11.6 MiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
添加硬盘
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2
再次测试挂载并查看大小
[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# ll /mnt/services #文件还在
-rw-r--r--. 1 root root 670293 May 3 22:47 /mnt/services
[root@localhost ~]# df -h /mnt/ #查看大小没有更新
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 10G 33M 10G 1% /mnt
[root@localhost ~]# xfs_growfs /dev/vdb # 更新一下超级块儿(刷新分区信息)
data blocks changed from 2621440 to 5242880
[root@desktop-hh2qqho ~]# df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 20G 34M 20G 1% /mnt
2:kvm虚拟机添加网卡
添加网卡,加此--model virtio参数添加的网卡显示eth不加就随机显示ens
--config永久添加,重启也生效
添加网卡
[root@kvm-server ~]# virsh attach-interface vm01 --type bridge --source br0 --model virtio
[root@kvm-server ~]# virsh attach-interface vm01 --type bridge --source br0 --model virtio --config
查看网卡,多了eth1
[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# ip a
剥离网卡(加上虚机的mac)
[root@kvm-server ~]# virsh detach-interface vm01 --type bridge --mac 52:54:00:a9:d8:41
[root@kvm-server ~]# virsh detach-interface vm01 --type bridge --mac 52:54:00:a9:d8:41 --config
3:kvm虚拟机添加内存
新建虚机进行热添加内存
[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02.qcow2 -F qcow2 /data/vm02.qcow2
Formatting '/data/vm02.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 backing_file=/data/centos02.qcow2 backing_fmt=qcow2 lazy_refcounts=off refcount_bits=16
利用此--memory 512,maxmemory=2048参数添加虚机,支持热添加内存
maxmemory指定最大内存,如果制定了此参数实际2048m内存再物理机已经分配出去了
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name vm02 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/vm02.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm-server ~]# virsh console vm02
[root@localhost ~]# free -m #查看当前内存
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 302 96 82 8 122 54
Swap: 0 0 0
临时热添加内存和缩小
# 临时热添加内存
[root@kvm-server ~]# virsh setmem vm02 2048M
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 302 112 76 8 113 44
Swap: 4095 0 4095
# 也能缩小,如果是生产不建议缩小会导致内存数据丢失
[root@kvm-server ~]# virsh setmem vm02 1024M
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1838 113 1610 8 114 1578
Swap: 4095 0 4095
永久添加内存与缩小
[root@kvm-server ~]# virsh setmem vm02 2048M --config #扩容
[root@kvm-server ~]# virsh setmem vm02 1024M --config #缩小
在原有虚机热添加内存
[root@kvm-server ~]# virsh edit vm01
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<!--改为-->
<memory unit='MiB'>2048</memory>
<currentMemory unit='MiB'>1024</currentMemory>
[root@kvm-server ~]# virsh setmem vm01 2048M --config --live
[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# reboot #重启虚机生效
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 991 97 774 6 119 750
Swap: 4095 0 4095
[root@kvm-server ~]# virsh dominfo vm01
Id: 4
Name: vm01
UUID: 73a3f7bb-c969-4216-ab5d-fafe6fad6d45
OS Type: hvm
State: running
CPU(s): 1
CPU time: 30.8s
Max memory: 2097152 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
[root@kvm-server ~]# virsh setmem vm01 2048M
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1838 104 1552 8 181 1562
Swap: 4095 0 4095
4:kvm虚拟机添加cpu
创建虚机进行热添加cpu
[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02.qcow2 -F qcow2 /data/vm03.qcow2
Formatting '/data/vm02.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 backing_file=/data/centos02.qcow2 backing_fmt=qcow2 lazy_refcounts=off refcount_bits=16
加此参数支持热添加cpu--vcpus 5,maxvcpus=10
maxvcpus指定最大cpu,如果制定了此参数实际vcpu已经再物理机分配出去了
[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name vm03 --memory 512,maxmemory=2048 --vcpus 5,maxvcpus=10 --disk /data/vm03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
增加cpu,--config永久生效,不支持减少cpu
[root@kvm-server ~]# virsh console vm03
[root@localhost ~]# lscpu |grep 'CPU(s):'
CPU(s): 5
NUMA node0 CPU(s): 0-4
# 增加cpu
[root@kvm-server ~]# virsh setvcpus vm03 6
[root@localhost ~]# lscpu |grep 'CPU(s):'
CPU(s): 6
NUMA node0 CPU(s): 0-5
标签:--,qcow2,kvm,server,virsh,root
From: https://www.cnblogs.com/zhangjianzi/p/18122862