2018年10月

利用VMware OVF文件快速部署CentOS7

当新项目上线和测试时候免不了要创建一堆容器或者虚拟机. 然而创建的虚拟机过程很长步骤需要手动人工介入操作很繁琐. 所以VMware有个基于OVF文件来快速部署的功能. 当创建OVF文件时候可以指定OVF内文件的配置文件以供虚拟机来读取做相应自动配置.

目前我们想创建一个基于CentOS7的OVF快速部署文件:

  1. 已标准方式安装CentOS7并安装好VMTools以及使用yum update更新下系统包以及内核.

  2. 在虚拟机vApp options选项卡中勾选Enable vApp options以供可以自定义配置文件项.

    EA3267EC-D270-4889-B37C-8B3413BF7888.png

    同时勾选OVF settings内的OVF environment transport / VMware Tools

    1962D7DA-D549-4C2C-B19A-E7A9A79AB00E.png

  3. 创建OVF自定义配置文件项:

    2D8039BF-E6BB-4239-8B10-B977F12688F6.png

    此时在虚拟机内已经可以通过vmtoolsd --cmd "info-get guestinfo.ovfenv"来获取配置项的值了

    <?xml version="1.0" encoding="UTF-8"?>
    <Environment
         xmlns="http://schemas.dmtf.org/ovf/environment/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:oe="http://schemas.dmtf.org/ovf/environment/1"
         xmlns:ve="http://www.vmware.com/schema/ovfenv"
         oe:id=""
         ve:vCenterId="vm-52">
       <PlatformSection>
          <Kind>VMware ESXi</Kind>
          <Version>6.7.0</Version>
          <Vendor>VMware, Inc.</Vendor>
          <Locale>en</Locale>
       </PlatformSection>
       <PropertySection>
             <Property oe:key="dns1" oe:value=""/>
             <Property oe:key="dns2" oe:value=""/>
             <Property oe:key="gateway" oe:value=""/>
             <Property oe:key="hostname" oe:value=""/>
             <Property oe:key="ip" oe:value=""/>
             <Property oe:key="netmask" oe:value=""/>
       </PropertySection>
       <ve:EthernetAdapterSection>
          <ve:Adapter ve:mac="00:50:56:ab:0d:7e" ve:network="VM Network" ve:unitNumber="7"/>
       </ve:EthernetAdapterSection>
    </Environment>
    
  4. 编写脚本在虚拟机克隆后第一次开机时自动按照给定的配置完成分配IP等操作

  5. 清理环境:

    1. 为了清理环境我们先需要停止日志服务避免操作的时候再次污染环境:

      service auditd stop
      service rsyslog stop
      
    2. 清理yum update留下的老版本内核:

      yum install yum-utils -y
      package-cleanup --oldkernels --count=1
      
    3. 清理yum留下的缓存数据:

      yum clean all && rm -rf /var/cache/yum
      
    4. 删除已经留存的日志:

      /usr/sbin/logrotate -f /etc/logrotate.conf 
      rm -f /var/log/*-???????? /var/log/*.gz 
      rm -f /var/log/dmesg.old 
      rm -rf /var/log/anaconda
      cat /dev/null > /var/log/audit/audit.log 
      cat /dev/null > /var/log/wtmp 
      cat /dev/null > /var/log/lastlog 
      cat /dev/null > /var/log/grubby
      
    5. 删除设备文件:

      rm -f /etc/udev/rules.d/70*
      sed -i '/^(HWADDR|UUID)=/d' /etc/sysconfig/network-scripts/ifcfg-e*
      
    6. 清理/tmp目录

      rm -rf /tmp/* 
      rm -rf /var/tmp/*
      
    7. 清理SSH密钥

      rm -f /etc/ssh/*key*
      rm -rf ~root/.ssh/ 
      rm -f ~root/anaconda-ks.cfg
      
    8. 清理命令历史

      rm -f ~root/.bash_history 
      unset HISTFILE
      history -c
      sys-unconfig
      
    9. 此时系统会自动关闭已经可以将虚拟机转换成模板进行克隆部署或导出为OVF通过OVF来部署.