vSphere 8.0 + Cloud-init 分层模板实战指南:从零到批量部署

本文通过详细的原理讲解和实战步骤,介绍如何在vSphere 8.0中使用Cloud-init和分层模板策略,实现Rocky Linux虚拟机的高效、一致、可重复的批量部署。从macOS工作站全流程操作指南,让你从0基础快速掌握企业级基础设施自动化技能。


引言

在现代IT基础设施中,虚拟机部署的效率和一致性至关重要。传统的手动部署方式不仅耗时,还容易出错。而vSphere + Cloud-init + 分层模板的组合,可以将5台虚拟机的部署时间从60分钟压缩到35分钟,并且完全自动化、零人工干预。

本文将从原理讲解开始,逐步引导你在macOS上完成整个部署流程。


第一部分:核心概念理解

1.1 Cloud-init 是什么?

Cloud-init是一个开源工具,在虚拟机首次启动时自动执行初始化操作。你可以把它理解为虚拟机的"智能启动助手"。

工作原理:

虚拟机启动
    ↓
Cloud-init读取ISO中的配置文件(user-data)
    ↓
自动执行配置中定义的所有操作
  ├─ 设置主机名和IP地址
  ├─ 创建用户和SSH密钥
  ├─ 安装软件包
  ├─ 运行脚本命令
  └─ 启动服务
    ↓
系统完全初始化,无需手动干预

为什么需要Cloud-init?

  • 手动方式:创建虚拟机 → SSH进去 → 手动改hostname → 手动改IP → 手动装软件 → 需要20分钟/台
  • Cloud-init方式:创建虚拟机 → 挂载ISO → 启动 → 等3分钟自动完成 → 零人工干预

1.2 分层模板策略

分层模板是将虚拟机从通用到特定进行分层设计:

第一层:基础模板
  ├─ 基础系统包(vim、curl、wget)
  ├─ 运行环境(Python、Java、Node.js)
  ├─ 基础服务(SSH、防火墙)
  └─ 性能优化参数
  
第二层:专用模板(从基础模板克隆)
  ├─ Web模板 = 基础模板 + nginx
  ├─ DB模板 = 基础模板 + MySQL
  └─ App模板 = 基础模板 + 应用框架
  
第三层:生产虚拟机(从专用模板克隆)
  ├─ Web-01, Web-02, Web-03(只改IP/hostname)
  ├─ DB-01, DB-02(只改IP/hostname)
  └─ App-01, App-02(只改IP/hostname)

这样做的好处:

  • 软件安装只做一次,通过克隆复用
  • 每个虚拟机只包含必要的软件,体积小、启动快
  • 升级基础软件只需改一个模板,所有虚拟机自动受益
  • 完全自动化,零手动干预

第二部分:前置准备(macOS环境)

2.1 安装必需工具

在macOS上打开终端,执行以下命令:

# 安装Homebrew(如果还没装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装所需工具
brew install qemu-utils      # 用于转换镜像格式(QCOW2→VMDK)
brew install cdrtools         # 用于生成ISO文件
brew install curl             # 用于上传文件

# 验证安装
qemu-img --version
mkisofs -version
curl --version

2.2 创建工作目录

# 创建工作目录
mkdir -p ~/vsphere-cloudinit-work
cd ~/vsphere-cloudinit-work

# 验证
pwd  # 应输出:/Users/你的用户名/vsphere-cloudinit-work

2.3 获取Rocky Linux镜像

cd ~/vsphere-cloudinit-work

# 下载Rocky Linux 9 GenericCloud镜像(约800MB)
curl -L -o Rocky-9-GenericCloud.qcow2 \
  https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-9.4-20250217.0.x86_64.qcow2

# 验证下载
ls -lh Rocky-9-*.qcow2

说明:

  • GenericCloud版本是专门为云环境定制的,已预装cloud-init
  • 不需要手动安装cloud-init,下载下来就有了

2.4 转换镜像格式(QCOW2 → VMDK)

cd ~/vsphere-cloudinit-work

# 转换为VMDK格式(这样vSphere才能使用)
qemu-img convert -f qcow2 -O vmdk \
  Rocky-9-GenericCloud.qcow2 \
  Rocky-9-GenericCloud.vmdk

# 验证转换(会花费2-5分钟)
ls -lh Rocky-9-*.vmdk

# 应输出类似:
# -rw-r--r--  1 user  group  1.5G  Feb 17 10:30 Rocky-9-GenericCloud.vmdk

第三部分:创建基础模板

3.1 在macOS上创建基础配置文件

基础模板包含所有虚拟机都需要的通用软件和配置。

cd ~/vsphere-cloudinit-work

# 创建基础模板的user-data配置
cat > user-data-base.yaml << 'EOF'
#cloud-config

# 系统更新
package_update: true
package_upgrade: true

# 基础软件包(所有虚拟机都需要)
packages:
  - vim
  - wget
  - curl
  - git
  - net-tools
  - htop
  - tmux
  - openssh-server
  - openssh-clients
  - firewalld
  # 开发环境
  - python3
  - python3-pip
  - java-17-openjdk
  - nodejs
  # 其他
  - chrony
  - rsyslog

