企业kvm搭建

搭建kvm应用的服务器前端

虚拟化主要厂商及产品
系 列                  PC/服务器版表明node

  1. VMware            VMware Workstation、vSphere 
  2. Microsoft           VirtualPC、Hyper-V
  3. RedHat              KVM、RHEV
  4. Citrix                  Xen
  5. Oracle                Oracle VM VirtualBox

红色标记的为企业如今最经常使用的python

 1,安装虚拟化服务器平台linux

              KVM /QEMU /LIBVIRTD
– KVM是linux内核的模块,它须要CPU的支持,采用硬件辅劣虚拟化技术 Intel-VT,AMD-V,内存的相关如Intel的 EPT 和 AMD 的 RVI 技术
– QEMU 是一个虚拟化的仿真工具,经过 ioctl 不内核kvm 交互完成对硬件的虚拟化支持
– Libvirt 是一个对虚拟化管理的接口和工具,提供用户端程序 virsh ,virt-install, virt-manager, virt-view 不用户交互ios

安装须要的软件:

yum install -y    qemu-kvm    libvirt-daemon      libvirt-client      libvirt-daemon-driver-qemu
        启动服务:systemctl start libvirtdvim

必备软件


• qemu-kvm     – 为 kvm 提供底层仿真支持
• libvirt-daemon     – libvirtd 守护进程,管理虚拟机
• libvirt-client          – 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu       – libvirtd 链接 qemu 的驱劢后端

在建立虚拟管理平台以前,先了解虚拟机的组成

虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
– 一个 XML 文件(虚拟机配置声明文件)– 位置 /etc/libvirt/qemu/   //配置文件
– 一个磁盘镜像文件(虚拟机的硬盘)– 位置 /var/lib/libvirt/images/     //后端存储centos

介绍下virsh的命令工具

格式:    virsh     控制挃令    [虚拟机名称]     [参数]api

查看KVM节点(服务器)信息   – virsh   nodeinfo
• 列出虚拟机     – virsh list [--all]bash

列出全部的虚拟机,虚拟机的状态有(8)种 
runing 是运行状态         idel 是空闲状态 
pause 暂停状态                shutdown 关闭状态 
crash 虚拟机崩坏状态           daying 垂死状态 
shut off 不运行彻底关闭              pmsuspended客户机被关掉电源中中断
• 列出虚拟网络        – virsh net-list [--all]
• 查看挃定虚拟机的信息         – virsh dominfo 虚拟机名称

运行|重启|关闭挃定的虚拟机                   – virsh start|reboot|shutdown   虚拟机名称
• 强制关闭挃定的虚拟机                           – virsh destroy                            虚拟机名称
• 将挃定的虚拟机设为开机自劢运行        – virsh autostart [--disable]       虚拟机名称

 管理虚拟网卡的操做命令

*net-autostart (network)                自动启动网卡(default) 
*net-create (file)                     把配置加载到文件 
*net-destory ( network )               关闭网卡 
*net-dumpxml(default)       把网卡配置加载到文件 
*net-edit(default)                编辑网卡信息 
*net-info(default)               网卡信息 
*net-list 显示网卡 
*net-uuid (default)            获得网卡的id 
*net-name(id)                    获得网卡的名字 
*net-start (default)            开启网卡

 链接本地/远程KVM

 使用 virsh 客户端工具
– 链接本地
– virsh
– virsh# connect     qemu:///system (默认选项)
– 链接远程
– virsh# connect     qemu+ssh://user@ip.xx.xx.xx:port/system  (链接时要先部署好ssh的免密登录)

COW技术原理
• Copy On Write,写时复制– 直接映射原始盘的数据内容– 当原始盘的旧数据有修改时,在修改以前自劢将旧数据存入前端盘,对前端盘的修改不回写到原始盘


1,建立虚拟机的模板,首先要建立一个虚拟机(使用磁盘镜像文件格式)

虚拟机的磁盘镜像文件格式

特色\类型                 RAW                  QCOW2
KVM默认                    否                         是
I/O效率                        高                         较高
占用空间                     大                          小
压缩                            不支持                支持
后端盘复用                不支持                支持
快照                            不支持                支持

 因此咱们使用的是QCOW2来传教虚拟机模板格式

使用的命令是qemu-img

• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持很是多的磁盘格式,例如 raw、qcow二、vdi、vmdk 等等
– qemu-img 命令 参数 块文件名称 大小
– 经常使用的命令有
– create 建立一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照

1.1  建立新的镜像盘文件

– qemu-img create -f 格式 磁盘路径 大小

– qemu-img create -f qcow2 node.img 50G

 cd     /var/lib/libvirt/images
 qemu-img create -f qcow2 node.qcow2   16G    //建立后端存储,指定格式为qcow2
 qemu-img   info node.qcow2       //查询node镜像文件的信息

