使用Cloud-Init在PVE中批量部署虚拟机
在虚拟化环境中,自动化配置虚拟机(VM)是提高效率的关键。Proxmox VE(PVE)是一款流行的开源虚拟化平台,而Cloud-Init是一种用于初始化云实例的工具。结合PVE和Cloud-Init,我们可以快速创建和配置虚拟机镜像。本教程将详细介绍如何在PVE上利用Cloud-Init构造自己的镜像
Cloud-Init简介
什么是 Cloud-Init?
Cloud-Init 是一个用于初始化云实例的开源工具。它被广泛应用于各种云计算平台,如Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、OpenStack等。Cloud-Init允许在实例首次启动时,自动化执行各种配置任务,如设置主机名、用户和组、安装软件包、配置网络等。
Cloud-Init 的工作原理
Cloud-Init在实例的首次启动时运行,并根据用户提供的元数据和用户数据执行配置。这些数据通常以YAML格式提供,可以包含以下几类信息:
Meta-data(元数据):描述实例的基本信息,如实例ID、主机名等。
User-data(用户数据):定义实例启动时要执行的具体配置和脚本。
前提条件
一台运行Proxmox VE的服务器
基本的Linux命令行操作知识
官方镜像下载
cloud images下载地址
centos:
http://cloud.centos.org/centos/
ubuntu:
http://cloud-images.ubuntu.com/releases/
debian:
https://cloud.debian.org/images/cloud/OpenStack/
fedora:
https://alt.fedoraproject.org/cloud/
rehat7:
https://access.redhat.com/downloads/content/69/ver=/rhel---7/x86_64/product-downloads
opensuse:
https://software.opensuse.org/distributions/leap#JeOS-ports
构造镜像模板
在本教程中,我们将使用Centos镜像作为示例 :
先从官方下载Centos的云镜像。执行如下命令:
wwget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2211.qcow2
使用下面的命令创建虚拟机:
VM_ID=999
qm create $VM_ID --cores 4 --memory 4096 --name Temp-Centos7 --net0 virtio,bridge=vmbr0
给虚拟机导入镜像
qm importdisk $VM_ID CentOS-7-x86_64-GenericCloud-2211.qcow2 local-lvm
挂载创建好的硬盘到虚拟机
qm set $VM_ID --sata0 local-lvm:vm-$VM_ID-disk-0
创建cloudinit
qm set $VM_ID --sata1 local-lvm:cloudinit
设置默认启动项
qm set $VM_ID --boot c --bootdisk sata0
设置用户名和密码
qm set $VM_ID --ciuser root --cipassword 123123
配置网络
qm set $VM_ID --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1,ip6=dhcp #静态配置
qm set $VM_ID --ipconfig0 ip=dhcp,ip6=dhcp #动态配置
启动虚拟机
qm start $VM_ID
修改Cloud-init的配置
开启PasswordAuthentication认证,编辑/etc/cloud/cloud.cfg这个文件,添加
ssh_pwauth:true
所有配置完成后,清除历史命令并关机
history -c && init 0
把该虚拟机转成模板
qm template $VM_ID
使用脚本批量创建虚拟机
批量创建需求如下:
利用虚拟机模板 999,批量创建 3 个虚拟机
新建的虚拟机 ID 为 20x,虚拟机名称为 demo-vmx
指定存储名称为 local
每个虚拟机 2 插槽 2 核心即 4 线程,内存 4G
每个虚拟机添加一块 50G 的数据盘
每个虚拟机添加一个内网网卡,即网络设备 (net0),网卡 IP 为 192.168.31.24x,网关为 192.168.31.254
设置系统 root 用户的密码为 password
脚本如下
for id in $(seq 1 1 3)
do
qm clone 999 24${id} --name demo-vm${id} -full true -storage local
qm set 24${id} --sockets 2 --cores 2 --memory 4096
qm set 24${id} --scsi1 iothread=1,local:100
qm set 24${id} --nameserver 114.114.114.114 --ipconfig1 ip=192.168.31.24${id}/24,gw=192.168.31.254 --ciuser root --cipassword password
qm start 24${id}
done