1:什么是云计算?
云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的!
KVM + openstack私有云
docker+k8s(管理平台)
2:云计算的服务类型
2.1 IAAS
基础设施即服务(infrastructure as an service) 虚拟机 ecs云主机
底层服务部署好,直接买esc 部署好数据就ok
2.2 PAAS
平台即服务(platform as an service ) php,java 容器
运行环境已经布置好,需要什么服务提供什么服务平台
2.3 SAAS
软件即服务(software as an service ) 企业邮箱服务 cdn服务 rds数据库
直接使用,付钱使用
3:为什么要用云计算
小公司:
10台 20w+ idc 5w/年 + 100M带宽 10W, 10台云主机,前期投入小,扩展灵活,风险小
大公司:
闲置服务器计算资源,虚拟机,出租(超卖)
64G 服务器 64台1G 320台1G 64台 大公司自己的业务 264台 租出去
国企,银行 ----- 了解
公有云: 谁都可以租 (模式 KVM管理平台+收费系统)
私有云: 只有公司内部使用
混合云: 有自己的私有云 + 租的公有云
4:云计算的基础KVM虚拟化
环境
宿主机:内存4G+ 纯净的系统CentOS-7(关闭selinux,firewalld和NetworkManager)
4.1:什么是虚拟化?
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
会造成一定程度的性能损耗,但能充分的利用资源
4.2 :linux虚拟化软件的差别
linux虚拟化软件:
qemu: 软件纯模拟全虚拟化软件,性能差!兼容性好,原生内核 可以跨cpu
xen(半) :性能特别好,需要使用定制的开源内核(劫持指令),兼容性差!
KVM (kernel-base vm --linux基于内核的虚拟机): 性能较好,兼容较好 。它有硬件支持cpu(开启主板虚拟化)原生内核
vmware workstations: 图形界面 --linux版 体验差
virtual box: 图形界面 Oracle -- 体验一般
4.3 安装kvm虚拟化管理工具 --控制内核
主机名 ip地址 内存 虚拟机
kvm01 10.0.0.11 4G(后期调整到2G) cpu开启vt虚拟化
kvm02 10.0.0.12 2G cpu开启vt虚拟化
环境要求:
centos 7.4 7.6 7.8(不要使用7.5) VNC客户端
vmware 宿主机 kvm虚拟机
内存4G,cpu开启虚拟化
更新base源 curl -o /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo
1.修改虚拟化配置
lsmod|grep kvm 查看虚拟化内核参数 --确认是否开启虚拟化
2.下载虚拟机管理程序机器软件
yum install libvirt virt-install qemu-kvm -y
KVM:Kernel-based Virtual Machine
libvirt 作用:虚拟机的管理软件 开关机重启
libvirt 种类: kvm,xen,qemu,lxc....
virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具 主要为了装虚拟机
qemu-kvm qemu-img (qcow2,raw)作用:解决 img依赖 管理虚拟机的虚拟磁盘
4.4:安装一台kvm虚拟机
VNC-Viewer-6.19.325
微软的远程桌面
vnc:远程的桌面管理工具 向日葵 微软的远程桌面
systemctl start libvirtd.service systemctl status libvirtd.service
10.0.0.11 宿主机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
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-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
--noautoconsole (可有可无)
成功会出现 5900端口 netstat -lntup
vnc:10.0.0.11:5900 --使用5900端口用vnc连接
注意:--vnc连接会断开 ,使用virsh命令启动虚拟机会重新建立连接
4.5:kvm虚拟机的virsh日常管理和配置
虚拟机的简单构成
磁盘文件 在/opt(安装目录下)下
配置文件在/etc/libvirt/qemu/centos7.xml -- 可以升级硬件配置
常用命令 -开关重启
列表list(--all 全部) virsh list --显示运行状态的虚拟机
virsh start centos7 启动命令
shutdown 关闭命令(虚拟机有系统)
拔电源关机、强制关机destroy(无系统)
重启reboot(虚拟机有系统)
导出虚拟机配置dumpxml
virsh dumpxml centos7 >vm_centos7-off.xml
删除虚拟机undefine
推荐:先destroy,在undefine
virsh undefine centos7
导入配置define
virsh define /opt/vm_centos7.xml
其他命令 修改、重命名 、挂起恢复、查询端口号
修改配置edit(自带语法检查) 虚拟关机再开,才生效
重命名domrename (低版本不支持)
virsh domrename 原名 改后名
挂起suspend 恢复resume -- 时间会暂停(chronyd服务重启时间会同步)
查询vnc端口号vncdisplay
virsh vncdisplay 虚拟机名
查看真实占用内存
du -smh *
free -m
kvm虚拟机开机启动
kvm运行业务程序 开机启动autostart /etc/libvirt/qemu文件查看开机自启虚拟机,
前提:systemctl enable libvirtd;
取消开机启动autostart --disable
console 控制台 登录命令
1.进入centos7的kvm虚拟机:
2.执行下面命令
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot
virsh console centos7
ctrl +] -- 宿主机和虚拟机之间进行切换
4.6:kvm虚拟机虚拟磁盘管理和快照管理
raw与pcow2区别
磁盘格式 占用空间 传输性能 快照 读写方式
raw 比较大 不方便,总50G,用1G传50G 不支持 连续读写,读写性能较好
qcow2 小 方便,总50G,用1G传1G 支持 随机读写,性能差一点
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
qcow2磁盘初始安装命令
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 **--disk /opt/oldboy.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
4.6.1 磁盘工具的常用命令
查、创建、增量、raw转qcow2过程(四步)
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
-- 先关虚拟机 再改配置文件
# virsh shutdown centos7
# virsh edit centos7
<driver name='qemu' type='qcow2'/>
<source file='/opt/web01.qcow2'/>
导入配置
virsh destroy web01
启动生效
virsh start web01
4.6.2快照管理
创建快照
virsh snapshot-create-as centos7 --name install_ok
查看快照
virshsnapshot-listcentos7
还原快照
virshsnapshot-revertcentos7--snapshotname 1516574134
删除快照
virshsnapshot-deletecentos7--snapshotname 1516636570
4.7:kvm虚拟机克隆
4.7.1:完整克隆
自动挡:
virt-clone --auto-clone -o centos7 -n web01(完整克隆)
virt-clone --auto-clone -o centos7 -n web01 --file /opt/web01.qcow2 --磁盘放的位置 ,不含快照‘
virt-clone --auto-clone -o centos7 -n web02 --auto-clone
手动挡:
#手动完整克隆
#1磁盘文件的克隆
qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2
#2修改配置文件
virsh dumpxml web01 >web03.xml
vim web03.xml
#修改虚拟机的名字
#删除虚拟机uuid
#删除mac地址mac add
#修改磁盘路径disk
#3导入数据并重启生效
virsh define web03.xml
virsh start web03
4.7.2 链接克隆
a:生成虚拟机磁盘文件
qemu-img create -f qcow2 -b web03.qcow2 web04.qcow2
b:生成虚拟机的配置文件
virsh dumpxml web01 >web04.xml
vim web04.xml
#修改虚拟机的名字
<name>web04</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web03.qcow2'/>
c:导入虚拟机并进行启动测试
virsh define web04.xml
virsh start web04
全自动链接克隆脚本:
[root@kvm01 scripts]# cat vi link_clone.sh
i#!/bin/bash
old_vm=$1
new_vm=$2
#a:生成虚拟机磁盘文件
old_disk=virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'
disk_tmp=dirname $old_disk
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2
#b:生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}
4.8:kvm虚拟机的桥接网络
默认的虚拟机网络是NAT模式,网段192.168.122.0/24
4.8.1:创建桥接网卡
取消桥接网卡命令 virsh iface-unbridge br0
dhclient 重启获取IP地址
4.8.2 新虚拟机使用桥接模式
默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
问题1:
如果虚拟机获取不到ip地址:查看虚拟机编辑器是否打开DHCP模式
4.8.3 将已有虚拟机网络修改为桥接模式
1.:关机状态下修改虚拟机配置文件:
2.修改配置:
virsh edit centos7
<interface type='bridge'>
<source bridge='br0'/>
3.:启动虚拟机生效
4.如果上层没有开启dhcp,需要配置
4.控制台直接登陆,查看是否配置成功
virsh console db01
lscpu |grep -i kvm
4.9:热添加技术
热添加硬盘、网卡、内存、cpu
4.9.1 kvm热添加硬盘并挂载
qcow磁盘的创建与挂载
创建过程
挂载
[root@localhost ~]# cp /etc/services /mnt/
[root@localhost ~]# ll /mnt/
total 656 -rw-r--r--. 1 root root 670293 Apr 12 23:04 services
raw硬盘操作
1.先创建一块硬盘
qemu- img create -f qcow2 /opt/web03_ add01. qcow2 2G
2.添加硬盘
3.拆除硬盘
临时立即生效
数据盘扩容:
1.虚拟机,umout取消挂载 宿主机 拆硬盘
2.扩容 ,附加硬盘
qemu-imgresizeweb03_add01.qcow2+2G
virshattach-diskweb03/opt/web03_add01.qcow2vdb--subdriver qcow2 ---临时生效
virshattach-diskweb03/opt/web03_add01.qcow2vdb--subdriver qcow2 --config ---永久生效 (重启后生效)
3.虚拟机 重新挂载 ,刷新挂载空间
系统盘扩容
1.关机,调整vda的虚拟磁盘文件
#virshshutdownweb03
[root@kvm_01~]#virshdumpxmlweb03|grepqcow2
<drivername='qemu'type='qcow2'/>
<sourcefile='/opt/web03.qcow2'/>
2.扩容
qemu-imgresizeweb03.qcow220G
qemu-imginfoweb03.qcow2--查看磁盘容量
3.启动虚拟机 进入控制台 ,重新对vda1分区,删掉分区表,重新创建分区表
virshstartweb03--启动
virshconsoleweb03--控制台登陆
fdisk-l--查看磁盘实际内存
fdisk/dev/vda--设置分区
p--显示分区
d--删除分区表
n--新建分区
p--建主分区
回车
回车
回车
p--打印显示分区
df-h--查看挂载实际内存是否同步
4.重启虚拟机,xfs_growfs生效
[root@localhost~]#reboot
[root@localhost~]#xfs_growfs/dev/vda1
4.9.2 热添加网卡
net模式
[root@kvm_01opt]#virshattach-interfaceweb03networkdefault---临时生效
Interfaceattachedsuccessfully
[root@kvm_01opt]#virshattach-interfaceweb03networkdefault--model e1000
Interfaceattachedsuccessfully---指定网卡
[root@kvm_01opt]#virshattach-interfaceweb03networkdefault--config ---永久生效
Interfaceattachedsuccessfully
桥接模式
[root@kvm_01opt]#virshattach-interfaceweb03bridgebr0--model rtl8139
Interfaceattachedsuccessfully
[root@kvm_01opt]#virshdomiflistweb03
InterfaceTypeSourceModelMAC
-------------------------------------------------------
vnet1networkdefaultvirtio52:54:00:2f:e8:2f
vnet2networkdefaultrtl813952:54:00:2f:37:ca
vnet3networkdefaulte100052:54:00:b3:af:27
vnet4bridgebr0rtl813952:54:00:b4:0b:fb
查看虚拟机网卡数、拆除网卡
[root@kvm_01opt]#virshdomiflistweb03
InterfaceTypeSourceModelMAC
-------------------------------------------------------
vnet1networkdefaultvirtio52:54:00:2f:e8:2f
vnet2networkdefaultrtl813952:54:00:2f:37:ca
vnet3networkdefaulte100052:54:00:b3:af:27
vnet4networkdefaultrtl813952:54:00:be:9d:0f
[root@kvm_01opt]#virshdetach-interfaceweb03network--mac 52:54:00:be:9d:0f
Interfacedetachedsuccessfully
4.9.3 kvm虚拟机在线热添加内存 (可扩可缩)
添加内存
[root@kvm_01opt]#virshsetmemweb032G---临时生效
[root@kvm_01opt]#virshsetmemweb032G---永久生效
🚩[root@localhost~]#free-m
totalusedfreesharedbuff/cacheavailable
Mem:200189180481071788
Swap:000
内存不足报错
4.9.4 kvm虚拟机在线热添加cpu
添加cpu
创建虚拟机时添加
virt-install--virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
热添加
[root@kvm_01opt]#^C
[root@kvm_01opt]#virshsetvcpusweb034
error:invalidargument:requestedvcpusisgreaterthanmaxallowablevcpusforthelivedomain:4>1---最大允许cpu颗数
[root@kvm_01opt]#virshsetvcpusweb03--maximum 4 --config ---重启生效
[root@kvm_01opt]#virshsetvcpusweb032
[root@localhost~]#lscpu
Architecture:x86_64
CPUop-mode(s):32-bit,64-bit
ByteOrder:LittleEndian
CPU(s):2
4.10:kvm虚拟机热迁移(共享的网络文件系统)
环境准备
主机名 ip 内存 网络软件需求 虚拟化
kvm01 10.0.0.11 2G 创建br0桥接网卡kvm和nfs 开启虚拟化
kvm02 10.0.0.12 2G 创建br0桥接网卡kvm和nfs 开启虚拟化
nfs01 10.0.0.31 1G 无nfs 无
冷热迁移区别
名称 状态 具体方法
冷迁移 kvm虚拟机关机 配置文件,磁盘文件
热迁移 kvm虚拟机开机 配置文件,nfs共享
冷迁移
1.kvm02 修改IP地址主机名
2.下载软件
[root@kvm02~]#curl -o /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo --更新下载源
[root@kvm02~]#yum install libvirtqemu-kvmvirt -install -y
3.启动服务
[root@kvm02~]#systemctl start libvirtd
[root@kvm02~]#systemctl enable libvirtd
4.kvm01 将配置文件和磁盘文件发送到kvm02上
[root@kvm_01opt]#virsh dumpxml web03>vm_web03.xml
scp -rp /opt/vm_web03.xml /opt/web03.qcow2 root@10.0.0.12:/opt
#需要将web03处于关机状态,一定要保持在同一目录
#如有附加硬盘以统发送
[root@kvm_01opt]#scp -rp /opt/web03_add01.qcow2 root@10.0.0.12:/opt
root@10.0.0.12's password:
web03_add01.qcow2 100% 12MB 50.7MB/s 00:00
5.kvm02 导入配置文件
#导入配置文件
[root@kvm02opt]#virsh define vm_web03.xml
Domain web03 defined from vm_web03.xml
#启动web03虚拟机
virsh start web03
#注意:如有附加硬盘必须将附加硬盘一同发送过来,否则会报错如下图一
#两节点一定要保持环境一致,主节点做桥接,接收节点也需配置如下图二
[root@kvm02opt]#virsh iface-bridge eth0 br0
#进入控制台验证是否成功
[root@kvm02opt]#virsh console web03
Connected to domain web03
Escape character is ^]
localhost login: root
Password:
Last failed login: Wed Apr 14 20:40:23 CST 2021 onttyS0
There was 1 failed login attempt since thel ast successful login.
Last login: Tue Apr 13 21:38:35 on ttyS0
在线热迁移 ---需要环境一致
1.安装并配置(nfs)
#下载nfs rpcbind服务
yum installnfs-utils rpcbind -y
#修改/etc/export文件
[root@kvm_01~]#vi /etc/exports
/data 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)
#重启并验证挂载是否设置成功
[root@kvm_01~]#systemctl restart rpcbind
[[root@kvm_01~]#systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@kvm_01~]#showmount -e 10.0.0.11
Export list for 10.0.0.11:
/data 10.0.0.0/24
2.将磁盘文件移动到 /data目录下,并挂载共享目录
#我们nfs直接放在了lvm01上
mv /opt/* /data/
#kvm01和kvm02
mount -t nfs10.0.0.11:/data/opt
[root@kvm02opt]#ls /opt
centos7.qcow2 lb02.qcow2 web03_add01.qcow2
centos7.raw nfs-utils-1.3.0-0.68.el7.x86_64.rpm web03.qcow2
db01.qcow2 test.raw web03.xml
db02.qcow2 vm_web03.xml web04.qcow2
lb01.qcow2 web01.qcow2 web04.xml
3.在kvm启动一台虚拟机并进行热迁移 --必须开机状态
#临时迁移配置文件并没有过去
[root@kvm_01~]#virsh migrate --live --verbose web03 qemu+ssh://10.0.0.12/system --unsafe
root@10.0.0.12's password:
Migration: [100%]
[root@kvm02opt]#virsh list
Id Name State
----------------------------------------------------
4 web03 running
#永久迁移
[root@kvm_01~]#virsh migrate --live --verbose web03 qemu+ssh://10.0.0.12/system --unsafe --persistent --undefinesource
root@10.0.0.12's password:
Migration : [100%]
#--verbose 显示进度条 --unsafe 强制迁移
解析不了kvm02,进行hosts解析
CPU不兼容 老版本向新版本服务器迁移
解决方法:
1.执行命令生成一个虚拟机
#从硬盘启动创建一个虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 1024 --vcpus 1 --disk /opt/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
2.导出配置文件 对比配置
[root@kvm_01opt]#virsh dumpxml web03>web03.xml
[root@kvm_01opt]#vimdiff web03.xml web01.xml
3.对比替换cpu配置,将缺少部分进行添加或修改
rtl8139、e1000、virtio 三种内核驱动区别
内核驱动 (ethtool eth0查看网卡速度) rtl8139 e1000 virtio
网卡 10/100Mb/s 1Gb/s 10Gb/s
兼容性 最好 好 差
网卡名称 ens ens eth
生产厂家 Realtek(瑞昱(yù)) inter
扩展小技巧
· yum history 查看历史装了几次yum
yum history info 4 查看第四次下载的具体信息
yum history undo id号 下载后悔实现回滚
· setenforce 0 临时关闭selinux
· systemctl stop postfix 关闭邮件服务
· systemctl stop
· 思科模拟器:gns3 底层qemu模拟器
· 服务器:戴尔(性价比高) --🚩 够用节省成本
· 不同服务器 磁盘阵列的选择
lb服务:raid1 性能要求高
数据库:raid10 安全性要求高
web服务:raid5 访问体验要求高
备份服务:sata硬盘 、raid6 空间大就ok
· 起名字要见名知意
· 忘记密码 --挂载光盘修改密码