====== CentOS 6下KVM环境的安装和配置 ======
KVM是Kernel-based Virtual Machine的缩写,是虚拟化的一种实现方案。本文主要参考[[http://www.redhat.com|RedHat]]虚拟化方面的官方文档:
* [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html|Virtualization Administration Guide]]
* [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html|Virtualization Getting Started Guide]]
* [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html|Virtualization Host Configuration and Guest Installation Guide]]
* [[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Security_Guide/index.html|Virtualization Security Guide]]
更多信息均可以从官网获得,下面只简要说明处理步骤。
===== 安装软件包 =====
除了基本的KVM软件包,也同时安装一些管理工具:
yum install kvm
yum install virt-manager libvirt libvirt-python python-virtinst libvirt-client
各个软件包的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Host_Installation-Installing_KVM_packages_on_an_existing_Red_Hat_Enterprise_Linux_system.html|Installing virtualization packages on an existing Red Hat Enterprise Linux system]]。
KVM包含全套的命令行工具,如果在图形界面下,使用virt-manager是最简单的方式。
===== SELinux =====
SELinux是无法回避的一套安全机制,详细信息可参考官方文档[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/index.html|Security-Enhanced Linux]]。很多人图省事,简单的禁用了它。个人不建议这么做,相反,还安装如下的一些软件包,方便管理:
yum install policycoreutils-python
yum install setroubleshoot
yum install setroubleshoot-server
yum install setools-console
同时,启用auditd服务,记录安全日志,以便能更容易找到解决方案:
chkconfig auditd on
===== 存储 =====
KVM支持本地和网络的存储,每种又支持很多模式。详细说明可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Storage_Concepts.html|Storage concepts]]。
最简单的本地存储模式就是文件系统目录,本地存储缺省目录在/var/lib/libvirt/images/下。在[[.:platform|虚拟机学习平台的搭建]]一文中已准备好了一个文件系统/raid0,通过virt-manager将其添加到存储池里,以后就可以利用这块存储空间来建立虚拟机了。
对于比较简单的NFS网络模式,需要注意的是,要让虚拟机能利用远端服务器的NFS存储,需要设置SELinux:
/usr/sbin/setsebool -P virt_use_nfs=1
NFS对网络要求很高,这也是在[[.:platform|虚拟机学习平台的搭建]]一文中提到至少千兆网卡的原因,百兆网络的速度还不如一些本地移动设备。
===== 网络 =====
==== 虚拟网络 ====
每个虚拟网络就好比是一台交换机(switch),使用同一个虚拟网络的虚拟机就如同接在同一台交换机上,彼此可以互相通信。
KVM支持多种虚拟网络模式:
* NAT模式(缺省),虚拟机通过IP伪装与外界通信,外界无法访问虚拟机;
* Routed模式,虚拟网络如同一台路由器,路由设置正确后,内外可互访;
* Isolated模式,虚拟机只能与宿主机以及同一个虚拟网络上的其他虚拟机通信。
有关虚拟网络的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Virtual_Networking.html|Virtual Networking]]。
==== 桥接模式 ====
还有一种模式称为桥接(bridge)模式,此模式下,虚拟机就如同一台真实的物理机器展现在外界。
要配置桥接模式,需要禁用NetworkManager,恢复传统的网络配置模式:
chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop
编辑桥接对应的物理网卡配置文件(以eth0为例)/etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE="eth0"
ONBOOT=yes
HWADDR=8C:89:A5:56:2C:B2
BRIDGE=br0
这里只需指定物理地址和桥接设备名称br0,详细的网络参数下面设置。
新建桥接设备配置文件/etc/sysconfig/network-scripts/ifcfg-br0:
DEVICE="br0"
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
DELAY=0
IPADDR=192.168.176.20
PREFIX=24
GATEWAY=192.168.176.1
DNS1=192.168.176.1
DEFROUTE=yes
注意“TYPE=Bridge”的大小写,其余都是传统的网络参数了。
完毕启动网络:
service network start
针对桥接,需要修改防火墙设置,让所有桥接数据都forward通过:
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
service iptables save
service iptables restart
显示桥接状态:
brctl show
有关桥接网络的详细说明,可参阅:[[https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Network_Configuration-Network_Configuration-Bridged_networking_with_libvirt.html|Bridged networking with libvirt]]。
===== 应用 =====
一些应用案例(不断更新):
[[.:net_simulation | 用KVM虚拟机模拟网络环境]]
[[.:hadoop | Hadoop集群环境的模拟]]
[[.:openmpi | OpenMPI并行环境的模拟]]
[[.:mongodb | MongoDB数据库集群的模拟]]
{{tag>CentOS 虚拟化}}