KVM虚拟化

简介:

虚拟化是云计算的一种具体实现方式,KVM是红帽内核集成的虚拟化技术。在用户态使用qemu来实现网卡、硬盘等设备的虚拟化.

KVM是内核级别的虚拟机,需要CPU硬件的支持虚拟化。

查看CPU是否支持虚拟化:

1
grep  -E  '(vmx|svm)'  /proc/cpuinfo

如果有vmx或者svm的标示,就表示CPU支持虚拟化。


KVM环境部署

在使用KVM创建虚拟机,需要安装相关的软件包:

1
  yum  install  -y qemu-kvm  libvirt virt- install

这里做一个说明:

qemu-kvm: 主要是KVM用户态的管理工具,来帮助我们管理KVM

libvirt: 虚拟化管理工具,当libvirtd进程终止后,正在运行的虚拟机不受影响。

virt-install: 安装虚拟机的工具,调用libvirt的API来进行管理。


启动libvirt:

1
systemctl  start libvirtd

启动之后,通ifconfig命令可以看到系统自动添加了一块桥接网卡virbr0.

启动之后,会出现一个自动启动一个DNS和dhcp的进程dnsmasq:

1
2
3
4
5
6
# ps aux|grep dns
nobody   11349  0.0  0.0  15552   888 ?        S    11:59   0:00  /sbin/dnsmasq  --conf- file = /var/lib/libvirt/dnsmasq/default .conf --leasefile-ro --dhcp-script= /usr/libexec/libvirt_leaseshelper
root     11350  0.0  0.0  15524   180 ?        S    11:59   0:00  /sbin/dnsmasq  \
--conf- file = /var/lib/libvirt/dnsmasq/default .conf --leasefile-ro \
--dhcp-script= /usr/libexec/libvirt_leaseshelper
root     11380  0.0  0.0 112648   968 pts /0     S+   12:01   0:00  grep  --color=auto dns

创建一个raw格式,容量为10G的虚拟磁盘:

1
2
# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
Formatting  '/opt/CentOS-7-x86_64.raw' fmt =raw size=10737418240

在本地的tmp目录下上传一个CS7的安装镜像,使用此镜像来安装虚拟机

安装虚拟机:

1
2
3
virt- install  --virt- type  kvm --name CentOS-7-x86_64 -- ram  2048 \
--cdrom= /tmp/CentOS-7 .2-x86_64-DVD-1511.iso --disk path= /opt/CentOS-7-x86_64 .raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
1
2
3
4
Starting  install ...
Creating domain...                                                  |    0 B  00:00:00     
Domain installation still  in  progress. You can reconnect to 
the console to complete the installation process.

提示:也可以使用一次性指定磁盘大小的方式,磁盘文件会根据数据量的大小变化而变化:

1
2
3
virt- install   --virt- type  kvm --name CS7-1c2g20g  -- ram  2048  -vcpus=1 -s 20 -c  \
/vm/iso/CentOS-7-x86_64-Minimal-1511 .iso --hvm  --os- type =linux -f  /vm/1c2g20g .img \
--graphics vnc,listen=0.0.0.0 --noautoconsole

-s指定虚拟磁盘大小为20G。


输入命令之后,显示已经在开始安装,此时,可以通过vnc远程连接到宿主机上,使用默认的端口,查看到系统安装界面:

1
2
# netstat -lntup|grep kvm
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      19516 /qemukvm

 虚拟机安装完成之后不会自动启动,需要输入启动命令:

1
2
3
4
5
6
7
[root@localhost ~] # virsh  list --all  # 查看虚拟机状态
  Id    Name                           State
----------------------------------------------------
  -     CentOS-7-x86_64                shut off
  
[root@localhost ~] # virsh start CentOS-7-x86_64  # 启动指定的虚拟机
Domain CentOS-7-x86_64 started

虚拟机是通过一个xml的文件来配置的,一般在/etc/libvirt/qemu目录下,默认是不能修改的,只是一个静态状态文件,可以通过virsh edit CentOS-7-x86_64 来对当前的CentOS-7-x86_64虚拟机进行修改,可以动态的修改内存和CPU。


虚拟机的管理

在对虚拟机进行管理时,我们需要使用virsh 命令,来完成一系列对虚拟机的操作。

1
2
3
4
5
6
7
8
[root@localhost ~] # virsh list     # 列出当前活动的虚拟机,如果是关闭状态。需要加 --all 参数
  Id    Name                           State
----------------------------------------------------
  2     CentOS-7-x86_64                running
[root@localhost ~] # virsh dumpxml CentOS-7-x86_64 > backup.xml   # 备份指定虚拟机的xml文件
[root@localhost ~] # virsh undefine CentOS-7-x86_64   # 删除虚拟机,实质是移除了xml 文件,这样如  
                                                      # 果xml 文件没有备份,或者已经移除虚拟硬盘,虚拟机将无法恢复!
Domain CentOS-7-x86_64 has been undefined

恢复undefine的xml文件,需要确认xml文件是否备份成功,否则无法恢复:

1
2
3
4
5
6
[root@localhost ~] # virsh define backup.xml 
Domain CentOS-7-x86_64 defined from backup.xml
[root@localhost ~] # virsh list --all
  Id    Name                           State
----------------------------------------------------
  -     CentOS-7-x86_64                shut off

挂起虚拟机:

1
2
3
4
5
6
[root@localhost ~] # virsh suspend CentOS-7-x86_64
Domain CentOS-7-x86_64 suspended
[root@localhost ~] # virsh  list
  Id    Name                           State
