KVM虚拟化

KVM虚拟化

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

虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖

kvm虚拟化管理软件安装

[ ~]# yum install libvirt* virt-* qemu-kvm* -y
#安装软件说明内容:
libvirt:作用:虚拟机的管理软件
virt  virt-install virt-clone:作用:虚拟机的安装工具和克隆工具
qemu-kvm  qemu-img(qcow2,raw)作用:管理虚拟机的虚拟磁盘

[ ~]# lsmod |grep -i kvm
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm

#启动kvm
[ ~]# systemctl start libvirtd.service 
[ ~]# systemctl enable libvirtd.service 

安装VNC软件:
  下载vnc软件方法,tightvnc官网:http://www.tightvnc.com
VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。
VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。
安装VNC时,使用默认安装即可,无需安装server端。

配置第一台KVM虚拟机

[ ~]# 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-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

#参数说明
--virt-type		虚拟化的类型
--os-type=		系统类型
--os-variant	系统版本
--name			虚拟机的名字
--memory		虚拟机的内存
--vcpus			虚拟机的CPU
--disk			存储的路径
format=			存储磁盘的类型:raw(不支持快照,性能好)、qcow2(支持快照)

qcow2
size=			磁盘的大小
--cdrom			镜像的路径
--network		网络类型
使用参数说明:
参数参数说明
--virt-type HV_TYPE要使用的管理程序名称 (kvm, qemu, xen, ...)
--os-type系统类型
--os-variant DISTRO_VARIANT在客户机上安装的操作系统,例如:‘fedora18‘、‘rhel6‘、‘winxp‘ 等。
-n NAME, --name NAME客户机实例名称
--memory MEMORY配置客户机虚拟内存大小
--vcpus VCPUS配置客户机虚拟 CPU(vcpu) 数量。
--disk DISK指定存储的各种选项。
-cdrom CDROM光驱安装介质
-w NETWORK, --network NETWORK配置客户机网络接口。
--graphics GRAPHICS配置客户机显示设置。
虚拟化平台选项:
-v, --hvm这个客户机应该是一个全虚拟化客户机
-p, --paravirt这个客户机应该是一个半虚拟化客户机
--container这个客户机应该是一个容器客户机
--virt-type HV_TYPE要使用的管理程序名称 (kvm, qemu, xen, ...)
--arch ARCH模拟 CPU 架构
--machine MACHINE机器类型为仿真类型
其它选项:
--noautoconsole不要自动尝试连接到客户端控制台
--autostart主机启动时自动启动域。
--noreboot安装完成后不启动客户机。
以上信息通过 " virt-install --help " 获得。

kvm的管理操作

