云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的!
(1) IAAS 基础设施即服务(infrastructure as an service) 比如: 虚拟机,ecs云主机
(2) PAAS 平台即服务(platform as an service) 比如: php,java,容器
(3) SAAS 软件即服务(software as an service) 比如: 企业邮箱服务,cdn服务,rds数据库
# (1) 云计算在公司中的应用
小公司:10台硬件服务器,20w+ idc,5w/年 + 100M带宽 ,10W投入。 10台云主机,前期投入小,扩展灵活,风险小。
大公司:闲置服务器计算资源,虚拟机,出租(超卖)。超卖的含义:64G 服务器,正常情况下可以虚拟化成台1G,但实际上只用这些
用户不把这些内存吃满,所以也有可能卖320台1G,因为有内存合并的技术,如果跑的东西是相同的,内存只占一份。
本来可以卖64台,这样可以售卖超过64台。
# (2) 公有云、私有云、混合云的区别
公有云: 谁都可以租
私有云: 只有公司内部使用(国企,银行)
混合云: 有自己的私有云 + 租的公有云
小总结: 小公司初期为了省钱使用公有云,大公司用云计算可以把闲置的资源往外面租。
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
linux虚拟化软件介绍
# 所有的东西(硬件)都是靠软件来模拟(什么类型的cpu都能模拟)所以会比较慢
(1) qemu: 软件纯模拟全虚拟化软件,特别慢,但是兼容性好
# 部分的东西用软件来模拟,而部分用的是物理硬件,cpu是使用物理的cpu,只能装适应cpu的操作系统,所以兼容性比较差
# 因为虚拟机直接用的是物理cpu,如果再虚拟机中执行一个关机命令,也会把物理机给关机了。如果不让物理也关机,那么需要修改虚拟机的内核,也就是需要xen进行开源。
# xen再早期不支持windows,但是对linux是开源的。需要使用专门定制的内核,所以兼容性很差。
(2) xen: 性能特别好,需要使用专门修改之后的内核,兼容性差,redhat 5.5(centos 5.5)版本以后就把xen给替换成了kvm
# kvm根据qemu和xen进行了取长补短,想在虚拟化大部分用的都是kvm。
# 做实验时宿主机要求:内存4G+ 纯净的系统CentOS-7(关闭selinux,firewalld和NetworkManager)
(3) kvm: 全虚拟机,它有硬件支持cpu,内置在linux内核模块,而且不需要使用专门的内核,性能较好,兼容较好
# 图形界面性能不好
(4) virtual box: 图形界面
(5) vmware workstations: 图形界面
KVM简单介绍
(1) 基于内核的虚拟机(KVM)是一种内建于 Linux® 的开源虚拟化技术。具体而言,KVM 可帮助您将
Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
(2) KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,
并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,
因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。
实验环境:
主机名 | ip地址 | 内存 | 虚拟机 |
---|---|---|---|
kvm01 | 10.0.0.11 | 4G(后期调整到2G) | cpu开启vt虚拟化 |
kvm02 | 10.0.0.12 | 2G | cpu开启vt虚拟化 |
环境要求:(先安装一台虚拟机)
ip地址:10.0.0.11
系统配置:centos 7.4 7.6 7.8(不要使用7.5)vmware 宿主机 kvm虚拟机 ,内存4G,cpu开启虚拟化
配置阿里云yum源:curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装软件包: yum install libvirt virt-install qemu-kvm -y
命令解释:
yum install libvirt virt-install qemu-kvm -y
libvirt :虚拟机的管理软件,kvm是基于内核的虚拟机,kvm已经内嵌在centos的内核里面了 (KVM: Kernel-based Virtual Machine),用户是不能直接操作内核,需要借助libvirt软件来进行操作,libvirt不仅能操作kvm,还能操作xen、qemu,管理虚拟机的生命周期,关机重启等。
virt-install:主要给虚拟机装操作系统的
qemu-kvm:管理虚拟机的虚拟磁盘,qemu-kvm包含qemu-img(qcow2,raw),qemu xen kvm虚拟化磁盘技术都是相同的,虚拟磁盘格式是通用的
virt virt-install virt-clone作用:虚拟机的安装工具和克隆工具
小技巧:
(1)VMware虚拟机导出的时候,默认是ovf, ovf是好几个文件,后缀名改成ova,ova相当于把ovf文件打了一个包,导出ova比较方便
(2)wget https://xxx,这个时候突然断开了。 然后重新输入命令wget -c https://xxx ,加上-c选项可以继续下载刚才断开的连接,实现断点续传。
(3)kvm装系统的机会只有一次,因为创建虚拟机你不安装系统,强制detroy关机了,如果在启动虚拟机,这时因为虚拟磁盘没有系统,所以会报错。这时需要把这个虚拟机删掉,重新创建,安装系统。
(1)启动libvirt
[root@localhost ~]# systemctl start libvirtd.service
[root@localhost ~]# systemctl enable libvirtd.service
[root@localhost ~]# systemctl status libvirtd.service
#会读取host文件和dns文件
May 15 20:57:07 localhost.localdomain dnsmasq[4375]: reading /etc/resolv.conf
May 15 20:57:07 localhost.localdomain dnsmasq[4375]: using nameserver 114.114.114.114#53
May 15 20:57:07 localhost.localdomain dnsmasq[4375]: read /etc/hosts - 2 addresses
(2)创建虚拟机
# 建议虚拟机内存不要低于1024M,否则安装系统特别慢!
# 创建虚拟机命令(这条命令只能执行一次,如果在执行命令,需要修改--name。为了做实验节省空间,使用小的镜像CentOS-7.2-x86_64-Minimal-1511.iso)
[root@localhost ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7.2-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 这个虚拟机会监听5900端口
Starting install...
Allocating 'centos2.raw' | 10 GB 00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
# 这个虚拟机会监听5900端口
[root@localhost opt]# netstat -tlunp | grep 5900
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4579/qemu-kvm
# 在创建一个虚拟机,需要修改--name和--disk
[root@localhost ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name dongkun --memory 1024 --vcpus 1 --disk /opt/dongkun.raw,format=raw,size=10 --cdrom /opt/CentOS-7.2-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 安装虚拟机的命令详解
--virt-type kvm 虚拟化的类型(qemu)
--os-type=linux 系统类型
--os-variant rhel7 系统版本
--name centos7 虚拟机的名字 (必须唯一)
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10(必须唯一)
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 (windows默认有图形界面,Linux没有图形界面,通过远程,显示界面)
--noautoconsole (可有可无)
(3)开始安装虚拟机:
VNC-Viewer-6.19.325软件,借助VNC协议来进行安装虚拟机
10.0.0.11 宿主机,10.0.0.11:5900 虚拟机
reboot之后我们希望直接通过vnc看过界面,但是vnc显示断开连接,这里有个小小的bug,这里的虚拟机其实已经关机了
# --all可以看全部状态下的虚拟机
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
# 只能看运行和挂起的虚拟机
[root@localhost opt]# virsh list
Id Name State
----------------------------------------------------
列表list(–all)
# --all可以看全部状态下的虚拟机
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
# 只能看运行和挂起的虚拟机
[root@localhost opt]# virsh list
Id Name State
----------------------------------------------------
开机start
# 启动虚拟机
[root@localhost opt]# virsh start centos7
Domain centos7 started
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
2 centos7 running
关机shutdown(虚拟机有系统)
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
1 centos7 running
[root@localhost ~]# virsh shutdown centos7
Domain centos7 is being shutdown
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
拔电源关机destroy
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
2 centos7 running
# 如果遇到关机关不掉的,强制关机
[root@localhost ~]# virsh destroy centos7
Domain centos7 destroyed
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
重启reboot(虚拟机有系统)
[root@localhost ~]# virsh reboot centos7
Domain centos7 is being rebooted
# 一台虚拟机:磁盘文件+配置文件。如果想要备份一台虚拟机,要备份磁盘文件还要备份配置文件。 磁盘文件可以直接cp,但是配置文件不能直接cp出来,要使用导入导出的命令
# 虚拟机对应的配置文件(包含cpu、内存等一些配置)
[root@localhost opt]# ll /etc/libvirt/qemu
total 8
-rw-------. 1 root root 4175 May 15 21:30 centos7.xml
drwx------. 3 root root 42 May 15 20:57 networks
导出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
# 备份配置文件
[root@localhost opt]# virsh dumpxml centos7 > bak_vm_centos7.xml
[root@localhost opt]# ll
total 1618992
-rw-r--r--. 1 root root 5450 May 16 23:07 bak_vm_centos7.xml
-rw-------. 1 qemu qemu 10737418240 May 16 23:07 centos2.raw
-rw-r--r--. 1 qemu qemu 632291328 May 15 21:28 CentOS-7.2-x86_64-Minimal-1511.i
删除undefine 推荐:先destroy,在undefine
# 原因: 如果不停掉虚拟机,直接执行undefine,使用virsh list --all,发现虚拟机还在运行,因为虽然说虚拟机配置文件已经删除了,但是虚拟机的进程还在,所以还显示运行中。
[root@localhost opt]# ps -ef | grep qemu
[root@localhost opt]# virsh list --all
# 把虚拟机停掉
[root@localhost opt]# virsh destroy centos7
小提示: 为了防止上述情况发生,先destroy,在undefine,并且提前把虚拟机的配置文件都备份一下
# 确认name为centos7的配置文件
[root@localhost opt]# ls /etc/libvirt/qemu
centos7.xml networks
# 关闭虚拟机
[root@localhost opt]# virsh shutdown centos7
Domain centos7 is being shutdown
# 删除name为centos7虚拟机的配置文件,但是不删除磁盘文件
[root@localhost opt]# virsh undefine centos7
Domain centos7 has been undefined
# 配置文件已经不存在
[root@localhost opt]# ls /etc/libvirt/qemu
networks
# 磁盘文件还是存在
[root@localhost opt]# ll
total 1618992
-rw-r--r--. 1 root root 5450 May 16 23:07 bak_vm_centos7.xml
-rw-------. 1 root root 10737418240 May 16 23:11 centos2.raw
-rw-r--r--. 1 qemu qemu 632291328 May 15 21:28 CentOS-7.2-x86_64-Minimal-1511.iso
# 这个时候虚拟机已经不存在了
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
导入配置define (进行恢复虚拟机)
# 进行恢复配置
[root@localhost opt]# virsh define bak_vm_centos7.xml
Domain centos7 defined from bak_vm_centos7.xml
# 可以看到centos7的虚拟机已经恢复
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
# 自动默认恢复到/etc/libvirt/qemu路径下
[root@localhost opt]# ll /etc/libvirt/qemu
total 8
-rw-------. 1 root root 4572 May 16 23:28 centos7.xml
drwx------. 3 root root 42 May 15 20:57 networks
重命名domrename (低版本不支持)
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
# 修改虚拟机名称
[root@localhost opt]# virsh domrename centos7 web01
Domain successfully renamed
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
修改配置edit(自带语法检查) 虚拟关机再开,才生效
# 虚拟机关机 (如果不关机)
[root@localhost opt]# virsh shutdown web01
Domain web01 is being shutdown
# 修改虚拟机磁盘文件
[root@localhost opt]# mv centos2.raw web01.raw
# 查看虚拟机的配置文件
[root@localhost opt]# virsh dumpxml web01 | grep raw
<driver name='qemu' type='raw'/>
<source file='/opt/centos2.raw'/>
[root@localhost opt]# virsh start web01
error: Domain is already active
# 修改虚拟机的配置文件
[root@localhost opt]# virsh edit web01
Domain web01 XML configuration edited.
# 修改完成,进行查看
[root@localhost opt]# virsh dumpxml web01 | grep raw
<driver name='qemu' type='raw'/>
<source file='/opt/centos2.raw'/>
# 启动虚拟机
[root@localhost opt]# virsh start web01
Domain web01 started
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
5 web01 running
挂起suspend
[root@localhost ~]# virsh suspend web01
Domain web01 suspended
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
5 web01 paused
恢复resume
[root@localhost ~]# virsh resume web01
Domain web01 resumed
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
5 web01 running
小提示: 挂起然后在恢复的时候,虚拟机的时间和真实的时间不同步,这时需要做时间同步。
查询vnc端口号vncdisplay
[root@localhost ~]# virsh vncdisplay web01
:0
小提示: 用VNC远程连接10.0.0.11:就可以连接,5900是长端口号,短端口号就是0
kvm虚拟机开机启动(开机自启的原理是:在systemctl start libvirtd启动的时候,libvirtd会把设置开机自启的虚拟机给启动起来,所以 libvirtd也必须设置开机自启)
kvm运行业务程序
开机启动autostart,前提:systemctl enable libvirtd;
取消开机启动autostart --disable
[root@localhost ~]# virsh autostart web01
Domain web01 marked as autostarted
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
5 web01 running
[root@localhost ~]# virsh shutdown web01
Domain web01 is being shutdown
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
1 web01 running
# 开机自启的原理,软连接,也就是说执行autostart命令也就是在/etc/libvirt/qemu/autostart/下创建了软连接
[root@localhost ~]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx. 1 root root 27 May 21 21:00 web01.xml -> /etc/libvirt/qemu/web01.xml
[root@localhost ~]# rm -f /etc/libvirt/qemu/autostart/web01.xml
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
1 web01 running
[root@localhost ~]# virsh shutdown web01
Domain web01 is being shutdown
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
[root@localhost ~]# ln -s /etc/lib
libaudit.conf libnl/ libuser.conf
libibverbs.d/ libreport/ libvirt/
[root@localhost ~]# ln -s /etc/libvirt/
libvirt-admin.conf lxc.conf qemu.conf storage/
libvirt.conf nwfilter/ qemu-lockd.conf virtlockd.conf
libvirtd.conf qemu/ secrets/ virtlogd.conf
[root@localhost ~]# ln -s /etc/libvirt/qemu/web01.xml /etc/libvirt/qemu/autostart/
[root@localhost ~]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx. 1 root root 27 May 21 21:16 web01.xml -> /etc/libvirt/qemu/web01.xml
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
1 web01 running
[root@localhost ~]# virsh autostart --disable web01
Domain web01 unmarked as autostarted
[root@localhost ~]# ll /etc/libvirt/qemu/autostart/
total 0
console 控制台登录
# 要使用console控制台,需要在web01虚拟机中执行以下命令, centos7的kvm虚拟机
# 登录虚拟机可以使用VNC远程,也可以在宿主机中执行ssh root@web01进行连接
[root@web01 ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@web01 ~]# reboot
# 在宿主机中直接连接web01虚拟机
[root@localhost ~]# virsh console web01
Connected to domain web01
Escape character is ^]
# 如果要想从虚拟机中推出到宿主机中, 快捷键ctrl+] = ^]
# 控制台连接比VNC来连接的优点
(1) 不需要安装vnc客户端
(2) console支持复制粘贴
(3) vnc有使用限制
作业1:安装一台centos6的kvm虚拟机,实现console登录
安装一台centos6的kvm虚拟机,在安装的过程中.内核参数selinux=0
raw: 俗称裸格式,占用空间比较大,不支持快照功能,不方便传输 ,读写性能较好 总50G,用1G,传输50G
qcow2: 是qcow(copy on write)的升级版,占用空间小,支持快照,性能比raw差一点,方便传输 总50G,用1G,传输1G
# centos2.raw这个文件的后缀什么都可以,方便给我们自己看的
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk **/opt/centos2.raw,format=raw,size=10** --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk **/opt/web02.qcow2,format=qcow2,size=10** --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
qemu-img info,create,resize,convert
查看虚拟磁盘信息
qemu-img info test.qcow2
创建一块qcow2格式的虚拟硬盘:
qemu-img create -f qcow2 test.qcow2 2G
调整磁盘磁盘容量
qemu-img resize test.qcow2 +20G
raw转qcow2:qemu-img convert -f raw -O qcow2 oldboy.raw oldboy.qcow2
-c 压缩
[root@localhost ~]# qemu-img info /opt/web01.raw
image: /opt/web01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 978M
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
2 web01 running
[root@localhost ~]# virsh shutdown web01
Domain web01 is being shutdown
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
[root@localhost ~]# qemu-img convert -f raw -O qcow2 /opt/web01.raw /opt/web01.qcow2
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
bak_vm_centos7.xml CentOS-7.2-x86_64-Minimal-1511.iso web01.qcow2 web01.raw
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
[root@localhost opt]# virsh edit web01
Domain web01 XML configuration edited.
<driver name='qemu' type='qcow2'/>
<source file='/opt/web01.qcow2'/>
[root@localhost opt]# virsh start web01
Domain web01 started
[root@localhost opt]# virsh list --all
Id Name State
----------------------------------------------------
3 web01 running
[root@localhost opt]# qemu-img info /opt/web01.qcow2
image: /opt/web01.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 978M
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@localhost opt]# ll -h
total 2.5G
-rw-r--r--. 1 root root 5.4K May 16 23:07 bak_vm_centos7.xml
-rw-r--r--. 1 qemu qemu 603M May 15 21:28 CentOS-7.2-x86_64-Minimal-1511.iso
-rw-r--r--. 1 qemu qemu 978M May 22 00:11 web01.qcow2
-rw-------. 1 root root 10G May 21 23:56 web01.raw
# 重启,可以在转换格式之前先关关闭虚拟机
virsh destroy web01
virsh start web01
# (1) 创建快照
virsh snapshot-create-as web01 --name install_ok
# (2) 查看快照
virsh snapshot-list web01
# (3) 还原快照
virsh snapshot-revert web01 --snapshotname install_ok
# (4) 删除快照
virsh snapshot-delete web01 --snapshotname install_ok
# raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中(删除快照空间并不会减少,因为qcow2这种格式空间之增不减,如果下次在创建一个快照就会使用这里面的空间)
[root@localhost opt]# qemu-img info web01.qcow2
image: web01.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 install_ok 205M 2023-05-22 00:37:40 00:27:44.116
Format specific information:
compat: 1.1
lazy refcounts: false