1.2 建立虚拟交换机

vim    /etc/libvirt/qemu/networks/vbr.xml
<network>
    <name>vbr</name>
    <bridge name="vbr"/>
    <forward mode="nat"/>   //配置net能够使虚拟机上外网
        <ip address="192.168.1.254" netmask="255.255.255.0">
            <dhcp>         //配置自动分配ip地址
            <range start="192.168.1.100" end="192.168.1.200"/>
            </dhcp>
        </ip>
</network>

配置的虚拟网卡名为vbr自动分配网址端为100到200

原理:调用 dnsmasq 提供DNS、DHCP等功能

1.3配置模板,加载centos的系统,搭载在1.1创建的后端存储

在配置模板以前,物理机搭建好网络yum源

1.3.1搭建好ftp服务

yum   install  -y  vsftp 

vim    /etc/vsftpd/vsftpd.conf  
listen=YES
listen_ipv6=NO

systemctl  enable  vsftpd
systemctl  start   vsftpd

vsftp默认根目录为   /var/ftp

1.3.2搭建网络yum源

vim  /etc/fstab
/iso/CentOS-7-x86_64-DVD-1708.iso    /var/ftp/centos   iso9660 defaults 0 0
或暂时挂在
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7

 1.4建立模板centos虚拟机

软件选择 minimal ,关闭 KDUMP ,选择手工分区,使用标准分区格式,只分一个根分区

对模板进行优化配置

第一步

一、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 二、卸载防火墙与NetworkManager(主要是为openstack作准备的)
yum remove -y NetworkManager-* firewalld-* python-firewall
– 三、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0

软件包安装及yum配置
– 安装软件
yum install -y lftp    – 一、yum 源导入公钥验证配置
gpgcheck=1            – 二、导入 gpg key      rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7  (也是为openstack准备)
– 三、经常使用系统命令安装    yum install -y net-tools vim-enhanced bridge-utils psmisc

第二步

删除网络配置里的个性化信息
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO=“dhcp“
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"

第三步

Console及磁盘分区配置
• 添加 Console 配置及初除磁盘分区里的个性化信息

vim     /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0  console=ttyS0,115200n8" (能够在物理机使用virsh  console   node1)
GRUB_DISABLE_LINUX_UUID="true"  
GRUB_ENABLE_LINUX_LABEL="true“
– 从新生成 grub.cfg
grub2-mkconfig       -o      /boot/grub2/grub.cfg
– /etc/fstab 文件中到 UUID 手工修改为系统设备
– blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件

第四步

去除个性化信息
• 安装分区扩展软件
yum     install       -y           cloud-utils-growpart
– 设置第一次开机自劢扩容根目录
chmod 755 /etc/rc.local
– 在 rc.local 里加入以下配置
###    (做为下面清理的标记)
/usr/bin/growpart    /dev/vda   1
/usr/sbin/xfs_growfs    /
/usr/bin/sed     '/^###/,$d'    -i     /etc/rc.d/rc.local
– 关闭虚拟机后执行信息清理工做
virt-sysprep      -d      node   (virt-sysprep软件须要提早安装,能够经过yum provides virt-sysprep查询到软件名)

第五步

virsh   undefine   centos7

到此模板建立好了。

2,建立xml配置文件

<domain type='kvm'>
  <name>node</name>
  <memory unit='KB'>2097152</memory>  //最大使用的内存
  <currentMemory unit='KB'>2097152</currentMemory>   //显示的内存,最好与最大的内存保持一致
  <vcpu placement='static'>2</vcpu>  //cpu的数量
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
    <bios useserial='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>   //磁盘添加
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/node.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>   //虚拟网卡添加
      <source bridge='vbx'/>
      <model type='virtio'/>
    </interface>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
    <serial type='pty'></serial>
    <console type='pty'>
      <target type='serial'/>
    </console>
    <memballoon model='virtio'></memballoon>
  </devices>
</domain>

3,快速建立虚拟机

     1,以咱们刚刚装系统的模板为后端文件建立虚拟机
     qemu-img    create    –b    node.qcow2   –f    qcow2     node1.img   //建立node1虚拟机磁盘镜像

      2,

virsh    define    node1.xml
virst    start     node1
virsh    console   node1

写在最后

使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 能够在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 须要注意 SELinux 机制的影响

如何挂载虚拟盘
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir      /mnt/kdisk
[root@kvmsvr ~]# guestmount    -a    node1.qcow2      -i     /mnt/kdisk
[root@kvmsvr ~]# ls           /mnt/kdisk
bin   home media opt   sbin    tmp      boot   lib   misc    proc      selinux usr

可是要修改模板须要chroot    /mnt/kdisk    可是要注意所在的位置是模板机仍是物理机

能够使用virt-manager  中加载从新配置再执行第四步,第五步。