参数参数说明
基础操作
list查看虚拟机列表,列出域
start启动虚拟机,开始一个(以前定义的)非活跃的域
shutdown关闭虚拟机,关闭一个域
destroy (危险)强制关闭虚拟机,销毁(停止)域
vncdisplay查询虚拟机vnc端口号
配置管理操作
dumpxml导出主机配置信息
undefine删除主机
define导入主机配置
domrename对虚拟机进行重命名
挂起与恢复
suspend挂起虚拟机
resume恢复虚拟机
自启动管理
autostart虚拟机开机启动
autostart --disable取消虚拟机开机启动
以上参数通过 “virsh --help****” 获得。
#列出所有虚拟机
[ ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     centos7                        running
#开机
[ ~]# virsh start centos7 
Domain centos7 started
#关机
[ ~]# virsh shutdown centos7 
Domain centos7 is being shutdown
#强制关机
[ ~]# virsh destroy centos7 
Domain centos7 destroyed

#导出配置
[ ~]# virsh dumpxml centos7 >/opt/centos7.xml
#删除虚拟机
[ ~]# virsh undefine centos7 
Domain centos7 has been undefined
[ ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------

[ ~]# 
#导入配置
[ ~]# virsh define /opt/centos7.xml 
Domain centos7 defined from /opt/centos7.xml
[ ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7                        shut off

[ ~]# 

#配置文件路径
/etc/libvirt/qemu/

#修改KVM虚拟机配置的方法
[ ~]# virsh edit centos7
使用该命令修改可以对文件进行语法校验。

#修改虚拟机名称
[ ~]# virsh domrename centos7 opesn
Domain successfully renamed

#虚拟机挂起
[ ~]# virsh suspend opesn 
Domain opesn suspended
#虚拟机挂起恢复
[ ~]# virsh resume opesn 
Domain opesn resumed
#查看vnc端口号
[ ~]# virsh vncdisplay opesn 
:0

[ ~]# 

#开机自启动设置
# 设置 libvirtd 服务开机自启动。
[ ~]# systemctl enable libvirtd
[ ~]# virsh autostart opesn 
Domain opesn marked as autostarted

opesn 标记为自动开始
# 实质为创建软连接
[ ~]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx 1 root root 27 Jan  4 22:45 opesn.xml -> /etc/libvirt/qemu/opesn.xml
[ ~]# 
取消开机自启动
[ ~]# virsh autostart --disable opesn 
Domain opesn unmarked as autostarted

[ ~]# ll /etc/libvirt/qemu/autostart/
total 0
[ ~]#

console控制台登录

在虚拟机内操作(该操作仅限centos7):

[ ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[ ~]# reboot
# 115200n8:能显示虚拟机的启动过程
重启完成后,使用virsh console 连接虚拟机。
[ ~]# virsh console opesn 
Connected to domain opesn
Escape character is ^]

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

localhost login: root
Password: 
Last login: Sat Jan  4 22:33:18 from 192.168.122.1
[ ~]#

kvm磁盘格式

raw:裸格式,占用空间大小,不支持快照功能,性能较好,不方便传输
qcow2:占用空间小,支持快照,性能比raw差一点方便传输

#查看当前虚拟机硬盘信息
[ ~]# qemu-img info /data/centos7.raw 
image: /data/centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.7G
[ ~]# 

#创建一块qcow2的虚拟硬盘
[ ~]# qemu-img create -f qcow2 /opt/opesn.qcow2 10G
Formatting ‘/opt/opesn.qcow2‘, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
#调整磁盘容量
[ ~]# qemu-img resize /data/opesn.qcow2 +20G
Image resized.
[ ~]# qemu-img info /data/opesn.qcow2
image: /data/opesn.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
[ ~]# 

#raw转qcow2格式:
# 参数说明
[ data]# qemu-img  --help |grep convert 
qemu-img convert [-f fmt] [-O output_fmt] filename  output_filename
[ data]# qemu-img convert -f raw -O qcow2 centos7.raw opesn.qcow2 
#修改虚拟机配置文件
[ data]# virsh shutdown opesn 
[ data]# virsh edit opesn
修改前:
    <disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘raw‘/>
      <source file=‘/data/clsn.raw‘/>
      <target dev=‘vda‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/>
    </disk>
修改后:
    <disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘qcow2‘/>
      <source file=‘/data/opesn.qcow2‘/>
      <target dev=‘vda‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/>
    </disk>
#删除原磁盘文件
[ data]# rm -rf centos7.raw 
#启动虚拟机
[ data]# virsh start opesn 

#压缩磁盘空间
[ data]# qemu-img convert -c -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2

快照管理

#创建快照
[ data]# virsh snapshot-create opesn 

#查看快照列表
[ data]# virsh snapshot-list opesn 
 Name                 Creation Time             State
------------------------------------------------------------
 1578153030           2020-01-04 23:50:30 +0800 running

[ data]# 

#指定快照别名
[ data]# virsh snapshot-create-as --name v1 opesn 
[ data]# virsh snapshot-list opesn 
 Name                 Creation Time             State
------------------------------------------------------------
 1578153030           2020-01-04 23:50:30 +0800 running
 v1                   2020-01-04 23:51:57 +0800 running

[ data]# 

#查看快照信息
[ data]# virsh snapshot-info opesn --snapshotname v1
Name:           v1
Domain:         opesn
Current:        yes
State:          running
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes

[ data]# 

#删除快照
[ data]# virsh snapshot-delete opesn --snapshotname 1578153030 
Domain snapshot 1578153030 deleted

[ data]# 

#还原快照
[ data]# virsh snapshot-revert opesn --snapshotname v1 

[ data]#

虚拟机的克隆

#完整克隆
[ ~]# virt-clone -o opesn -n centos7 --auto-clone



#链接克隆
[ data]# qemu-img create -f qcow2 -b centos7.qcow2 web03.qcow2
Formatting ‘web03.qcow2‘, fmt=qcow2 size=64424509440 backing_file=‘centos7.qcow2‘ encryption=off cluster_size=65536 lazy_refcounts=off 
[ data]# qemu-img info web03.qcow2 
image: web03.qcow2
file format: qcow2
virtual size: 60G (64424509440 bytes)
disk size: 196K
cluster_size: 65536
backing file: centos7.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
[ data]# 
第一步:复制虚拟磁盘文件
第二步:修改xml配置文件
  1)name
  2)uuid
  3)虚拟磁盘存储路径
  4)mac地址 
cat /etc/libvirt/qemu/web01.xml |grep ‘qcow2‘|grep -oP "(?<=file=‘)[^‘]+"

kvm网络模式

#默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.qcow2,format=qcow2,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/centos7.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#创建桥接网卡
[ data]# virsh iface-bridge eth0 br0
[ data]# brctl show 
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29e6cf2e	yes		eth0
							vnet0
							vnet1
