字符模式下构建、使用KVM虚拟化平台

字符模式下构建、使用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 地址和网卡名字,然后将虚拟机的网卡和该网卡设置在同一网段 











本文转自 无心低语 51CTO博客,原文链接:http://blog.51cto.com/fengzhankui/1543741,如需转载请自行联系原作者
上一篇:XCode实现注释所选行/**/功能


下一篇:基于容器服务的持续集成与云端交付(四)- 多种发布方式