kvm.html


1:什么是云计算?

  1. #云计算是壬种按量付费的模式,可以像用自来水一样,使用计算资源。
  2. #云计算的底层是通过虚拟化技术来实现的!

2:云计算的服务类型

#2.1 IAAS 基础设施即服务(infrastructure as an service)    虚拟机  ecs云主机

#2.2 PAAS 平台即服务(platform as an service ) php,java      容器

#2.3 SAAS  软件即服务(software as an service )   企业邮箱服务  cdn服务  rds数据库

2.1-KVM虚拟化 - 图1

3:为什么要用云计算

小公司:10台 20w+ idc 5w + 100M 10W, 10台云主机,前期投入小,扩展灵活,风险小
大公司:闲置服务器计算资源,虚拟机,出租(超卖)
64G 服务器 64台1G 320台1G 64台 大公司自己的业务 264台 租出去

公有云: 谁都可以租
私有云: 只有公司内部使用
混合云: 有自己的私有云 + 租的公有云

4:云计算的基础KVM虚拟化

  • 宿主机:内存4G+ 纯净的系统CentOS-7
  • 关闭selinux,firewalld 和 NetworkManager

    4.1:什么是虚拟化?

    虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。

    4.2 :linux虚拟化软件的差别

    linux虚拟化软件/技术: ```javascript

    qemu 软件纯模拟全虚拟化软件,特别慢!兼容性好!

    xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen kvm

    KVM(linux) 全虚拟机,它有硬件支持cpu,内置在linux内核模块,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好

vmware workstations: 图形界面 virtual box: 图形界面 Oracle

<a name="IijQB"></a>
## 4.3  安装kvm虚拟化管理工具
| 主机名 | ip地址 | 内存 | 虚拟机 |
| --- | --- | --- | --- |
| kvm01 | 10.0.0.11 | 4G(后期调整到2G) | cpu开启vt虚拟化 |
| kvm02 | 10.0.0.12 | 2G | cpu开启vt虚拟化 |


<a name="q4rw3"></a>
# 4.4:安装一台kvm虚拟机<br />
```javascript
KVM:Kernel-based Virtual Machine  
libvirt                         作用:虚拟机的管理软件
libvirt: kvm,xen,qemu,lxc....

virt   virt-install virt-clone  作用:虚拟机的安装工具和克隆工具
qemu-kvm  qemu-img (qcow2,raw)  作用:管理虚拟机的虚拟磁盘

环境要求:

centos 7.4 / 7.6 / 7.8 (不要使用7.5)
vmware  宿主机   kvm虚拟机
内存4G,cpu开启虚拟化

image.png

#IP地址规划:
IP:10.0.0.11

#安装base源
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

启动虚拟机的管理软件:
systemctl start libvirtd.service
systemctl enable libvirtd.service
systemctl status libvirtd.service

windows安装 VNC-Viewer
建议虚拟机内存不要低于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

Ps:  注意iso放的位置  /opt/
参数户解释: 
--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 (可有可无)

vnc连接:10.0.0.11:5900
image.png
安装时注意事项:

  • 云主机都没有swap分区只需添加一个 / 分区 打开网网络服务(DHCP分配即可)

image.png
Snipaste_2021-02-22_11-53-14.png

4.5:kvm虚拟机的virsh日常管理和配置

[root@kvm01 opt]# ll
total 1634880
-rw------- 1 qemu qemu 10737418240 Feb 22 14:50 centos2.raw
-rw-r--r-- 1 qemu qemu   632291328 Feb 22 11:19 CentOS-7-x86_64-Minimal-1511.iso

备份配置文件:
[root@kvm01 opt]# virsh dumpxml  centos7.6 >./vm_centos7.xml

查看kvm虚拟机启动的系统
[root@kvm01 opt]# virsh list  --all
 Id    Name                           State
----------------------------------------------------
 2     centos7.6                      running

修改本地文件的名称已经kvm内系统的名称
[root@kvm01 opt]# virsh shutdown centos7.6
Domain centos7.6 is being shutdown

