KVM安装与简单功能

kvm vcpu 在线 kvm下载_centos

一、kvm虚拟化管理软件的安装

1.安装KVM虚拟化工具

关闭防火墙和selinux

# 1.做host劫持 添加源
[root@xshell ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@xshell ~]# curl -o  /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@xshell ~]# yum makecache

# 2.安装软件
[root@xshell ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install openssh-askpass -y


# 3.解释
1.KVM:Kernel-based Virtual Machine libvirt 作用:虚拟机的管理软件,管理虚拟机的生命周期

2.libvirt:kvm,xen,qemu,lxc.... virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具 

3.virt-manager 图形化管理虚拟机工具

4.qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘,可以虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等

5.openssh-askpass 远程连接KVM主机

KVM是linux内核的一个模块,模块不需要安装只需要加载,通过用户态程序来管理即可
[root@xshell ~]# lsmod|grep kvm
kvm_intel             148081  0
kvm                   461126  1 kvm_intel

2.启动libvirt管理KVM工具

[root@xshell ~]# systemctl start libvirtd.service
[root@xshell ~]# systemctl enable libvirtd.service
#注意: 启动后会新增一块virbr0网络

二、创建KVM虚拟机

1.下载镜像包

TightVNC或者VNC Viewer 4.exe 宿主机

建议虚拟机内存不要低于1024M,否则安装系统特别慢!

# 1.下载镜像包centos7 放入/opt
[root@xshell /opt]# ll /opt
-rw-r--r-- 1 root root 4588568576 Jan  3 17:28 CentOS-7-x86_64-DVD-1810.iso


# 2.下载
[root@xshell ~]#  virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1810.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-1810.iso 镜像路径
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 信号转接vnc
--noautoconsole

# 3.vnc服务端端口
[root@xshell ~]# netstat  -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2801/qemu-kvm

2.配置vnc

不加端口也可以

kvm vcpu 在线 kvm下载_kvm vcpu 在线_02

3.配置虚拟机

kvm vcpu 在线 kvm下载_centos_03

三、KVM 虚拟机常用管理命令

1.查看虚拟机

# 查看正在运行的虚拟机 
virsh list  

# 查看所有的虚拟机 
virsh list --all

2.开启虚拟机

# 开启虚拟机
virsh start centos7

3.重启虚拟机

# 重启
virsh reboot centos7

4.关闭虚拟机

# 正常关机
virsh shutdown centos7 

# 暴力关机 直接拔电源那种
virsh destroy centos7

5.查看配置文件

# 打印所有配置文件 
virsh dumpxml centos7

6.导出配置文件

只要有磁盘文件和配置文件就可以迁移到其他机器

# 直接导入打开 不用装系统了
virsh dumpxml centos7 >centos7.xml

7.导入虚拟机

需要把导出的配置文件和磁盘文件一起放在相同目录下

并且会在/var/lib 目录下生成配置文件

# 导入虚拟机
virsh define centos7.xml
[root@xshell /opt]# ls /etc/libvirt/qemu 
centos7.xml  networks

8.删除虚拟机

# 暴力关
virsh destroy centos7 

# 删除 但是磁盘文件还在
virsh undefine centos7

9.主机重命名

# 关机状态下重命名 
virsh domrename centos7 web-blog

10.主机挂起

# 域 web-blog 被挂起
virsh suspend web-blog  

[root@xshell ~]# virsh list --all        
 Id    名称                         状态 
---------------------------------------------------- 
 1     web-blog                       paused

11.主机恢复

# 域 web-blog 被重新恢复
virsh resume web-blog 

[root@xshell ~]# virsh list --all       
 Id    名称                         状态 
---------------------------------------------------- 
 1     web-blog                       running

注意:挂起之后再恢复,会出现时间不同步问题!!!

云主机要做的优化有一个就是时间同步,可以添加在定时任务里,自动同步阿里云或者腾讯云时间。

12. kvm 虚拟机开机启动

# 域 web-blog 标记为自动开始 
virsh autostart web-blog 

# 测试能否开机自启 
[root@xshell ~]# virsh list --all 
 Id    名称                         状态 
---------------------------------------------------- 
 1     web-blog                       running 
 2     web-www                        running 

[root@xshell ~]# virsh shutdown web-blog 
[root@xshell ~]# virsh shutdown web-www 
[root@xshell ~]# virsh list --all 
 Id    名称                         状态 
---------------------------------------------------- 
 -     web-blog                       shut off
 -     web-www                        shut off

# 重启 libvirtd 服务 
[root@xshell ~]# systemctl restart libvirtd.service 
[root@xshell ~]# virsh list --all 
 Id    名称                         状态 
---------------------------------------------------- 
 1     web-blog                       running 
 -     web-www                        shut off

13.查看哪些虚拟机是开机自启动

# 本质是软链接,只要存在这个软链接,就会开机自启动 
[root@xshell ~]# ll /etc/libvirt/qemu/autostart/  
lrwxrwxrwx 1 root root 30 12 月 11 11:47 web-blog.xml -> /etc/libvirt/qemu/web-blog.xml

四、生产故障

**问题背景: **
关一台少一台
**问题原因: **
开机情况下 undefine 掉虚拟机,虽然虚拟机还会运行,但是目录下的配置文件没了
此时再关机就会导致虚拟机直接没了
undefine 其实删的是配置文件
只要进程还在,虚拟机就会运行
操作步骤:

# 1.查看虚拟机
[root@xshell /opt]# virsh list --all 
 Id    名称                         状态 
---------------------------------------------------- 
 3     centos7                        running 

# 2.查看配置文件还在的
[root@xshell /opt]# ls /etc/libvirt/qemu 
centos7.xml  networks 

# 3.没正常关机 直接暴力关
[root@xshell /opt]# virsh undefine centos7  

# 4.查看虚拟机 还是有的
[root@xshell /opt]# virsh list --all        
 Id    名称                         状态 
---------------------------------------------------- 
 3     centos7                        running 

# 5.查看配置文件已经没了
[root@xshell /opt]# ls /etc/libvirt/qemu    
networks 

# 6.正常关机之后
[root@xshell /opt]# virsh shutdown centos7  
域 centos7 被关闭 

# 7.虚拟机丢失
[root@xshell /opt]# virsh list --all 
 Id    名称                         状态 
----------------------------------------------------

五、小项目

项目背景:

磁盘空间不足,需要迁移磁盘文件,但是配置文件里的路径需要修改

建议使用 edit 命令编辑,可以检查语法

virsh edit centos7

**操作步骤: **

# 1.虚拟机关闭状态下编辑 
[root@xshell /opt]# virsh list --all 
 Id    名称                         状态 
---------------------------------------------------- 
 -     centos7                     shut off   

# 2.编辑配置文件 
[root@xshell /opt]# virsh edit centos7 
----------------------------------- 
<source file='/data/centos7.raw'/> 
----------------------------------- 

# 3.移动磁盘文件到/data 目录 
[root@xshell /opt]# mkdir /data 
[root@xshell /opt]# mv /opt/centos7.raw /data/ 

# 4.启动虚拟机 
[root@xshell /data]# virsh start centos7  

# 5.查看虚拟机
[root@xshell /data]# virsh list 
 Id    名称                         状态 
---------------------------------------------------- 
 7     centos7                        running

六、连接 KVM 虚拟机

1.VNC

# 查看 VNC 端口号 
[root@xshell ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     centos7                        running

[root@xshell ~]# virsh vncdisplay centos7 
:0  # 0的意思就是端口590后面+0 5900

2.SSH

[root@xshell ~]# ssh 192.168.122.138 #kvm的ip
root@192.168.122.138's password: 
Last login: Mon Jan  6 15:55:22 2020 from gateway
[root@local ~]#

3.console显示

# 登录进需要开启console的虚拟机并添加参数
[root@xshell ~]# ssh 192.168.122.138
root@192.168.122.138's password: 
Last login: Mon Jan  6 16:09:22 2020 from gateway
[root@local ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #修改内核参数
[root@local ~]# grep "115200" /boot/grub2/grub.cfg
[root@local ~]# reboot


# 再次使用 console 登陆,然后多按几次回车
[root@xshell ~]# virsh console centos7
Connected to domain centos7
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64

local login: root
密码:
Last login: Mon Jan  6 16:13:06 on ttyS0
[root@local ~]# 


# 退出
ctrl+]

七、KVM 磁盘管理

创建命令里面有个参数 ,format=

# 磁盘格式
raw:裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输。总50G,占用2G,传送50G。
qcow2:cow(copy on write)写时复制,占用空间小,支持快照,性能比raw差一点,方便传输。。

1.查看磁盘信息

[root@xshell ~]# qemu-img info /data/centos7.raw
image: /data/centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 2.0G

2.创建磁盘

# 创建qcow2磁盘
[root@xshell ~]# qemu-img create -f qcow2 /data/centos7.qcow2 1G

# 查看磁盘信息
[root@xshell ~]# qemu-img info /data/centos7.qcow2
image: /data/centos7.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

# 查看磁盘实际占用空间
[root@xshell ~]# ls -lh /data/
total 2.1G
-rw-r--r-- 1 root root 193K Jan  6 16:52 centos7.qcow2 #实际193k
-rw------- 1 qemu qemu  10G Jan  6 16:48 centos7.raw   #看不到实际

3.调整磁盘容量,只能加不能减

[root@xshell ~]# qemu-img resize /data/centos7.qcow2 10G 

[root@xshell ~]#  qemu-img info /data/centos7.qcow2
image: /data/centos7.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

kvm vcpu 在线 kvm下载_centos_04

4.磁盘格式转换

操作步骤:

1.将虚拟机关机

2.转换磁盘格式

3.编辑配置文件修改为 qcow2 格式

# 关机
[root@xshell ~]# virsh shutdown centos7 

# 转换格式
[root@xshell ~]#  qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow2

# 修改配置文件
[root@xshell ~]# virsh edit centos7
<driver name='qemu' type='qcow2'/> 
<source file='/data/centos7.qcow2'/>  

# 启动虚拟机
[root@xshell ~]# virsh start centos7

# 查看虚拟机
[root@xshell ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 3     centos7                        running

# 然后进入虚拟机 dd 生成文件
[root@xshell ~]# virsh console centos7
[root@local ~]# 

[root@local ~]# dd if=/dev/zero of=/opt/test.raw bs=500M count=1

[root@xshell ~]# ll -h /data/centos7.qcow2
-rw-r--r-- 1 qemu qemu 2.5G Jan  6 17:19 /data/centos7.qcow2 #多了500M

八、KVM 快照管理

raw 格式不支持做快照,qcow2 格式快照就保存在本地,后面的数字是 unix 时间戳

1.创建快照

[root@xshell data]# virsh snapshot-create-as centos7 --name int_ok
Domain snapshot int_ok created

2.查看快照

[root@xshell data]# virsh snapshot-list centos7
 Name                 Creation Time             State
------------------------------------------------------------
 int_ok               2020-01-06 17:25:37 +0800 running

3.还原快照

[root@xshell data]# virsh snapshot-revert centos7 --snapshotname int_ok

4.删除快照

[root@xshell data]# virsh snapshot-delete centos7 --snapshotname int_ok
Domain snapshot int_ok deleted

九、KVM 虚拟机克隆

1.完整克隆

自动克隆

# 1.停虚拟机 必须暂停或者关闭有要克隆设备的域。 
[root@xshell data]# virsh shutdown centos7

# 2.克隆
[root@xshell data]# virt-clone --auto-clone -o centos7 -n centos7_buckup

# 3.查看所有虚拟机
[root@xshell data]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7                        shut off
 -     centos7_buckup                 shut off

# 4.查看配置文件
[root@xshell data]# virsh dumpxml centos7_buckup |grep "qcow2" 
      <driver name='qemu' type='qcow2'/>
      <source file='/data/centos7_buckup.qcow2'/>

# 5.查看空间 发现比原来的小
[root@xshell data]#  ls -lh /data/centos7* 
-rw------- 1 root root 2.0G Jan  6 17:37 /data/centos7_buckup.qcow2
-rw-r--r-- 1 root root 2.7G Jan  6 17:34 /data/centos7.qcow2
-rw------- 1 root root  10G Jan  6 17:08 /data/centos7.raw

# 6.查看快照发现并没有把原来机器的快照一起复制过来
[root@xshell data]# virsh snapshot-list centos7_buckup
 Name                 Creation Time             State
------------------------------------------------------------

完整克隆的时候 会做一次压缩 所以克隆过来的空间比之前的大

快照不能被克隆

2.链接克隆

只能手动做 没有自动工具

# 1.关机
[root@xshell data]# virsh shutdown centos7

# 2.生成虚拟机磁盘文件
[root@xshell data]# qemu-img create -f qcow2 -b centos7.qcow2 centos7-clone.qcow2

# 3.查看克隆后磁盘信息
[root@xshell data]# qemu-img info centos7-clone.qcow2
image: centos7-clone.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: centos7.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
# 4.复制一下配置文件
[root@xshell data]# virsh dumpxml centos7 > centos7-clone.xml

# 5.重命名虚拟机名称、删除 uid 、删除 mac 地址、修改磁盘地址 
[root@xshell data]# sed -i '/uuid/d' centos7-clone.xml
[root@xshell data]# sed -i '/mac address/d' centos7-clone.xml
[root@xshell data]# sed -i 's#centos7.qcow2#centos7-clone.qcow2#g' centos7-clone.xml
[root@xshell data]# sed -i '/\<nam/s#centos7#centos7-clone#g' centos7-clone.xml

# 6.导入配置文件
[root@xshell data]# virsh define centos7-clone.xml

# 7.启动虚拟机
[root@xshell data]#  virsh start centos7-clone
[root@xshell data]#  virsh list --all
 Id    Name                           State
----------------------------------------------------
 4     centos7-clone                  running
 -     centos7                        shut off
 -     centos7_buckup                 shut off

3.自动链接克隆虚拟机脚本

#!/bin/bash
old_vm=$1
new_vm=$2

#关机:
virsh shutdown $1

#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}

十、KVM 虚拟机网络

虚拟机和宿主机在一个网段上,就是桥接网络。

默认虚拟机网络是NAT 模式,网段 192.168.122.0/24 。

如果使用NAT模式,外界访问虚拟机上跑的业务需要宿主机做端口映射,但是虚拟机特别多的情况下,都要占用80端口就没办法做端口映射了,这个时候就可以用桥接网络,直接外界访问虚拟机。(生产环境常用桥接模式)

1.创建新虚拟机的桥接网络

# 1.创建桥接网卡
[root@xshell data]# virsh iface-bridge ens33 br0
virsh iface-unbridge br0(取消桥接网卡 )


# 2.查看网卡配置
[root@xshell ~]# ifconfig
br0: 10.0.0.100 

[root@xshell ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE="br0"

[root@xshell ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
OTPROTO=none
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
STP=on
DELAY=0


# 3.链接克隆一台新磁盘 
[root@xshell data]# qemu-img create -f qcow2 -b centos7.qcow2 bridge.qcow2


# 4.创建新虚拟机
[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-bridge --memory 1024 --vcpus 1 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole


# 5.查看虚拟机
[root@xshell data]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     centos7                        running
 2     centos7-bridge                 running


# 6.进入kvm查看ip  发现没有ip
[root@xshell data]# virsh console centos7-bridge
[root@local ~]# ip a


# 7.vm启用一下dhcp

kvm vcpu 在线 kvm下载_xml_05

# 8.自动获取ip
[root@local ~]# dhclient
[root@local ~]# ip a
eth0: 10.0.0.2


# 9.远程连接
[g:\~]$ ssh root@10.0.0.2
[root@local ~]# lscpu|grep -i kvm
超管理器厂商:  KVM

2.现有NAT网络转换为桥接网络

# 1.修改配置文件
[root@xshell data]# virsh edit centos7
搜mac 改这两行
<interface type='bridge'>   #类型桥接
<source bridge='br0'/>      #你创建的桥接网卡

十一、 KVM 虚拟机热添加技术

1.热添加硬盘

# 1.创建一个硬盘 给centos7加一块10G
[root@xshell data]# qemu-img create -f qcow2 centos7-add.qcow2 10G


# 2.添加硬盘
[root@xshell data]#  virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2 [临时添加]
[root@xshell data]#  virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2 --config [永久添加]


# 3.剥离硬盘
[root@xshell data]# virsh detach-disk centos7 vdb [临时剥离]
[root@xshell data]# virsh detach-disk centos7 vdb [永久剥离]

新硬盘如果要使用,应该格式化,挂载

# 4.格式化硬盘
[root@local ~]# mkfs.xfs /dev/vdb [格式化的时候就在分inode和block]


# 5.挂载
[root@local ~]# mount /dev/vdb /mnt/
[root@local ~]# df -h |tail -1
/dev/vdb                  10G   33M   10G    1% /mnt

kvm硬盘扩容 :因为这个盘后面可能不够了,但是在再添加新盘不在同个目录下,所以可以扩容

kvm扩容一定要规范操作!!!!!!!

# 6.测试扩容里面文件会不会丢
[root@local ~]# cp /etc/services /mnt/
[root@local ~]# ll /mnt
-rw-r--r--. 1 root root 670293 1月   7 09:01 services


# 7.停止挂载
[root@local ~]# umount /mnt/


# 8.剥离磁盘
[root@xshell data]# virsh detach-disk centos7 vdb


# 9.扩容
[root@xshell data]#  qemu-img resize /data/centos7-add.qcow2 +20G


# 10.查看下磁盘现大小
[root@xshell data]#  qemu-img info /data/centos7-add.qcow2
image: /data/centos7-add.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)  # 之前10G+20G
disk size: 28M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false


# 11.把磁盘添加进去
[root@xshell data]#  virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2


# 12.进虚拟机查看磁盘大小 变为30G
[root@local ~]# fdisk -l /dev/vdb
磁盘 /dev/vdb:32.2 GB


# 13.不需要格式化了 直接挂载 原来数据还在
[root@local ~]# mount /dev/vdb /mnt/
[root@local ~]# ll /mnt
-rw-r--r--. 1 root root 670293 1月   7 09:01 services


# 14.查看挂载信息 发现可用容量还是扩容前的
[root@local ~]# df -h |tail -1
/dev/vdb                  10G   33M   10G    1% /mnt


# 15.更新分区表
[root@local ~]#  xfs_growfs /dev/vdb 
meta-data=/dev/vdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2621440 to 7864320

[root@local ~]# df -h |tail -1
/dev/vdb                  30G   34M   30G    1% /mnt

如果ext4 的分区命令需要使用 resize2fs resize2fs /dev/vdb

2.热添加网卡

# 1.添加网卡 [永久添加在后面加--config]
[root@xshell data]# virsh attach-interface centos7 --type bridge --source br0 --model virtio
--type bridge:桥接类型
--model virtio:如果不加这个参数也可以创建一个网卡 只不过网卡是ens的 rtl8139(瑞昱RTL 8139)

# 2.添加NAT网络网卡
[root@xshell data]# virsh attach-interface centos7 --type network --source default --model virtio

# 3.剥离网卡
[root@xshell data]# virsh detach-interface centos7 network
error: Domain has 2 interfaces. Please specify which one to detach using --mac
error: Failed to detach interface
[直接指定类型剥离会报错 因为有多块 这个时候要在后面加上mac地址]

[root@xshell data]# virsh detach-interface centos7 network --mac 52:54:00:b6:4f:9d

3.热添加内存

# 1.创建虚拟机 多加一个参数
[root@xshell data]# virsh undefine centos7_buckup
Domain centos7_buckup has been undefined

[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7_buckup --memory 512,maxmemory=2048 --vcpus 1 --disk /data/centos7_buckup.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole


# 2.进centos7_buckup虚拟机查看内存
[root@local ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            463         105         229           8         127         204
Swap:          1023           0        1023


# 3.添加内存 最大就是你创建虚拟机时设置的2048  [永久--config]
[root@xshell data]# virsh setmem centos7_buckup 1024M --live  
[root@local ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            975         106         740           8         127         715
Swap:          1023           0        1023


# 4.减内存
[root@xshell data]# virsh setmem centos7_buckup 512M --live 
[root@local ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            463         105         229           8         127         203
Swap:          1023           0        1023

4.热添加CPU

# 1.创建虚拟机 多加一个参数
[root@xshell data]# virsh undefine centos7_buckup
Domain centos7_buckup has been undefined
[root@xshell data]# virsh destroy centos7_buckup
Domain centos7_buckup destroyed

[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7_buckup --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/centos7_buckup.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole


# 2.添加cpu [永久 --config]
[root@xshell data]# virsh setvcpus centos7_buckup 4 --live


# 3.进centos7_buckup虚拟机查看cpu
[root@local ~]# lscpu |head -5
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
KVM冷添加CPU
#编辑配置文件
virsh edit centos7
------------------------------------------------
  <vcpu placement='static' current='2'>4</vcpu>
------------------------------------------------

#添加cpu核数 
virsh setvcpus centos7 4 --live 

#永久添加cpu核数 
setvcpus centos7 4 --config

十二、KVM 虚拟机迁移

环境:新克隆一个虚拟机,然后删除/data 和/opt 下所有的文件,然后批量删除所有的虚拟机

主要靠nfs共享 这里我再起一个nfs服务器

virsh undefine $(virsh list --all|awk 'NR>1{print $2}')
1)准备两台kvm宿主机,配置桥接网络,nfs客户端
2)安装nfs服务端 
3)kvm宿主机挂载nfs服务端,挂载点一定要是同一个目录
4)启动一台新虚拟机,该虚拟机磁盘文件存储在共享存储上 
5)命令行热迁移
6)安装图形界面 virt-manager
# 1.安装nfs 三个服务器都装
yum install nfs-utils -y


# 2.nfs配置文件 
[root@nfs ~]# vim /etc/exports
/data  10.0.0.0/24(rw,async,no_root_squash,no_all_squash)#不做gid,uid,因为在nfs上没有qemu用户


# 3.重启
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl restart nfs


# 4.查看挂载信息 两个服务器都查看
[root@xshell ~]# showmount -e 10.0.0.5
Export list for 10.0.0.5:
/data 10.0.0.0/24

    
# 5.挂载
[root@xshell ~]# mount -t nfs 10.0.0.5:/data /opt
[root@xshell2 ~]# mount -t nfs 10.0.0.5:/data /opt

    
# 6.拷贝个文件去挂载目录
[root@xshell ~]# ll /data
-rw-r--r-- 1 root root     8650752 Jan  6 20:34 bridge.qcow2
-rw-r--r-- 1 qemu qemu    13238272 Jan  7 09:13 centos7-add.qcow2
-rw------- 1 root root  2086141952 Jan  7 10:58 centos7_buckup.qcow2
-rw-r--r-- 1 root root     8192000 Jan  6 18:25 centos7-clone.qcow2
-rw-r--r-- 1 root root        4060 Jan  6 18:01 centos7-clone.xml
-rw-r--r-- 1 qemu qemu  2841509888 Jan  7 17:03 centos7.qcow2
-rw------- 1 root root 10737418240 Jan  6 17:08 centos7.raw
[root@xshell ~]# cp /data/bridge.qcow2 /opt
    
    
# 7.创建这个centos7-clone虚拟机
[root@xshell ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-qianyi --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

    
# 8.查看虚拟机 成功
[root@xshell ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 10    centos7-qianyi                 running

    
# 9.热迁移的命令
[root@xshell ~]# virsh migrate --live --verbose centos7-qianyi qemu+ssh://10.0.0.101/system --unsafe

十三、在kvm01上安装图形界面、vnc服务端和virt-manager

yum groups install "GNOME Desktop" -y
yum install tigervnc-server.x86_64 -y
yum install virt-manager -y
# 启动vnc服务端
vncserver :1 启动5901端口的vnc服务端
vncserver -kill :1 关闭5901端口的vnc服务端

kvm vcpu 在线 kvm下载_centos_06

使用vnc连接宿主机,使用virt-manager进行迁移

kvm vcpu 在线 kvm下载_kvm vcpu 在线_07

这时候会提醒输入密码,就是之前第6步的时候设置的vnc连接密码

kvm vcpu 在线 kvm下载_配置文件_08

kvm vcpu 在线 kvm下载_centos_09

kvm vcpu 在线 kvm下载_centos_10

kvm vcpu 在线 kvm下载_kvm vcpu 在线_11

kvm vcpu 在线 kvm下载_centos_12

kvm vcpu 在线 kvm下载_centos_13

kvm vcpu 在线 kvm下载_centos_14

kvm vcpu 在线 kvm下载_配置文件_15

kvm vcpu 在线 kvm下载_centos_16

kvm vcpu 在线 kvm下载_配置文件_17

kvm vcpu 在线 kvm下载_xml_18

迁移成功!

kvm vcpu 在线 kvm下载_xml_19

在迁移的过程中,使用ping虚拟机的ip,发现只丢了一个包

kvm vcpu 在线 kvm下载_centos_20

至此热迁移完成!