GitOps—通过CI/CD自动化构建虚拟机模版


GitOps—通过CI/CD自动化构建虚拟机模版文章插图
概述: 从2月份开始的[模版自动化系列] , 已通过一系列的文章熟悉多种虚拟机模版的自动化构建 , 但在企业实际环境中模版的数量会远远超过这些 , 此时单一通过shell进行管理和更新 , 依然非常复杂和繁琐的(虽然相比以前已经有了很大的提高) 。 现在把自己基于GitOps的方式来管理模版分享出来 , 进一步提高模版的构建和管理效率 , 本篇文章将介绍如何通过GitLab CI/CD对模版进行自动化管理 。
对于模版保存还存在一个重要的难题需要解决 , 那就是当云平台或其他自动调用的时候 , 并不是通过模版名称进行识别 , 那仅仅通过名称更新模版 , 就会导致其他系统无法正确识别新模版 。 vCenter 6.5开始支持模版更新 , 此特性正解决了我们遇到的问题 , 并且Packer也是在8月底的版本支持此特性(OVF模版) 。 使用vCenter内容库还有一个好处 , 内容库支持订阅 , 在企业内部如果包含多个vCenter环境的情况下 , 只需构建一次即可 。
通过之前的文章大家对模版构建已经很熟悉了 , 为了提高移动设备的阅读体验 , 本手册不再介绍详细的模版配置 , 您可以通过访问 https://github.com/6547709/gitops-packer 直接查看代码和配置 。
基于GitOps自动化构建vSphere模版特性:

  1. 使用Gitlab存储模版配置文件;
  2. 基于Gitlab CI/CD实现自动化模版构建;
  3. 基于Git提交记录进行语义版本管理(feet、fix) , 版本号自增 , 并存储到模版的Notes中;
  4. 定时执行CI/CD任务实现模版变异;
  5. 采用vCenter内容库存储模版 , 并以-latest为后缀;
  6. 每次构建自动更新vCenter内容库模版 , 保持ID不变 , 以保证vRA云平台或其他工具调用最新模版;
  7. 所有密码和配置 , 通过.gitlab-ci.yml进行定义;
  8. 提供Windows2016/2019、Ubuntu1804/1910/2004、CentOS7/8等多种模版;
  9. 所有模版进行基础优化(可参考对应模版的自动应答文件);
  10. Windows模版使用ISO镜像已集成最新补丁 , 缩短了部署时间;
  11. 经过vSphere 7.0、Packer 1.6.4环境测试 。
相关工具:Packer:是一个开源的自动化虚拟机模版构建工具 , 支持私有云和公有云 , 几乎涵盖所有的环境 。
vSphere:是VMware企业级虚拟化软件 , 被企业客户广泛使用 , 具备稳定性高、性能好、安全性高和易使用的特点 。
govc:是一个基于govmomi的cli工具 , 实现对vSphere的远程管理 。
Packer-provisioner-windows-update:Windows Update for packer插件 。
Gitlab CI/CD:是一个CI/CD工具 , 与代码集成在一起工作 。
Semantic-delivery-gitlab:镜像用于实现语义版本管理 。 Harbor:是私有Docker镜像仓库 , 用于存储用于执行Packer、Govc和Genisoimage的Docker镜像 。
相关代码:中包含了Gitlab CI/CD所需的所有文件 。
针对各模版的配置请参考历史的文章 。 CI/CD可以根据情况选择不同工具 , 原理都相同 。
环境需求
  • Gitlab服务器和Gitlab-Runner服务器 , 其中Runner运行在Docker模式;
  • 一台Windows/Linux/MacOS电脑 , 能够连接vCenter Server;
  • Packer程序、Govc程序、Windows Update for Packer程序;
  • 各操作系统安装镜像;
  • VMware Tools、Windows pvscsi驱动;
  • vCenter内容库;
  • Semantic-delivery-gitlab镜像;
步骤概要
  1. 搭建Harbor镜像仓库 , 用于存储本地镜像;
  2. 搭建Gitlab和Gitlab CI/CD相关环境 , 使用Docker Runner模式;
  3. 在Gitlab中创建项目 , 并上传相关代码、修改相关配置;