[root@kvm01 opt]# virsh edit centos7.6 
<domain type='kvm'>
...
  <vcpu placement='static'>2</vcpu>
...
  <source file='/opt/centos7.raw'/>

[root@kvm01 opt]# mv centos2.raw  centos7.raw 
[root@kvm01 opt]# virsh domrename centos7.6  web01

#查看虚拟机开机自启动主机: 
[ root@kvm01 opt]# virsh list --autostart

列表list(—all)
开机start
关机shutdown(虚拟机有系统)
拔电源关机destroy
重启reboot(虚拟机有系统)

导出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
删除undefine 【规范操作: 建议关闭kvm时,再备份配置文件,再关闭】
先shutdown/destroy,再undefine
导入配置define
修改配置edit(自带语法检查)
重命名domrename (低版本不支持)

挂起suspend —-会导致时间不同步
恢复resume
查询vnc端口号vncdisplay

kvm虚拟机开机启动
kvm运行业务程序
开机启动autostart,前提:systemctl enable libvirtd;
取消开机启动autostart —disable

console 控制台—-命令行版控制台

centos7的kvm虚拟机:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot

#通过命令行登录虚拟机
[root@kvm01 opt]# ssh root@192.168.122.67   --使用vnc登录上执行 ip a
#修改kvm内核参数
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
#重启虚拟机
 [root@localhost ~]# reboot

#通过kvm登录虚拟机
 [root@kvm01 opt]# virsh console web01
Connected to domain web01
Escape character is ^]              --回车进入
#检验
[root@localhost ~]# lscpu | grep -i kvm
Hypervisor vendor:     KVM


Ps: 切换虚拟机和宿主机 使用  回车 ctrl+]
通过宿主机修改虚拟机的登录密码: 
#1.登录虚拟机并安装启动qga
[root@kvm01 opt]# ssh root@192.168.122.67
    ssh root@
    sestatus
    setenforce  0
    yum install  -y  qemu-guest-agent
  systemctl enable qemu-guest-agent  &&  systemctl start qemu-guest-agent

#2. 宿主机修改密码并测试登录:
virsh set-user-password --user  root  --password 123 web01
ssh root@

4.6:kvm虚拟机虚拟磁盘管理和快照管理

raw: 俗称裸格式,占用空间比较大,不支持快照功能,不方便传输 ,读写性能较好 总50G,用1G,传输50G

qcow2: qcow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G,用1G,传输1G

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/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磁盘工具的常用命令

# 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@kvm01 opt]# virsh edit web01:
...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/data/centos2.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
...

virsh destroy web01
virsh start web01

4.6.2快照管理

创建快照virsh snapshot-create-as centos7 --name install_ok
查看快照virsh snapshot-list centos7

还原快照virsh snapshot-revert centos7 --snapshotname 1516574134
删除快照virsh snapshot-delete centos7 --snapshotname 1516636570

raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中

Ps: 外置快照

4.7:kvm虚拟机克隆

kvm虚拟机: 磁盘文件 + 配置文件

4.7.1:完整克隆

自动挡:
virt-clone --auto-clone -o web01 -n web02 (完整克隆)

手动挡:

#生成磁盘文件
qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2
#生成配置文件
virsh dumpxml web01 >vm_web03.xml

#修改配置文件
vim web03.xml
 #修改虚拟机的名字
 #删除虚拟机uuid
 #删除mac地址mac add
 #修改磁盘路径disk

 启动测试: 
virsh define web03.xml 
virsh start web03

查看备份路径: [root@kvm01 opt]# virsh dumpxml web01 | grep -i qcow2

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 web03.xml 
virsh start web03

自动链接克隆脚本:[root@kvm01 scripts]# cat link_clone.sh

