Proxmox 虚拟化技术方案 - 创建虚拟机
背景
使用api方式管理临时使用的虚拟机
硬件配置
- CPU: Intel 2676v4
- 内存: 64G DDR4
- 硬盘: 1T SSD
目的
- 将平台虚拟化
- 提供多套实验环境
- 快速创建销毁实验环境
- 体验基础设施即代码 IaaS
主要用到的工具
- 虚拟化工具: Proxmox VE
- Terraform: 开源的基础设施即代码工具
- terraform-provider-proxmox: Terraform Proxmox Provider,通过 Proxmox VE 的 REST API 创建虚拟机
安装 Proxmox 虚拟化工具
-
下载 ISO 镜像
- 从官网下载 ISO 镜像,写入到 U 盘中。macOS 上推荐使用 balenaEtcher 写盘。
- Windows 下可以使用 Rufus 写盘。
-
安装 Proxmox
- 电脑上插入 U 盘并从 U 盘启动,按照步骤一步步完成设置。
- 官方的 wiki 安装步骤很详细。
创建 Ubuntu Cloud-Init Template
-
下载 Ubuntu 20.04 cloud-init 镜像
wget -c https://mirror.tuna.tsinghua.edu.cn/ubuntu-cloud-images/focal/20241127/focal-server-cloudimg-amd64.img
-
创建虚拟机
qm create 9999 --name "ubuntu-2004-cloudinit-template" --memory 1024 --cores 1 --net0 virtio,bridge=vmbr0
qm importdisk 9999 ubuntu-20.04-server-cloudimg-amd64.img local-lvm
qm set 9999 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9999-disk-0
qm set 9999 --boot c --bootdisk scsi0
qm set 9999 --ide2 local-lvm:cloudinit
qm set 9999 --serial0 socket --vga serial0
qm set 9999 --agent enabled=1 -
转换成模板
qm template 9999
创建 Proxmox 用户及 API Token
-
创建角色、用户和 API Token
pveum role add TerraformProv -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Monitor VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.Audit"
pveum user add terraform-prov@pve
pveum aclmod / -user terraform-prov@pve -role TerraformProv
pveum user token add terraform-prov@pve terraform-token --privsep=0 -
获取 token 信息
pveum user token show terraform-prov@pve terraform-token
使用 Terraform 创建虚拟机
-
安装 Terraform
- macOS/Linux
brew install terraform
- Windows
- 下载 Terraform 安装包并安装。
- macOS/Linux
-
创建配置文件
ubuntu.tf
terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
}
}
}
provider "proxmox" {
pm_tls_insecure = true
pm_api_url = "https://192.168.1.253:8006/api2/json"
pm_api_token_id = "terraform-prov@pve!terraform-token"
pm_api_token_secret = "9748c040-a283-4c72-a48b-9ce784778eed"
}
resource "proxmox_vm_qemu" "proxmox-ubuntu" {
count = 1
name = "ubuntu-${count.index + 1}"
desc = "Ubuntu develop environment"
target_node = "pve"
clone = "ubuntu-2004-cloudinit-template"
agent = 0
os_type = "ubuntu"
onboot = true
cores = 4
sockets = 1
cpu = "host"
memory = 16384
scsihw = "virtio-scsi-pci"
bootdisk = "scsi0"
disk {
slot = 0
size = "101580M"
type = "scsi"
storage = "local-lvm"
iothread = 1
}
network {
model = "virtio"
bridge = "vmbr0"
}
lifecycle {
ignore_changes = [
network,
]
}
ipconfig0 = "ip=192.168.1.1${count.index + 1}/24,gw=192.168.1.254"
ciuser = "addo"
sshkeys = <<EOF
SSH KEYS HERE
EOF
} -
初始化 Terraform
terraform init
-
创建虚拟机
terraform apply
-
销毁虚拟机
terraform destroy
总结
有了 Terraform 和 Proxmox VE 后,就可以愉快地使用干净的实验环境了。