KVM虚拟化(二)

4.7 kvm虚拟机克隆

自动挡配置和手动挡配置原理都一样的,自动挡的一步到位

4.7.1 完整克隆

自动挡:

# 先关闭虚拟机才能进行克隆
[root@localhost ~]# virsh shutdown web01
Domain web01 is being shutdown

# -o old虚拟机 -n new虚拟机 (完整克隆) 
[root@localhost ~]# virt-clone --auto-clone -o web01 -n web02 

小提示:

# --auto-clone 是创建的磁盘文件和原磁盘文件都在同一个目录
[root@localhost ~]# virt-clone  -o web01 -n web02  --auto-clone
# --file  把创建的磁盘文件指定具体的路径
[root@localhost ~]# virt-clone  -o web01 -n web02  --file /mnt/web03.qcow3

手动挡:

[root@localhost opt]# qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2
[root@localhost opt]# virsh dumpxml web01 >web02.xml
[root@localhost opt]# vim web02.xml
#修改虚拟机的名字
#删除虚拟机uuid
#删除mac地址mac add
#修改磁盘路径disk
[root@localhost opt]# virsh define web02.xml 
[root@localhost opt]# virsh start web02

4.7.2 链接克隆

链接克隆只能手动一步一步来,但是可以把这些内容写成脚本自动化创建

手动链接克隆虚拟机:

# (1) 生成虚拟机磁盘文件
[root@localhost opt]# qemu-img  create  -f qcow2  -b  web01.qcow2   web03.qcow2

# (2) 生成虚拟机的配置文件, -b 创建一个引用磁盘
[root@localhost opt]# virsh dumpxml web01 > web03.xml
[root@localhost opt]# vim web03.xml
#修改虚拟机的名字
<name>web03</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web03.qcow2'/>

# (3) 导入虚拟机并进行启动测试
[root@localhost opt]# virsh define web03.xml 
[root@localhost opt]# virsh start web03

小提示:

# 查看web03.qcow2磁盘信息
[root@localhost opt]# qemu-img   info web03.qcow2
image: web03.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
# 链接克隆的磁盘很小
disk size: 3.8M
cluster_size: 65536
#  web03.qcow2引用web01.qcow2这块磁盘
backing file: web01.qcow2

#  因为web01.qcow2是模板机加上特殊权限,删不掉了,防止误删
[root@localhost opt] chattr +i web01.qcow2

全自动链接克隆脚本:

[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

4.8.1 创建桥接网卡

kvm配置桥接网卡的前提条件

# (1) 关掉NetworkManager
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager

# (2) 修改网卡配置文件,其他部分都不要
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.11
PREFIX=24
GATEWAY=10.0.0.254
DNS1=114.114.114.114
DNS2=223.5.5.5

# (3) selinux关掉,永久关掉修改配置文件
[root@localhost ~]# setenforce 0

开始创建桥接网卡:

# (1) 创建桥接网卡命令,基于eth0创建br0
[root@localhost ~]# virsh iface-bridge eth0 br0
Created bridge br0 with attached device eth0
Bridge interface br0 started

# (2) 进行查看br0的ip地址
[root@localhost ~]# ifconfig br0
[root@localhost ~]# ifconfig eth0


# 小提示:取消桥接网卡命令(这一步暂时不执行)
[root@localhost ~]# virsh iface-unbridge br0

在这里插入图片描述

4.8.2 新虚拟机使用桥接模式

如果新创建虚拟机,可以直接指定网络模式。因为实验,重装系统太麻烦,直接修改虚拟机配置文件即可,参考 4.8.3 将已有虚拟机网络修改为桥接模式

# (1) 默认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

# (2) 桥接模式
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)生产环境网卡配置

生产上物理服务器一般有四块网卡
eth0专门桥接到公网网段 eth0桥接到br0
eth1专门桥接到内网网段 eth1桥接到br1
然后虚拟机就可以选择连外网还是来连接内网

(2)如果虚拟机获取不到ip地址,请按如下图进行配置

在这里插入图片描述

(3) 小知识

