本系列博客是想在VMware workstation建立的虚拟机console中,开启KVM虚拟化,使用kvm虚拟机快速部署测试环境。python
注:有关虚拟化的理论部分,参照博客《》,有关KVM的理论部分,参照博客《》安全
VMware workstation提供了虚拟机的建立平台。同时也提供了为这些虚拟机的CPU和IO管理虚拟化的功能。
以下图,就为虚拟机console的CPU,配置了虚拟化引擎的功能:
网络
虚拟化InterVT-x和AMD-V是两大处理器厂商提供的硬件虚拟化技术
虚拟化IOMMU,至关于在BIOS中实现的IO接口虚拟化技术,提供给KVM的SRV,之后的博客中探讨ssh
若是console勾选了上述【虚拟化引擎】三个选项,那么能够进入到系统内部,查看cpu信息,确认是否启动了该功能。工具
console中,执行命令:egrep "vmx|svm" /proc/cpuinfo
,有字段输出,证实当前系统的处理器已经支持虚拟化了。测试
2.1内容中,kvm宿主OS(操做系统)的处理器可以支持虚拟化,可是OS中须要kvm虚拟化的软件环境,方可进行虚拟机的部署
本博客中,因为最小化安装,定制软件包时,并无定制虚拟化的部分,所以须要采用YUM进行KVM环境部署。
首先查看系统中,有没有安装kvm软件包,执行rpm -qa | grep kvm
,无输出表示未安装。ui
1. 安装内核支持:yum -y install qemu-kvm qemu-kvm-tools qemu-img gpxe-roms-qemu qemu-guest-agent 2. 安装用户层图形界面工具:yum -y install virt-manager virt-viewer virt-top virt-what 3. 安装用户层命令行工具:yum -y install python-virtinst 4. 安装API管理工具:yum -y install libvirt libvirt-client libvirt-python libvirt-snmp
建议首次安装时,采用:yum -y install xxx && echo OK >>/var/log/yum.log的方式,观察各个软件包的依赖环境操作系统
安装qemu-kvm时,同时安装了gpxe-roms-qemu,qemu-img和其余依赖软件包
安装libvirt时,安装的依赖软件包比较多,包含了libvirt-client;安装libvirt-snmp时,包含了net-snmp-libs依赖包
安装virt-manager时,安装的依赖包也不少,主要是图像库
安装virt-viewer时,安装了openssh-clients库
总结:
yum -y install qemu-kvm qemu-kvm-tools qemu-guest-agent virt-manager virt-viewer virt-top virt-what python-virtinst libvirt libvirt-python libvirt-snmp
命令行
上述软件包是在最小化OS下安装,所以在非最小化的OS下安装,可能不须要这么多。将其作出脚本存放在/usr/local/globle/scripts/kvm/install下rest
具体脚本内容参见包括《虚拟机console全局脚本.md》
涉及到的依赖环境类别主要包括:python,gtk,snmp,ssh,qemu,kvm等
此时经过rpm来检查kvm环境,rpm -qa | egrep "kvm|qemu"
执行命令:ls -lrt /dev/kvm
查看到内核接口设备
执行命令:service libvirtd status
,看到libvirtd服务是未运行的
执行命令:service libvirtd start
,会存在报错
warning : virGetHostname:2294 : getaddrinfo failed for 'console': 未知的名称或服务
这是由于libvirtd不能在/etc/hosts中找到和console对应的地址。
执行命令:echo "127.0.0.0 console" >> /etc/hosts
,而后service libvirtd restart
,发现提示已经没有了
上述过程已经说明,kvm宿主机console已经具有了初步的部署kvm虚拟机的环境。
kvm虚拟机固然是能够像VMware workstation同样使用的,做为一款应用级别的软件,来建立多种虚拟化的操做系统。可是KVM更多地是应用在一种生产环境中,做为拥有足够计算资源的物理机的替代,实现安全隔离或者更加快捷的管理。所以这样的应用场景,就须要KVM虚拟机可以桥接在物理网络中,和物理机处于同一个网络级别,来屏蔽网络差别性。因此,须要在宿主机配置桥接网络。console的桥接网络配置过程,可参考以下。
console在配置时,分配了两块NIC,一块是配置了MAC地址00:00:00:80:00:08接入NAT网络的NIC,一块是配置了MAC为00:00:00:10:00:08接入仅主机模式网络的NIC。
在console的OS中,接入NAT网络的网卡eth0的配置名称为:/etc/sysconfig/network-scripts/ifcfg-eth0,另一块则为/etc/sysconfig/network-scripts/ifcfg-eth1。
很显然,要对这两块网卡操做。
进入目录,cd /etc/sysconfig/network-scripts/
复制配置文件:cp ifcfg-eth0 ifcfg-br0 && cp ifcfg-eth1 ifcfg-br1
桥接网卡的配置很简单,只须要保持ethx的物理信息,保持brx的网络信息便可
所谓的物理信息,即UUID,HWADDR这些;而网络信息,即IPADDR,PREFIX,NEWMASK,GATEWAY,DNS这些
【ifcfg-eth0】内容以下:
DEVICE=eth0 TYPE=Ethernet UUID=20fa03bd-212f-4554-bf24-0ae23c1f8661 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static HWADDR=00:00:00:80:00:08 NAME=eth0 BRIDGE=br0
上述内容中,删掉的内容
IPADDR=192.168.80.8 PREFIX=24 GATEWAY=192.168.80.2 DNS1=192.168.80.2 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no
修改的内容为:BOOTPROTO=none。实际上这个参数能够不用修改,保持为none。
【ifcfg-br0】配置内容以下:
DEVICE=br0 TYPE=Bridge ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.80.8 PREFIX=24 GATEWAY=192.168.80.2 DNS1=192.168.80.2 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME=br0
上述内容中,删掉的内容:
UUID=20fa03bd-212f-4554-bf24-0ae23c1f8661 HWADDR=00:00:00:80:00:08
修改的内容为:BOOTPROTO=static,TYPE=Bridge,NAME=br0
依照上述操做,对第二块网卡,作一样的操做。
【ifcfg-eth1】配置内容以下:
DEVICE=eth1 TYPE=Ethernet UUID=ae99988a-c675-4ca5-93e5-2080b72c64be ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static HWADDR=00:00:00:10:00:08 BRIDGE=br1 NAME=eth1
【ifcfg-br1]配置内容以下:
DEVICE=br1 TYPE=Bridge ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.10.8 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME=br1
配置文件对比图:
注意:必定要确认系统已经安装桥接网络环境,执行命令rpm -qa | grep bridge-utils
检查。
若是没有安装,执行命令yum -y install bridge-utils && echo "yum bridge-utils OK >> /var/log/yum.log"
上述过程配置完成以后,执行命令service network restart
重启网络配置
注:本博客在执行上述命令以后,网络断开链接。缘由是最小化安装的OS里,没有安装网络桥接的环境,YUM安装bridge-utils便可。具体修复见博客《Error【0003】:配置桥接网络报错.md》
经过上述的部署以后,能够执行命令:brctl show
,查看当前环境中桥接网络。
bridge name bridge id STP enabled interfaces br0 8000.000000800008 no eth0 br1 8000.000000100008 no eth1 virbr0 8000.525400df5102 yes virbr0-nic
virbr0,为libvirtd提供的NAT网络,这个在实际的生产环境中不使用,能够删除。具体删除方式参见博客《》