字符模式下构建、使用KVM虚拟化平台
环境准备:
KVM虚拟化服务器(真机或高配虚拟机(内存>4G)
操作系统:CentOS 6.5 ==> 关闭 iptables 防火墙、关闭SELinux机制,进入图形桌面
网卡连接:eth0 (VMnet4) ==> 关闭 NetworkManager 服务
主机名:kvmsvr.tarena.com
IP地址:172.30.8.202/24
分区示例:
/boot 200MB、SWAP 8GB、/ 80GB、
/var/ftp 40GB (逻辑卷 /dev/vg_data/lv_data)
一:在KVM服务器上为CentOS 6.5客户机提供 YUM 源
1. 安装、启用 vsftpd 服务,允许匿名下载
[root@kvmsvr ~]# rpm -ivh /光盘挂载点/Packages/vsftpd*.rpm
[root@kvmsvr ~]# service vsftpd restart
[root@kvmsvr ~]# chkconfig vsftpd on
2. 插入CentOS 6.5光盘,将其中所有文档部署到 FTP 目录
[root@kvmsvr ~]# mkdir -p /var/ftp/pub/iso/centos/6.5/
[root@kvmsvr ~]# cp -rf /misc/cd/* /var/ftp/pub/iso/centos/6.5/
3. 在本机测试,确保 YUM 源可用
[root@kvmsvr ~]# vim /etc/yum.repos.d/centos6.repo
[CentOS-Base]
name=CentOS 6.5 Packages
baseurl=ftp://172.30.8.202/pub/iso/centos/6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@kvmsvr ~]# yum repolist
.. ..
二:安装 KVM 虚拟化相关软件、启用服务
[root@kvmsvr ~]# yum -y groupinstall "Virtualization" "Virtualization Client" "Virtualization Tools" "Virtualization Platform"
.. ..
[root@kvmsvr ~]# service libvirtd restart
[root@kvmsvr ~]# chkconfig libvirtd on
三:准备要装虚拟机的光盘镜像,并且在物理机准备yum源
准备一个目录存放redhat5.10
[root@localhost /]# mkdir /ISO #用于存放redhat5.10的yum源
[root@localhost /]# mkdir -p /var/ftp/pub/iso/redhat/5.10/
[root@localhost /]# mkdir /data
[root@localhost /]# mount -o loop /ISO/redhat5.10.iso /data #准备5.10的yum源
[root@localhost /]# cp -rf /data/* /var/ftp/pub/iso/redhat/5.10/
[root@localhost /]# umount /data
四:从命令行创建虚拟机(建模板机)
准备工作:创建卷组,逻辑卷用于存放新建的虚拟机
新建一个100G大的分区/dev/sda7
[root@localhost /]# pvcreate /dev/sda7
[root@localhost /]# vgcreate vg_data /dev/sda7
新建一个逻辑卷作为redhat5.10虚拟机的安装位置
[root@localhost /]# lvcreate -L 15G -n redhat5.10 /dev/vg_data
不同装机方式
***********************************************************
1. 从光盘(ISO镜像文件)装新虚拟机
[root@kvmsvr ~]# virt-install \
--name redhat5.10 --vcpus=1 --ram=1024 \
--disk path=/dev/vg_data/redhat5.10 \
--network network=default --cdrom=/ISO/redhat5.10.iso
2. 从指定URL的软件源装新虚拟机
[root@kvmsvr ~]# virt-install \
--name redhat5.10 --vcpus=1 --ram=1024 \
--disk path=/dev/vg_data/redhat5.10 \
--network network=default --location=ftp://172.30.8.202/pub/iso/redhat/5.10
3. 使用本机PXE服务(隔离网段)装新虚拟机(字符模式)
[root@kvmsvr ~]# virt-install \
--name redhat5.10 --vcpus=1 --ram=1024 \
--disk path=/dev/vg_data/redhat5.10 \
--graphics none --network bridge=virbr1 --pxe
KVM虚拟化的命令行管理
一:virsh 命令工具的基本操作
virsh //直接进交互模式
virsh nodeinfo //查看KVM节点(服务器)信息
virsh list //列出正在运行的虚拟机
virsh list --all //列出所有虚拟机(包括未启动的)
virsh dominfo 虚拟机名称 //查看指定虚拟机的信息
virsh start 虚拟机名称 //将指定的虚拟机开机
virsh reboot 虚拟机名称 //将指定的虚拟机重启
virsh shutdown 虚拟机名称 //将指定的虚拟机正常关机
virsh destroy 虚拟机名称 //将指定的虚拟机强制关机(相当于拔电源)
virsh autostart 虚拟机名称 //将指定的虚拟机设置随KVM自动开机
virsh autostart --disable 虚拟机名称 //将指定的虚拟机设置随KVM自动开机
二:使用虚拟机的XML描述文件
1. 为已有的虚拟机改名
1)导出虚拟机 rh5_n1 的XML描述信息,保存为 new.xml 文件
[root@kvmsvr ~]# virsh dumpxml rh5_n1 > new.xml
2)修改 new.xml
[root@kvmsvr ~]# vim new.xml
<domain type='kvm' id='1'>
<name>rhel5_node1</name> //修改为新的虚拟机名称
<uuid>c33a4aad-c555-48b3-a0a9-893ad0b4775e</uuid> //修改UUID值(可执行uuidgen命令获得)
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file=‘/data/images/node1.img’/> //因为只是改名,虚拟磁盘可不变
.. ..
</disk>
.. ..
3)根据 new.xml 建立新的虚拟机
[root@kvmsvr ~]# virsh define new.xml #定义域 rhel5_node1(从 new.xml)
[root@kvmsvr ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 rh5_n1 启用
- rhel5_node1 关闭
4)删除原虚拟机的 XML 描述
[root@kvmsvr ~]# virsh destroy rh5_n1 //强制关机 域 rh5_n1 被删除
[root@kvmsvr ~]# virsh undefine rh5_n1 //删除虚拟机定义
域 rh5_n1 已经被取消定义
[root@kvmsvr ~]# virsh list --all //确认删除结果
Id
名称 状态
----------------------------------------------------
-
rhel5_node1 关闭
2. 复制虚拟机
1)导出虚拟机 rh5_n1 的XML描述信息,保存为 rh5_n2.xml 文件
[root@kvmsvr ~]# virsh dumpxml rh5_n1 > rh5_n2.xml
2)修改 rh5_n2.xml
[root@kvmsvr ~]# vim rh5_n2.xml
<domain type='kvm' id='1'>
<name>rh5_n2</name> //修改为新的虚拟机名称
<uuid>c33a4aad-c555-48b3-a0a9-893ad0b4775e</uuid> //修改UUID值(可执行uuidgen命令获得)
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file=‘/data/images/node2.img’/> //因为复制,应改用其他虚拟磁盘(可复制)
.. ..
</disk>
.. ..
3)复制虚拟机 rh5_n1 的磁盘文件
[root@kvmsvr ~]# cp -p /data/images/node1.img /data/images/node2.img
4)根据 rh5_n2.xml 建立新的虚拟机
[root@kvmsvr ~]# virsh define rh5_n2.xml
#定义域 rh5_n2(从 rh5_n2.xml)
三:访问虚拟机控制台
1. virt-viewer 虚拟机名称 //访问图形控制台,与 virt-manager 管理方式基本一样
2. virsh console 虚拟机名称 //访问命令行控制台,需要登录,目标虚拟机需要做下列调整(启用ttyS0串口终端)
[root@statiton10 ~]# vim /boot/grub/grub.conf
.. ..
title .. ..
kernel vmlinuz- .. .. console=ttyS0 //启用串口控制台
[root@statiton10 ~]# vim /etc/securetty
在文件的末尾添加ttyS0 //允许root从此接口登入
[root@statiton10 ~]# reboot //重启虚拟机后生效
LVM逻辑卷在虚拟机存储中的应用和创建虚拟机快照
关于虚拟机网卡的配置
虚拟机创建之后要想和物理机进行通信首先解决网卡问题
(1)桥接模式:虚拟机像一台真实机一样可以访问和物理机连接在同一交换机上的其他物理机,但是容易造成虚拟机和外部物理机的IP地址冲突问题
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-br0
[root@localhost network-scripts]# vim ifcfg-br0
DEVICE="br0"
BOOTPROTO="dhcp"
HWADDR="94:DE:80:82:C3:F3"
IPV6INIT="yes"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE=bridge
UUID="6a190276-0abb-437c-a388-8944cccc2bd3"
[root@localhost network-scripts]# vim ifcfg-eth0
添加BRIDGE="br0"
[root@localhost network-scripts]# service network restart
然后将虚拟机的网卡改为桥接模式然后虚拟机就可以与外界物理机进行通信了
(2)NAT模式:相当于一个地址转换,通过物理机的eth0进行地址转换,虚拟机使用NAT模式,就可以相当于内部网络访问外部网络
直接将虚拟机的网卡模式改为NAT模式就行
(3)隔离模式:处于隔离模式只能是物理机和虚拟机之间的通信,虚拟机不能访问外网。
在虚拟机的图形界面新添加一个网络network1最后选择隔离模式,然后重启network1
[root@localhost /]# virsh net-destroy network1
[root@localhost /]# virsh net-start network1
在修改虚拟机的网卡模式时必须处于关机状态
开机之后选择network1
查看和管理虚拟网卡
[root@localhost /]# virsh net-list
名称 状态 自动开始 Persistent
--------------------------------------------------
default 活动 yes yes
network1 活动 yes yes
修改network1虚拟网卡的配置信息
[root@localhost /]# virsh net-edit network1
<network>
<name>network1</name>
<uuid>0e4dd1c9-4871-02bf-cb84-8a8595e388c1</uuid>
<bridge name='network1' stp='on' delay='0' /> #name值对应的是物理机虚拟网卡的名字, #network1对应的虚拟机网卡的名字
<mac address='52:54:00:32:06:4A'/>
<ip address='192.168.4.1' netmask='255.255.255.0'>
</ip>
</network>
进入虚拟终端对虚拟网卡管理
[root@localhost /]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # net-
net-autostart net-destroy net-info net-start net-uuid
net-create
net-dumpxml net-list net-undefine
net-define net-edit net-name
net-update
修改虚拟机的网卡
[root@localhost /]# virsh edit redhat5.10
<interface type='network'>
<mac address='52:54:00:e6:f2:e8'/>
<source network='network1'/> #通过更改这个值可以选择虚拟机要连接的网卡类型
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
四:给创建好的虚拟机创建快照
创建存放快照的逻辑卷
[root@localhost /]# lvcreate -s -n rhel5.10 (创建存放快照的逻辑卷名) -L +10G /dev/vg_data/redhat5.10(存放模块虚拟机的逻辑卷名)
[root@localhost 桌面]# virsh dumpxml redhat5.10 > new.xml
[root@localhost 桌面]# uuidgen
5d7a505c-1820-473e-877c-a268bab7c41c
[root@localhost 桌面]# vim new.xml
修改名字,uudi号,快照存放路径,mac地址避免和模板虚拟机发生冲突
<name>rhel5.10</name>
<uuid>5d7a505c-1820-473e-877c-a268bab7c41c</uuid>
<source dev='/dev/vg_data/rhel5.10'/>
<mac address='52:54:00:e6:f2:e8'/>
根据修改后的xml文件生成一个快照虚拟机
[root@localhost 桌面]# virsh define new.xml
注:在创建虚拟机后一定要关闭防火墙,selinux,NetworkManager
然后想使虚拟机和物理机进行通信,就必须设置好网卡的问题,
使用隔离模式时创建虚拟网卡,然后通过virsh net-edit 虚拟网卡名 修改虚拟网卡的IP 地址和网卡名字,然后将虚拟机的网卡和该网卡设置在同一网段