#!/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
  • 桥接模式: 能让宿主机直接和虚拟机直接处于统一网段 10.0.0.x。 企业使用广泛。 ```javascript

    工作中虚拟化使用桥接模式,不用nat模式???

    1. 桥接模式,直连比较方便
    2. 桥接模式,支持更大规模的集群,可以支持跨不同宿主机

学习中:虚拟化用nat模式,不用桥接模式?

  1. nat模式模式,跟换网段,不用配置使用的网段。
  2. 大量虚拟机使用桥接模式,会占用内网的IP地址,造成ip地址冲突情况。 ```

    4.8.1:创建桥接网卡

  • 创建桥接网卡命令

virsh iface-bridge eth0 br0

  • 取消桥接网卡命令

virsh iface-unbridge br0

4.8.2 新虚拟机使用桥接模式

NAT模式命令(默认)

[root@kvm01 opt]# 
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
  • 桥接模式(企业普遍使用) ```javascript

    关闭NetworkManager

    [root@kvm01 opt]# systemctl disable NetworkManager [root@kvm01 opt]# systemctl stop NetworkManager

桥接模式:

[root@kvm01 opt]# 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:<br />如果虚拟机获取不到ip地址:<br />![](https://cdn.nlark.com/yuque/0/2021/png/1581532/1613993363110-951fc40e-b42f-4742-b304-0925b429bef1.png#align=left&display=inline&height=527&margin=%5Bobject%20Object%5D&originHeight=527&originWidth=594&size=0&status=done&style=none&width=594)

<a name="lo9YO"></a>
### 4.8.3 将已有虚拟机网络修改为桥接模式
a:关机状态下修改虚拟机配置文件:
```javascript
例如:
virsh edit web04
...
<interface type='bridge'>
  <source bridge='br0'/>
...

b:启动虚拟机,测试虚拟机网络

如果上层没有开启dhcp,需要手动配置kvm内虚拟机的 ip地址
IPADDR,NATMASK.GATEWAY,DNS1=180.76.76.76

[root@localhost ~]#  vi   /etc/sysconfig/network-scripts/ifcfg-eth0 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    DEFROUTE=yes

    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=10.0.0.128
    PREFIX=24
    GATEWAY=10.0.0.2
    DNS1=223.5.5.5
  • 嵌套虚拟机网络拓扑图image.png

Kvm01:
image.png

  • 整题拓扑图

image.png

4.9:热添加技术

热添加硬盘、网卡、内存、cpu
了解冷添加技术:

4.9.1 kvm热添加硬盘

  • 创建一块虚拟硬盘

qemu-img create -f qcow2 /opt/web01-add.qcow2 2G

  • 临时立即生效

virsh attach-disk web01 /opt/web01-add.qcow2 vdb —subdriver qcow2

  • 永久生效(需要重启)

virsh attach-disk web01 /opt/web01-add.qcow2 vdb —subdriver qcow2 —config

  • 临时剥离硬盘

virsh detach-disk web01 vdb

  • 永久剥离硬盘

virsh detach-disk web01 vdb —config
Ps: 冷添加一款硬盘:

  1. 关机:
  2. 配置文件添加硬盘

    image.png

###虚拟机/云 规范扩容: 
1.在虚拟机里把扩容盘的挂载目录,卸载掉 #umount /mnt   (sda卸载系统就奔溃了!)

2.在宿主机上剥离硬盘 # virsh detach-disk db01 vdb
3.在宿主机上调整容量 # qemu-img resize /opt/db01_add01.qcow2 +3G
4.在宿主机上再次附加硬盘 # virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2

5.在虚拟机里再次挂载扩容盘 ##mount /dev/vdb  /mnt
6.在虚拟机里用xfs_growfs更新扩容盘超级块inode信息  #xfs growfs /dev/vdb   或者resize2fs /dev/vdb (ext4文件系统刷新)

总结: 卸载---> 剥离 --> 调整容量 ---> 再次挂载扩容  ---> 跟新inode

4.9.2 kvm虚拟机在线热添加网卡

#添加网卡
virsh attach-interface web04  --type bridge --source br0 --model virtio 
#添加并指定虚拟网卡类型
virsh attach-interface web04  --type bridge --source br0 --model virtio  --config
#拆除网卡
virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71

