本文通过详细的原理讲解和实战步骤,介绍如何在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中:
- 右键点击"集群"或"主机" → 新建虚拟机
- 选择自定义配置
- 填写基本信息:
- 名称:
base-template-temp - 兼容性:
ESXi 8.0及以上 - 操作系统:
Rocky Linux 9 (64位)
- 名称:
- 计算资源:
- CPU:2核
- 内存:2GB
- 磁盘:选择已存在的VMDK →
Rocky-9-GenericCloud.vmdk - 网络:选择合适的网络
- 点击完成
步骤2:挂载cloud-init ISO
- 找到创建的虚拟机
base-template-temp - 右键 → 编辑设置
- 找到CD/DVD驱动器:
- 勾选 开机时连接
- 选择 客户机IDE驱动器
- 选择 数据存储ISO文件 →
cloud-init-base.iso
- 点击确定
步骤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:转换为模板
- 在vSphere Web UI中找到关闭的虚拟机
base-template-temp - 右键 → 模板 → 从虚拟机转换为模板
- 点击是确认
现在,你有了一个基础模板,包含所有虚拟机都需要的通用软件。
第四部分:创建专用模板
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模板:
- 从基础模板克隆虚拟机 → 命名为
web-template-temp - 编辑设置 → CD/DVD驱动器 → 选择
cloud-init-web-template.iso - 启动虚拟机,等待1-2分钟
- 验证:
nginx -v和php-fpm --version - SSH进去执行:
sudo cloud-init clean --all && sudo poweroff - 转换为模板 → 命名为
web-template
4.2 DB模板
cd ~/vsphere-cloudinit-work

最低0.47元/天 解锁文章
613

被折叠的 条评论
为什么被折叠?



