自动挡配置和手动挡配置原理都一样的,自动挡的一步到位
自动挡:
# 先关闭虚拟机才能进行克隆
[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
链接克隆只能手动一步一步来,但是可以把这些内容写成脚本自动化创建
手动链接克隆虚拟机:
# (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 "|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#()(.*)( )#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '//d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/ /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#( )#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}
默认的虚拟机网络是NAT模式,网段192.168.122.0/24
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.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
# (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
# 内核转换参数设置为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
热添加硬盘、网卡、内存、cpu
临时立即生效:
# (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
# (1) 临时剥离硬盘
virsh detach-disk web01 vdb
# (2) 永久剥离硬盘
virsh detach-disk web01 vdb --config
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
# (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
小提示:
--config
,就是写入了虚拟机的配置文件,这个时候可以用virsh edit web01
进行查看虚拟机的配置文件。创建虚拟机时设置当前内存和最大内存
# 如果只有--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>
创建虚拟机时设置当前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的功能属性
冷迁移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 [email protected]:/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
# 如果是链接克隆的虚拟机,需要将这台虚拟机的母虚拟机也迁移过去
热迁移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
kvm宿主机 2000台
查看每一个宿主机有多少台虚拟机?
查看每一个宿主机还剩多少资源?
查看每一台宿主机,每一个虚拟机的ip地址?
excel 资产管理 cmdb
kvm管理平台,数据库工具
信息:宿主机,总配置,剩余的总配置
虚拟机的信息,配置信息,ip地址,操作系统
带计费功能的kvm管理平台,openstack ceilometer计费 ecs IAAS层
自动化管理kvm宿主机,云主机定制化操作
部署openstack
克隆一台openstack模板机:
all-in-one环境
4G内存,开启虚拟化,挂载centos7.6的光盘
虚拟机开机之后,修改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宿主机