----------------------------------------------------
  3     CentOS-7-x86_64                paused

重新唤醒虚拟机:

1
2
3
4
5
6
[root@localhost ~] # virsh resume CentOS-7-x86_64
Domain CentOS-7-x86_64 resumed
[root@localhost ~] # virsh  list
  Id    Name                           State
----------------------------------------------------
  3     CentOS-7-x86_64                running

虚拟机还可以创建快照,但是只支持qcow格式。


CPU和内存动态扩容

CPU扩容

使用KVM虚拟机可以动态对其进行CPU和内存的扩容,使用virsh edit命令:

1
2
# virsh edit CentOS-7-x86_64
  <vcpu placement= 'auto'  current= "1" >4< /vcpu >   # 需要修改的vcpu内容,最大支持4个

执行命令:

1
2
[root@localhost ~] # virsh setvcpus CentOS-7-x86_64 2 --live # 动态的将VCPU添加到2个
error: invalid argument: requested vcpus is greater than max allowable vcpus  for  the live domain: 2 > 1

当然前提是需要有足够的CPU


内存扩容

使用相同的方式,对文件进行修改:

1
# virsh edit CentOS-7-x86_64
1
2
  <memory unit= 'KiB' >2097152< /memory >     # 此处可以设置最大内存
   <currentMemory unit= 'KiB' >2097152< /currentMemory >

使用virsh 命令调整内存:

1
2
3
4
5
6
[root@localhost ~] # virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
[root@localhost ~] # virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon 
balloon: actual=512   # 查看内存大小
[root@localhost ~] # virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 1024
[root@localhost ~] # virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon 
balloon: actual=1024   #查看内存大小

调整之后,在虚拟机中就可以看到内存已经变化了。


KVM磁盘管理

qemu支持两种磁盘镜像格式:qcow和raw

qcow镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘.qcow镜像可以用来保存另一个镜像文件的变化,它并不去修改原始镜像文件,只记录与原始镜像文件的不同即可,可以用于快照。

可以查看raw镜像的信息:

1
2
3
4
5
# qemu-img info CentOS-7-x86_64.raw 
image: CentOS-7-x86_64.raw
file  format : raw
virtual size: 10G (10737418240 bytes)
disk size: 1.0G

QEMU 软件包里面提供的 qemu-img 工具可以将raw格式转化为qemu格式:

1
2
# qemu-img convert -f raw -O qcow2  CentOS-7-x86_64.raw CentOS-7-x86_64.
qcow2


创建桥接网卡

KVM虚拟机默认是以NAT的方式连接网络的,这就必然需要使用iptables,在有些情况下需要关闭iptables或便于管理,我们会让虚拟机使用桥接的方式与宿主机通信。步骤如下(在实际操作中最好使用脚本实现):

1
2
3
4
5
brctl addbr br0    #创建桥接网卡
brctl addif br0 eth0   # 将桥接网卡绑定到eth0上。
ip addr del dev eth0 192.168.1.11 /24   # 删除eth0上的IP ,此步操作会与主机断开连接
ifconfig  br0 192.168.1.11 /24   up       # 在br0上添加IP
route add default gw 192.168.1.2     # 添加默认路由


同时,需要修改配置虚拟机XML文件,为桥接模式:

1
# virsh edit CentOS-7-x86_64
1
2
3
   <interface  type = 'bridge' >
       <mac address= '52:54:00:6a:36:1f' />
       < source  bridge= 'br0' />

修改之后在宿主机上重启虚拟机,然后修改虚拟机的ip即可完成桥接网卡的配置。


 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1883643


相关文章
|
机器学习/深度学习 Linux KVM
Debian11安装KVM虚拟化并安装Centos
grep --color --perl-regexp 'vmx | svm' /proc/cpuinfo 首先检查其是否支持虚拟化. 分别用以下条命令查看
1125 0
Debian11安装KVM虚拟化并安装Centos
|
机器学习/深度学习 存储 Linux
CentOS 7 部署 KVM 虚拟化
CentOS 7 部署 KVM 虚拟化
639 0
|
安全 IDE KVM
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序) 因为这也不是我的本职工作,只是这次恰巧碰到了,帮着解决了以下,我就没深究原理了,问我原理可能我也不知道,只是这个操作步骤吧,亲测有效。
462 0
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
|
11月前
|
存储 监控 网络安全
【KVM虚拟化】· 虚拟机的冷迁移和热迁移
【KVM虚拟化】· 虚拟机的冷迁移和热迁移
879 0
|
11月前
|
KVM 虚拟化 Windows
【KVM虚拟化】· KVM中的网络
【KVM虚拟化】· KVM中的网络
201 0
|
11月前
|
存储 KVM 文件存储
【KVM虚拟化】· 存储池、存储卷
【KVM虚拟化】· 存储池、存储卷
408 0
|
11月前
|
存储 监控 安全
【KVM虚拟化】· virsh文件管理
【KVM虚拟化】· virsh文件管理
329 0
|
11月前
|
XML Shell API
【KVM虚拟化】· virsh管理命令
【KVM虚拟化】· virsh管理命令
256 0
|
11月前
|
XML 存储 安全
【KVM虚拟化】· 命令行KVM安装linux
【KVM虚拟化】· 命令行KVM安装linux
131 0
|
11月前
|
存储 安全 Linux
【KVM虚拟化】· 图形化KVM安装linux
【KVM虚拟化】· 图形化KVM安装linux
199 0