KVM

什么是KVM

KVM是英文Kernel-based Virtual Machine的简称,是基于硬件辅助的开源虚拟化解决方法,其优点如下:

  • 开源免费
  • 架构简单
  • 性能卓越
  • 社区活跃

KVM架构

基本上又两大方便组成,KVM模块以及QENMU-KVM

模块:kvm.ko,kvm_intel.ko, kvm_amd.ko

qemu-kvm:通过修改qemu代码而得出的专门为管理和创建虚拟机的工具

/dev/kvm:linux系统下kvm提供驱动接口

 

硬件支持

我这里用的是虚拟机,为了使cpu支持虚拟化勾选了"虚拟化Intel VT-x/EPT或AMD-V/RVI(V)"

生产环境中我们使用的是真实物理服务器,一般是默认开启的,如果没有开启,则需要在BIOS中开启

系统环境

CentOS 7.2.1511

生产环境当中,一般配置虚拟机和宿主机的网络为桥接模式

我宿主机的物理网卡名称为eno33554984(VMnet1)可以看到我们上面还有一个NAT,那是我们专门用来上网的,真实服务器一张网卡就够了

我们需要创建一个共享的桥接网络设备

# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
BRIDGE=br0

# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.88.1
PREFIX=24
GATEWAY=192.168.88.254
DNS1=114.114.114.114

 

SSH连接192.168.88.1进入系统

检查cpu是否支持虚拟机化,Intel支持的会带有vmx标志,AMD支持会带有svm标志

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

安装组件

# yum install -y qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install

创建一个10G的硬盘(给虚拟机用)

准备一个系统镜像

创建虚拟机

# mkdir /data/images
# virt-install \         #命令(详细用法  virt-install --help)
--name CentOS7.1_88.100 \           #虚拟机名字
--ram 1024 \ 				   #分配内存大小
--cdrom=/data/CentOS-7-x86_64-Minimal-1511.iso \     #安装镜像
--disk path=/data/images/CentOS7.1_88.100.img,size=8 \     #8G的存储文件,虚拟机的硬盘
--network bridge=br0 \                                     #桥接到br0
--graphics vnc,listen=0.0.0.0 --noautoconsole     #开启vnc

查看正在运行的虚拟机

我们可以发现开启了一个5900端口,我们可以使用VNC来连接这个端口,远程连接到虚拟机

我们可以看到已经进入到安装界面

按正常步骤安装,虚拟机只要分一个分区就可以了(阿里云也没有分交换分区,哈哈)

安装完成后重启

然而虚拟机并没有重启,只是关闭了

我们回到宿主机使用virsh list并没有看到在运行的虚拟机

这里我们可以使用virsh --list all查看所有的虚拟机,可以发现,它处于一个关闭状态

 

开启虚拟机

# virsh start CentOS7.1_88.100                    
# virsh shutdown CentOS7.1_88.100     这是关闭的命令

这样我们使用VNC就可以连接上去了,查看虚拟机网络

配置eth0的ip为192.168.88.100

重启虚拟机的网络服务

然后我们就可以使用ssh远程192.168.88.100了

当我创建第二台虚拟机,它的VNC连接端口是5901

 

虚拟主机管理

virsh undefine [主机名字]

我们创建虚拟机的时候可以配置好cpu、 内存、硬盘的配置(安装前规划是最好的)

然后,当我们创建好,配置已经无法满足需求了,我们可以编辑xml修改

virsh edit [主机名字] 修改完配置需要重启虚拟机才能生效

---修改cpu---
需求:最大支持4个cpu,当前为1个
<vcpu placement='static'>1</vcpu>
改为
<vcpu placement='auto' current='1'>4</vcpu>
重启动虚拟主机
virsh shutdown [ 主机名字]
virsh start [主机名字]
这样我们就可以支持cpu的热添加(centos7才支持),不支持热减少
当前我们的cpu只有1个,现在我们改为2个
virsh setvcpus [主机名字] 2 --live
然后我们可以在虚拟机中查看cpu有没有多出1 个,如果没有,我们需要把它激活生效
# cat /sys/devices/system/cpu/cpu0/online   #1表示死激活状态
1
# cat /sys/devices/system/cpu/cpu0/online
1

---修改内存--
需求:最大支持3G内存,当前为1G内存
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
改为
<memory unit='KiB'>3048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
重启虚拟机
内存支持热添加和减少
查看当前内存
virsh qemu-monitor-command [主机名字] --hmp --cmd info balloon
balloon: actual=1024
改为800M
virsh qemu-monitor-command [主机名字] --hmp --cmd balloon 800
改大为2G
virsh qemu-monitor-command [主机名字] --hmp --cmd balloon 2048

 

使用存储池

存储池是一个本地目录、本地存储设备、网络文件系统或块级联网存储,可以使用libvirt管理它们,并且可在其中创建和存储一个或多个虚拟机镜像。本地存储很简单,但可能不灵活且不支持企业虚拟化的最关键需求:实时迁移

默认情况下,基于libvirt的命令使用虚拟化主机上的目录/va/lib/libvirt/images作为初始文件系统目录存储池

使用virsh pool-create-as命令轻松创建一个新的存储池(我预先在88.2配置了nfs服务)

第一个参数 (NFS-POOL) 指定新存储池的名称
第二个参数指定所创建的存储池类型
--source-host 选项的参数指定了通过 NFS 导出存储池目录的主机
--source-path 选项的参数指定该主机上导出的目录的名称
--target 选项的参数指定了访问存储池时所使用的本地挂载点

创建新存储池后,它将virsh pool-list命令的输出中列出

输出中,注意新存储池标记不会自动启动,表明系统重新启动后它不会自动启动,而且它没有持久化,表明在系统重新启动后绝对不会定义它。存储池仅在它们受其XML描述支持时才能持久化,该XML描述位于目录/etc/libvirt/storage中。XML存储池描述文件名与它们相关联的存储池名称相同,但是扩展名是.xml.

要为手动定义的存储池创建xml描述文件,可以使用virsh pool-dumpxml命令指定一个池名称,将其XML描述转储为一个最终参数。此命令写入到标准输出,所以需要将它的输出重定向到合适的文件中。例如,以下命令将之前创建的NFS-POOL存储池创建正确的XML描述文件

即使将存储池持久化后,该池也不会标记为在重新启动虚拟化主机时自动启动。可使用virsh pool-autostart命令后跟一个存储池名称来将存储池设置为自动启动

将存储池标记为自动启动,意味着存储池将在虚拟化主机重新启动时可用。在技术上,它意味着/etc/libvirt/storage/autostart目录包含该存储池xml描述的一个符号链接

创建存储池后,可在该池内创建一个或多个虚拟机

每次都报这种错误

后来改了下nfs的配置

然后成功创建了虚拟机

posted @ 2017-11-06 10:44  sellsa  阅读(375)  评论(0编辑  收藏  举报