# 基本配置
hostname: base-template
timezone: Asia/Shanghai

# 创建用户
users:
  - default
  - name: sysadmin
    gecos: System Administrator
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash

ssh_pwauth: false
disable_root: false

# 系统优化
sysctl:
  net.ipv4.ip_forward: 1
  vm.swappiness: 10
  net.core.somaxconn: 65535

runcmd:
  - systemctl enable --now firewalld
  - systemctl enable --now sshd
  - systemctl enable --now rsyslog
  - firewall-cmd --permanent --add-port=22/tcp
  - firewall-cmd --reload
  - dnf clean all

final_message: "Base Template Ready"
EOF

# 创建meta-data文件(通用)
cat > meta-data << 'EOF'
instance-id: rocky-base
local-hostname: base-template
EOF

# 验证文件
ls -la user-data-base.yaml meta-data

3.2 生成基础模板ISO

cd ~/vsphere-cloudinit-work

# 生成ISO(注意 -V cidata 参数是必须的)
mkisofs -o cloud-init-base.iso \
  -V cidata \
  -J -R \
  user-data-base.yaml meta-data

# 验证
ls -lh cloud-init-base.iso

3.3 上传到vSphere

使用SCP将文件上传到ESXi主机(需要替换为你的实际信息):

# 替换以下内容:
# - 192.168.1.10 → 你的ESXi主机IP
# - /vmfs/volumes/datastore1/ → 你的数据存储路径

# 上传VMDK镜像
scp Rocky-9-GenericCloud.vmdk root@192.168.1.10:/vmfs/volumes/datastore1/

# 上传基础模板ISO
scp cloud-init-base.iso root@192.168.1.10:/vmfs/volumes/datastore1/

3.4 在vSphere中创建基础模板虚拟机

步骤1:创建虚拟机

在vSphere Web UI中:

  1. 右键点击"集群"或"主机" → 新建虚拟机
  2. 选择自定义配置
  3. 填写基本信息:
    • 名称:base-template-temp
    • 兼容性:ESXi 8.0及以上
    • 操作系统:Rocky Linux 9 (64位)
  4. 计算资源:
    • CPU:2核
    • 内存:2GB
    • 磁盘:选择已存在的VMDKRocky-9-GenericCloud.vmdk
    • 网络:选择合适的网络
  5. 点击完成

步骤2:挂载cloud-init ISO

  1. 找到创建的虚拟机 base-template-temp
  2. 右键 → 编辑设置
  3. 找到CD/DVD驱动器
    • 勾选 开机时连接
    • 选择 客户机IDE驱动器
    • 选择 数据存储ISO文件cloud-init-base.iso
  4. 点击确定

步骤3:启动虚拟机并验证

# 在vSphere Web UI中启动虚拟机

# 等待虚拟机完全启动(3-5分钟)
# 打开虚拟机控制台,观察启动过程

# 虚拟机启动后,SSH进去验证
ssh sysadmin@虚拟机IP地址

# 验证软件已安装
python3 --version
java -version
node --version
nginx -v  # 这不应该显示(只在Web模板有)

# 查看cloud-init日志
sudo cat /var/log/cloud-init.log | tail -20

# 验证cloud-init状态
cloud-init status

步骤4:清理cloud-init状态(关键!)

# SSH进虚拟机执行以下命令
sudo cloud-init clean --all
sudo poweroff

为什么要清理? 如果不清理,克隆的虚拟机会认为已经初始化过,挂载的新ISO中的配置不会执行。这是最常见的部署失败原因!

步骤5:转换为模板

  1. 在vSphere Web UI中找到关闭的虚拟机 base-template-temp
  2. 右键 → 模板从虚拟机转换为模板
  3. 点击确认

现在,你有了一个基础模板,包含所有虚拟机都需要的通用软件。


第四部分:创建专用模板

4.1 Web模板

Web服务器需要nginx、PHP、MySQL等。

cd ~/vsphere-cloudinit-work

# 创建Web模板配置
cat > user-data-web-template.yaml << 'EOF'
#cloud-config

package_update: true

# 只安装Web服务需要的额外软件
packages:
  - nginx
  - php-fpm
  - php-mysql
  - php-json
  - php-xml

hostname: web-template
timezone: Asia/Shanghai

users:
  - default

runcmd:
  - systemctl enable --now nginx
  - systemctl enable --now php-fpm

final_message: "Web Template Ready"
EOF

# 生成ISO
mkisofs -o cloud-init-web-template.iso \
  -V cidata \
  -J -R \
  user-data-web-template.yaml meta-data

在vSphere中制作Web模板:

  1. 基础模板克隆虚拟机 → 命名为 web-template-temp
  2. 编辑设置 → CD/DVD驱动器 → 选择 cloud-init-web-template.iso
  3. 启动虚拟机,等待1-2分钟
  4. 验证:nginx -vphp-fpm --version
  5. SSH进去执行:sudo cloud-init clean --all && sudo poweroff
  6. 转换为模板 → 命名为 web-template

4.2 DB模板

cd ~/vsphere-cloudinit-work

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值