virbr0		8000.525400c52020	yes		virbr0-nic
[ data]# 
#新建虚拟机为桥接模式
[ data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2
[ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/centos7.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#取消桥接网卡
[ data]# virsh iface-unbridge br0

#将虚拟机的nat模式改为桥接模式
[ data]# virt-clone -o opesn -n web01 --auto-clone
[ data]# virsh edit web01
    <interface type=‘bridge‘>
      <mac address=‘52:54:00:54:40:48‘/>
      <source bridge=‘br0‘/>
      <model type=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
    </interface>
#修改kvm虚拟机网卡配置文件
[ ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.1.3
NETMASK=255.255.255.0
GATEWAY=10.0.1.254
DNS1=8.8.8.8
[ ~]# 
#测试网络连通性
[ data]# ping 10.0.1.3
PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
64 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.610 ms
64 bytes from 10.0.1.3: icmp_seq=2 ttl=64 time=0.754 ms
^C
--- 10.0.1.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.610/0.682/0.754/0.072 ms
[ data]#

kvm热添加硬盘和扩容

#宿主机操作
#创建一块硬盘
[ data]# qemu-img create -f qcow2 web01-add01.qcow2 10G
Formatting ‘web01-add01.qcow2‘, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
#为虚拟机添加硬盘
[ data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2
Disk attached successfully

#虚拟机操作
#虚拟机内挂载磁盘
[ ~]# mkfs.xfs /dev/vdb 
[ ~]# 
[ ~]# mount /dev/vdb /mnt/
[ ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        10G  1.8G  8.3G  18% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M  6.5M  490M   2% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0
/dev/vdb         20G   33M   20G   1% /mnt
[ ~]# 


#虚拟机磁盘扩容
#虚拟机操作
[ ~]# umount /mnt/

#宿主机操作
#剥离硬盘
[ data]# virsh detach-disk web01 --target vdb
#扩容
[ data]#  qemu-img resize /data/web01-add01.qcow2 +10G
[ data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2

#虚拟机操作
[ ~]# mount /dev/vdb /mnt/
[ ~]# xfs_growfs /dev/vdb 
[ ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        10G  1.8G  8.3G  18% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M  6.5M  490M   2% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0
/dev/vdb         30G   33M   30G   1% /mnt
[ ~]# 


#挂载磁盘文件
[ data]# mount -o loop web01-add01.qcow2 /mnt/

#如果磁盘文件系统是ext4
[ ~]# resize2fs /dev/vdb

kvm热添加网卡

#添加桥接模式网卡
[ data]# virsh attach-interface web01 --type bridge --source br0 --model virtio
Interface attached successfully

[ data]# 

#添加nat模式网卡
[ data]# virsh attach-interface web01 --type network --source default --model virtio
Interface attached successfully

[ data]# 

#永久添加nat网卡
[ data]# virsh attach-interface web01 --type network --source default --model virtio
[ data]# virsh attach-interface web01 --type network --source default --model virtio --config 

#剥离网卡
[ data]# virsh detach-interface web01 --type network --mac  52:54:00:74:8d:c6
Interface detached successfully

[ data]#

kvm热添加内存

#新建虚拟机
[ data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 web02.qcow2
[ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web02.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#临时热添加内存
[ data]# virsh setmem web02 2048M --live
#永久增大内存
[ data]# virsh setmem web02 2048M --live --config

kvm热添加cpu

#新建虚拟机
[ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=2 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#临时热添加CPU
[ data]# virsh setvcpus web03 2
#永久增大CPU
[ data]# virsh setvcpus web03 2 --config

kvm热迁移

#注意:需要互相做好host解析

#操作步骤:
#一:在lb01和m01上安装kvm和nfs,配置桥接网卡
[ ~]# yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y
[ ~]# systemctl start libvirtd.service
[ ~]# virsh iface-bridge eth0 br0
#二:在lb01上安装配置nfs
[ ~]# yum install nfs-utils -y
[ ~]# mkdir /data
[ ~]# vim /etc/exports
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
[ ~]# systemctl restart rpcbind
[ ~]# systemctl restart nfs

#三:m01挂载共享目录/data
[ ~]# showmount -e 10.0.1.5
Export list for 10.0.1.5:
/data 10.0.1.0/24
[ ~]# mkdir /data
[ ~]# mount -t nfs 10.0.1.5:/data /data
[ ~]# 

#四:安装一台基于桥接模式的虚拟机
[ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name opesn --memory 1024 --vcpus 1 --disk /data/opesn.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#热迁移的命令:
 ~]# virsh migrate --live --verbose opesn qemu+ssh://10.0.1.61/system --unsafe
‘s password: 
Migration: [100 %]
[ ~]# 

#将宿主机10.0.1.5上的kvm虚拟机opesn迁移到10.0.1.61

相关推荐