# (1) 查看虚拟机的网络类型,安装虚拟机时的网络配置,
[root@localhost ~]# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

# (2) 默认网卡的配置文件径: /etc/libvirt/qemu/networks
[root@localhost ~]# cat /etc/libvirt/qemu/networks/default.xml 
<network>
  <name>default</name>
  <uuid>55320028-c40f-4b38-a9fc-b9c66beac7da</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ac:e0:f6'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

# (3) 只要libvirt服务一启动,就会有一个默认的网卡virbr0,bridge name='virbr0'
[root@localhost ~]# brctl show
bridge name	  bridge id		      STP enabled	interfaces
br0		      8000.000c2907b027	  yes		    eth0
							                    vnet0
virbr0		  8000.525400ace0f6	  yes		    virbr0-nic

4.8.3 将已有虚拟机网络修改为桥接模式

# (1) 关机状态下修改虚拟机配置文件,否则有可能不生效
[root@localhost ~]# virsh shutdown web01
[root@localhost ~]# virsh edit web01
<interface type='bridge'>
  <source bridge='br0'/>

# (2) 启动虚拟机,测试虚拟机网络(如果上层没有开启dhcp,需要手动配置ip地址,IPADDR,NATMASK.GATEWAY,DNS1=180.76.76.76)
[root@localhost ~]# virsh start web01
[root@localhost ~]# virsh console web01

# 虚拟机自动获取10.0.0.20,如下图所示dhcp配置为10.0.0.20-10.0.0.254
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:33:7c:ad brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.20/24 brd 10.0.0.255 scope global dynamic eth0

在这里插入图片描述

网络原理图:
在这里插入图片描述

在这里插入图片描述
NAT地址转换:

# 内核转换参数设置为0,虚机关闭之后就不能ping通百度了
sysctl -a | grep ipv4 | grep forward
# 关闭内核参数
sysctl net.ipv4.ip_forward=0
# 打开内核参数
sysctl net.ipv4.ip_forward=1

# 看一下iptables规则
iptables -t nat -L -n

1578543325216

4.9 热添加技术

热添加硬盘、网卡、内存、cpu

4.9.1 kvm热添加硬盘

4.9.1.1 kvm添加磁盘

临时立即生效:

# (1) 在宿主机中创建一块盘
[root@localhost opt]# qemu-img create -f qcow2 /opt/web01_add01.qcow2 20G
Formatting '/opt/web01_add01.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off 

# (2) 在宿主机中查看新创建的硬盘
[root@localhost opt]# ls
web01_add01.qcow2  web01.qcow2
    
# (3) 在宿主机中给web01虚拟机添加一块硬盘
[root@localhost opt]# virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2
Disk attached successfully

