KVM虚拟化

Posted opesn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM虚拟化相关的知识,希望对你有一定的参考价值。

KVM虚拟化

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

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

kvm虚拟化管理软件安装

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

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

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

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

配置第一台KVM虚拟机

[root@lb01 ~]# 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****” 获得。
#列出所有虚拟机
[root@lb01 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     centos7                        running
#开机
[root@lb01 ~]# virsh start centos7 
Domain centos7 started
#关机
[root@lb01 ~]# virsh shutdown centos7 
Domain centos7 is being shutdown
#强制关机
[root@lb01 ~]# virsh destroy centos7 
Domain centos7 destroyed

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

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

[root@lb01 ~]# 

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

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

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

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

[root@lb01 ~]# 

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

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

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

console控制台登录

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

[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]# reboot
# 115200n8:能显示虚拟机的启动过程
重启完成后,使用virsh console 连接虚拟机。
[root@lb01 ~]# 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
[root@localhost ~]# 

kvm磁盘格式

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

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

#创建一块qcow2的虚拟硬盘
[root@lb01 ~]# 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 
#调整磁盘容量
[root@lb01 ~]# qemu-img resize /data/opesn.qcow2 +20G
Image resized.
[root@lb01 ~]# 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
[root@lb01 ~]# 

#raw转qcow2格式:
# 参数说明
[root@lb01 data]# qemu-img  --help |grep convert 
qemu-img convert [-f fmt] [-O output_fmt] filename  output_filename
[root@lb01 data]# qemu-img convert -f raw -O qcow2 centos7.raw opesn.qcow2 
#修改虚拟机配置文件
[root@lb01 data]# virsh shutdown opesn 
[root@lb01 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>
#删除原磁盘文件
[root@lb01 data]# rm -rf centos7.raw 
#启动虚拟机
[root@lb01 data]# virsh start opesn 

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

快照管理

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

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

[root@lb01 data]# 

#指定快照别名
[root@lb01 data]# virsh snapshot-create-as --name v1 opesn 
[root@lb01 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

[root@lb01 data]# 

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

[root@lb01 data]# 

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

[root@lb01 data]# 

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

[root@lb01 data]# 


虚拟机的克隆

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



#链接克隆
[root@lb01 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 
[root@lb01 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
[root@lb01 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

#创建桥接网卡
[root@lb01 data]# virsh iface-bridge eth0 br0
[root@lb01 data]# brctl show 
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29e6cf2e	yes		eth0
							vnet0
							vnet1
virbr0		8000.525400c52020	yes		virbr0-nic
[root@lb01 data]# 
#新建虚拟机为桥接模式
[root@lb01 data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2
[root@lb01 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

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

#将虚拟机的nat模式改为桥接模式
[root@lb01 data]# virt-clone -o opesn -n web01 --auto-clone
[root@lb01 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虚拟机网卡配置文件
[root@localhost ~]# 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
[root@localhost ~]# 
#测试网络连通性
[root@lb01 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
[root@lb01 data]# 

kvm热添加硬盘和扩容

#宿主机操作
#创建一块硬盘
[root@lb01 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 
#为虚拟机添加硬盘
[root@lb01 data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2
Disk attached successfully

#虚拟机操作
#虚拟机内挂载磁盘
[root@localhost ~]# mkfs.xfs /dev/vdb 
[root@localhost ~]# 
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# 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
[root@localhost ~]# 


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

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

#虚拟机操作
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# xfs_growfs /dev/vdb 
[root@localhost ~]# 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
[root@localhost ~]# 


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

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

kvm热添加网卡

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

[root@lb01 data]# 

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

[root@lb01 data]# 

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

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

[root@lb01 data]# 

kvm热添加内存

#新建虚拟机
[root@lb01 data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 web02.qcow2
[root@lb01 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

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


kvm热添加cpu

#新建虚拟机
[root@lb01 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
[root@lb01 data]# virsh setvcpus web03 2
#永久增大CPU
[root@lb01 data]# virsh setvcpus web03 2 --config 

kvm热迁移

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

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

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

#四:安装一台基于桥接模式的虚拟机
[root@lb01 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

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

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

以上是关于KVM虚拟化的主要内容,如果未能解决你的问题,请参考以下文章

虚拟化技术kvm

KVM虚拟化平台部署及管理

kvm基本原理

KVM虚拟化知识的一些笔记

KVM虚拟化管理平台的实现

虚拟化技术之KVM平台部署及简单应用