虚拟化是云计算的一种具体实现方式,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