# (4) 在宿主机中登进web01虚拟机控制台,查看是否新增一块磁盘
[root@localhost ~]# virsh console web01
# 可以看到新增一块vdb磁盘
[root@web01 ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a71e1

Device    Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    20971519    10484736   83  Linux
# 新增一块vdb硬盘
Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

# (5) 在web01虚拟机中对新增硬盘进行格式化,并进行挂载
[root@web01 ~]# mkfs.xfs /dev/vdb
[root@web01 ~]# mount /dev/vdb  /mnt
[root@web01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        10G  913M  9.1G   9% /
/dev/vdb         20G   33M   20G   1% /mnt

永久生效(需要重启):

# (1) 临时生效执行完就生效,永久生效不是立即生效只是写在了配置文件中,下次重启就可以直接生效了
# 所以临时(立即生效) + 永久(写入配置文件重启生效)
virsh attach-disk web01 /opt/web01-add.qcow2 vdb --subdriver qcow2 --config
4.9.1.2 kvm剥离磁盘
# (1) 临时剥离硬盘
virsh detach-disk web01 vdb

# (2) 永久剥离硬盘
virsh detach-disk web01 vdb --config
4.9.1.3 kvm磁盘扩容

kvm磁盘扩容规范操作不要需要重启

# (1) 在虚拟机里把扩容盘的挂载目录,卸载掉
umount /mnt

# (2) 在宿主机上剥离硬盘
virsh detach-disk web01 vdb

# (3) 在宿主机上调整容量
qemu-img resizze /opt/web01_add01.qcow2 50G
qemu-img info /opt/web01_add01.qcow2

# (4) 宿主机上再次附加硬盘
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2

# (5) 进入web01虚拟机中,再次挂载扩容盘
virsh console web01
mount /dev/vdb /mnt

# (6) 在web01虚拟机里用xfs_growfs更新扩容盘超级块信息
xfs_growfs /dev/vdb

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

# (1) 网络类型可以是network、bridge,临时生效
virsh attach-interface web01  --type bridge --source br0 --model virtio 
# 如果按照顺序写,可以不用写--type  --source
virsh attach-interface web01   network default --model virtio 

# (2) 给web01虚拟机添加网卡,并且永久生效 
virsh attach-interface web01  --type bridge --source br0 --model virtio  --config
virsh attach-interface web01   network default --model virtio  --config

# (3) 输出web01虚拟机的网卡
virsh detach-interface web01 --type bridge --mac 52:54:00:35:d3:71
virsh detach-interface web01 network --mac 52:54:00:35:d3:71

# default网络是系统定义好的
[root@localhost opt]# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

小提示:

  1. 永久生效一般是--config,就是写入了虚拟机的配置文件,这个时候可以用virsh edit web01进行查看虚拟机的配置文件。
  2. 三种网卡类型: e1000,rtl8139,virtio
    默认是rtl8139,vmware默认是网卡类型是e1000
    他们创建出来的网卡名称为ens11,ens22
  3. 如果指定的是virtio类型的,那么创建出来的网卡名称为eth0,eth1
    virtio默认是没有去驱动的,rtl8139网卡类型在windows上是有驱动的,先用有驱动的
    连上网,然后下载virtio的驱动,修改配置文件替换网卡类型

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

创建虚拟机时设置当前内存和最大内存

# 如果只有--memory 1024,那么当前内存和最大内存都是1024。 如果是--memory 512,maxmemory=2048当前内存和最大内村分别为512M和2048M
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

(1)临时热添加/减少内存

# 给虚拟机web01临时热减少内存
[root@localhost ~]# virsh  setmem web01 512M 
# 给虚拟机web01临时热添加内存
[root@localhost ~]# virsh  setmem web01 1024M

(2)永久增大内存

[root@localhost ~]# virsh  setmem web01 1024M --config

(3)调整虚拟机内存最大值(需要虚拟机关机状态才能调整)

# 默认永久设置。注意虚拟机的内存大小不能超过宿主机的内存大小
[root@localhost ~]#  virsh setmaxmem web01 4G   

小提示:

# 可以在web01虚拟机的配置文件里进行查看内存大小
[root@localhost ~]# virsh edit web01
# 当前内存是1G,最大的支持的内存也是1G。所以内存不能调大,但是可以调小
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>

4.9.4 kvm虚拟机在线热添加cpu

创建虚拟机时设置当前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

热添加cpu核数

[root@localhost ~]# virsh setvcpus web01 2 

永久添加cpu核数

[root@localhost ~]# virsh setvcpus web01 2 --config

调整虚拟机cpu的最大值

[root@localhost ~]# virsh edit web01
# 当前的cpu核数为1,允许设置的最大值为1
<vcpu placement='static'>1</vcpu>

# 设置cpu的最大值为2,需要关闭虚拟机web01,重启启动才能生效
[root@localhost ~]# virsh shutdown web01
[root@localhost ~]# virsh setvcpus web01 --config --maximum 2
[root@localhost ~]# virsh start web01

[root@localhost ~]# virsh edit web01
# 当前的cpu核数为1,允许设置的最大值都为2
<vcpu placement='static' current='1'>2</vcpu>

小提示:
(1)cpu只能热增加不能热减小
(2)virsh setvcpu ,设置cpu的功能属性

4.10 kvm虚拟机迁移

4.10.1 kvm冷迁移

冷迁移kvm虚拟机:配置文件,磁盘文件

# kvm01: 10.0.0.11主机上进行操作
# 导出web01的配置文件
[root@kvm01 opt]# virsh dumpxml web01 > vm_web01.xml
# 向web02虚拟机传送虚拟机web01的配置文件和磁盘文件 
[root@kvm01 opt]# scp -rp vm_web01.xml web01.qcow2 root@10.0.0.12:/opt/
 
# kvm02: 10.0.0.12主机上进行操作
# 导入配置文件
[root@kvm02 opt]# virsh define vm_web01.xml
# 导入时报错,报错:没有桥接网络
[root@kvm02 opt]# virsh start web01
error: Failed to start domain web01
error: Cannot get interface MTU on 'br0': No such device
# 配创建桥接网卡(关闭NetworkManager、精简网卡配置)
[root@kvm02 opt]# virsh iface-bridge eth0 br0
# 启动迁移过去的web01虚拟机
[root@kvm02 opt]# virsh start web01

小提示:

解决问题1

# 解决cpu不兼容的问题,如果出现这种问题的解决方法为
# (1) 先删除虚拟机web01的配置
[root@kvm02 ~]# virsh undefine vm_web01.xml

# (2) --disk /opt/web01.qcow2 --boot hd , 拿已存在的web01.qcow2磁盘文件为启动项,创建test虚拟机
## 成功创建虚拟机之后,把test的配置文件中关于cpu的那一部分复制下来
[root@kvm02 ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name test --memory 1024 --vcpus 1 --disk /opt/web01.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

# (3) 删掉test虚拟机的配置,然后再把test的配置替换到web01的配置文件中,最后在启动web01虚拟机
[root@kvm02 ~]# virsh undefine test.xml
[root@kvm02 ~]# virsh define vm_web01.xml
# 把的vm_web01.xml的cpu的配置修改为test.xml的cpu的配置
[root@kvm02 ~]# virsh edit vm_web01
# 启动web01虚拟机
[root@kvm02 ~]# virsh start web01

解决问题2

# 如果是链接克隆的虚拟机,需要将这台虚拟机的母虚拟机也迁移过去

4.10.2 kvm热迁移

热迁移kvm虚拟机:配置文件,nfs共享(共享的网络文件系统)

(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)

# (1) 在10.0.0.31安装nfs服务
[root@nfs ~]# yum  install nfs-utils rpcbind  -y# (2) 在10.0.0.31修改nfs的配置,监听10.0.0.0/24网段的主机
[root@nfs ~]# vim /etc/exports
/data  10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)# (3) 在10.0.0.31启动rpcbind、nfs服务
[root@nfs ~]# systemctl start rpcbind nfs

# (4) 在kvm01和kvm02验证10.0.0.31 的服务端上的共享 NFS 文件夹
[root@kvm01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 10.0.0.0/24

[root@kvm02 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 10.0.0.0/24

# (5) kvm01和kvm02进行挂载,实现硬盘热备份 (注意需要把配置文件提前导出拷贝过去)
# 如果直接执行这个命令会发现/opt里面没有文件了,因为被临时覆盖住了,这时需要umount /opt,需要临时把文件mv挂载之后把文件移过来。所以需要提前把文件移走,挂载成功后在移回来。
[root@kvm01 ~]# mv /opt/*  /mnt
[root@kvm01 ~]# mount -t nfs 10.0.0.31:/data /opt
[root@kvm01 ~]# mv /mnt/*  /opt
# kvm2也进行挂载nfs的/data目录,实现磁盘热备份
[root@kvm02 ~]# mount -t nfs 10.0.0.31:/data /opt

(3)在线热迁移

# 临时迁移(临时热迁移并没有把配置文件迁移过去),如果缓存数据没有落盘的话,可能会数据丢失。如果明知道没有缓存,可以加上 --unsafe
virsh migrate --live --verbose web01 qemu+ssh://10.0.0.12/system --unsafe
# 永久迁移 --persistent永久修改  --undefinesource删除源文件
virsh migrate --live --verbose web01 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
克隆一台openstack模板机:

all-in-one环境

4G内存,开启虚拟化,挂载centos7.6的光盘

1563350783150

虚拟机开机之后,修改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宿主机

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值