参考
http://stacklet.com/
http://libvirt.org/
http://virt-manager.org/
目录
简介
准备工作
安装所需软件(根据需求,要知道每一个软件的用途)
配置桥接网卡
vncserver与客户端
命令行安装与管理虚拟机 virsh-install,virsh
本地图形界面安装与管理虚拟机 virt-manager virt-viewer
简介
kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。
KVM(基于内核的虚拟机)是一个x86 Linux全虚拟化解决方案,需要硬件支持虚拟化扩展(Intel VT 或AMD-V),它由一个载入时内核模块kvm.ko(提供核心虚拟化基础设施)和一个处理器特殊模块kvm-intel.ko或kvm-amd.ko组成,在它上层需要修改过的QEMU。
KVM没有提供官方的管理界面,但有大量的第三方工具可以管理KVM域,用的最多的要数Red Hat的virt-manager,它提供了一个简单但高效的图形界面。
使用Openstack,基本都是通过nova来管理KVM,自己对kvm的各种管理命令,其实是很陌生。所以这次就抛弃各种管理工具,直接在CentOS下使用KVM,创建虚拟机和模板。
来自Convirture的Convirt是另一个管理KVM虚拟机的GUI工具,它和virt-manager类似,都支持远程和本地机器。
环境
64位,cpu支持虚拟化,selinux,iptables
准备工作
1 确保BIOS里开启VT:
2 grep vmx /proc/cpuinfo (INTEL芯片)
grep svm /proc/cpuinfo (AMD芯片)
egrep '(vmx|svm)' /proc/cpuinfo
3 uname -r查看内核版本,如果在2.6.20以下的linux版本,需升级内核
4 sestatus -v 查看状态
getenforce
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
##不用重启,临时生效
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
5 service iptables stop
6 如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。
epel源安装,64位系统选择:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6Server/i386/epel-release-6-8.noarch.rpm
rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
yum install yum-priorities
安装所需软件
Ubuntu中安装KVM,你应该使用下面的命令来安装它:
$sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils
libvirt-bin提供了libvirtd,它可以用来管理QEMU和KVM实例。
ubuntu-vm-builder是创建虚拟机的命令。
bridge-utils在你的网络和虚拟机之间架起了一座桥梁。
2. centos6.4中安装
virtualization tools:
libguestfs
virtualization platform:
libvirt 虚拟化工具的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。libvirt 本身不是一种工具,它是一种可以建立工具来管理来宾操作系统的API,起初是专门为 Xen 设计的一种管理 API,后来被扩展为可支持多个虚拟机监控程序。
libvirt-client 可以通过 virsh命令管理KVM客户机,”virtual shell”。连接到virtual shell,运行virsh -connect qemu:///system
virt-who 是一个agent
virtualization client:
python-virtinst 管理虚拟机的一些命令行工具,也使用libvirt库,基于libvirt开发
virt-manager 管理虚拟机的gui工具,也使用libvirt库,需要安装桌面环境,才可用
virt-top 类似top工具,也使用libvirt库
virt-viewer 在桌面的命令行下#virt-viewer 1(ID),就连到虚拟机了,也使用libvirt库
virtualization:
hypervkvpd
qemu-kvm
#yum install libvirt python-virtinst qemu-kvm virt-viewer
重启系统
service libvirtd start
lsmod |grep kvm
查看kvm服务是否正常,目前没任何虚拟机,所以没有内容显示
virsh -c qemu:///system list
ifconfig
配置桥接网卡
创建一个文件 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.16.65
NETMASK=255.255.255.0
GATEWAY=192.168.16.254
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
重启网络服务
/etc/init.d/network restart
查看桥接网络
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00e081de016c no eth0
virbr0 8000.5254009219a2 yes virbr0-nic
vncserver与客户端
yum install tigervnc-server
编辑 /etc/sysconfig/vncservers 增加一行
VNCSERVERS="3:root"
设置password
vncpasswd
启服动务
# /etc/init.d/vncserver start
# netstat -nulpt | grep vnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 6508/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 6508/Xvnc
tcp 0 0 :::6001 :::* LISTEN 6508/Xvnc
virt-install --name==win2003 --ram=1024 --vcpus=1 --disk path=/home/2003.img,size=8
--cdrom=/root/win2003_ent.iso --graphics vnc --network bridge-br0 --force --autostart
(参考) virt-install --name=wintest01 --ram 512 --vcpus=2 --disk path=/data/wintest01.img,size=8 --accelerate --cdrom /data/iso/Windows2003.iso --vnc --vncport=5911 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart
参照 http://blog.csdn.net/ex_net/article/details/11901707 完成window vnc客户端安装centos kvm 虚拟机
客户端安装好后,连接时输入宿主机ip:虚拟机的vnc的端口号,输入密码即可
服务端参考上面的链接文章
这个时候你在windows的客户端,就可以通过vnc连接过去,完成虚拟机的安装 vnc客户端很多。我是使用TightVNC,安装的时候最好选择定制,只安装客户端,而不安装server端。
安装vncserver的机器也就是安装x window system和desktop的主机,即宿主机:5901,就可以访问。
# vi /etc/libvirt/qemu.conf
...
user = "root"
group = "root"
dynamic_ownership = 0