Ps: 三种万卡的速度: rtl8139 10/100Mb/s e1000 1Gb/s virtio 10Gb/s

4.9.3 kvm虚拟机在线热添加内存

Ps: 创建虚拟机时: 指定内存和虚拟内存最大值
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole


#临时热添加内存
virsh  setmem web04 1024M  

#永久增大内存
virsh  setmem web04 1024M --config

#调整虚拟机内存最大值
virsh setmaxmem web04 4G   #默认永久

4.9.4 kvm虚拟机在线热添加cpu

Ps: 创建虚拟机时: 指定虚拟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

#热添加cpu核数
virsh setvcpus web04 4 
#永久添加cpu核数
virsh setvcpus web04 4 --config

#调整虚拟机cpu的最大值
virsh setvcpus web01  --maximum 4 --config

热添加cpu   只能增
热添加内存  可增可减

4.10:kvm虚拟机热迁移(共享的网络文件系统)

冷迁移kvm虚拟机:配置文件,磁盘文件
[ root@kvm01 opt]# virsh domblklist db01 —冷迁移前查看附加设备
virsh dumpxml web04 >vm_web04.xml

scp -rp /opt/vm_web04.xml root@10.0.0.12:/opt/
scp -rp /opt/web04.qcow2 root@10.0.0.12:/opt/
scp -rp /opt/web03.qcow2 root@10.0.0.12:/opt/ —链接克隆需要把模板及一起迁移过去
不兼容的cpu,等配置如何迁移? 百度

  • 热迁移kvm虚拟机:配置文件,nfs共享

kvm虚拟机热迁移

1:两边的环境(桥接网卡)

主机名 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

2:实现共享存储(nfs)

yum  install nfs-utils rpcbind  -y

vim /etc/exports
/data  10.0.0.0/24(rw,async,no_root_squash,no_all_squash)

systemctl start rpcbind  nfs

#kvm01和kvm02
mount -t nfs 10.0.0.31:/data /data

3:在线热迁移

#临时迁移
[root@kvm01 opt]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe

#永久迁移
[root@kvm01 opt]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe --persistent --undefinesource

5.kvm管理平台

#kvm宿主机 2000台
查看每一个宿主机有多少台虚拟机?
查看每一个宿主机还剩多少资源?
查看每一台宿主机,每一个虚拟机的ip地址?

#excel 资产管理  cmdb

#kvm管理平台,数据库工具

信息:宿主机,总配置,剩余的总配置
     虚拟机的信息,配置信息,ip地址,操作系统


带计费功能的kvm管理平台,openstack      ceilometer计费   ecs   IAAS层
自动化管理kvm宿主机,云主机定制化操作

5.1用脚本自动化部署openstack M版

克隆一台openstack模板机:

all-in-one环境
4G内存,开启虚拟化,挂载centos7.6的光盘
image.png

#虚拟机开机之后,修改ip地址为10.0.0.11

上传脚本openstack-mitaka-autoinstall.sh到/root目录
上传镜像:cirros-0.3.4-x86_64-disk.img到/root目录
上传配置文件:local_settings到/root目录
上传openstack_rpm.tar.gz到/root下,
tar xf openstack_rpm.tar.gz -C /opt/
mount  /dev/cdrom  /mnt


sh /root/openstack-mitaka-autoinstall.sh
大概10-30分钟左右
访问http://10.0.0.11/dashboard
域:default
用户名:admin
密码:ADMIN_PASS

注意: 在windows系统上修改host解析(10.0.0.11 controller)


#添加node节点:
修改ip地址10.0.0.12
hostnamectl set-hostname compute1
重新登录让新主机名生效
上传openstack_rpm.tar.gz到/root下,
tar xf openstack_rpm.tar.gz -C /opt/
mount  /dev/cdrom  /mnt

上传脚本openstack_compute_install.sh

sh openstack_compute_install.sh

openstack  controller主控制节点,node节点, kvm宿主机
node节点, kvm宿主机
node节点, kvm宿主机
node节点, kvm宿主机