跳到主要内容

Proxmox 虚拟化技术方案 - 创建虚拟机

背景

使用api方式管理临时使用的虚拟机

硬件配置

  • CPU: Intel 2676v4
  • 内存: 64G DDR4
  • 硬盘: 1T SSD

目的

  • 将平台虚拟化
  • 提供多套实验环境
  • 快速创建销毁实验环境
  • 体验基础设施即代码 IaaS

主要用到的工具

  • 虚拟化工具: Proxmox VE
  • Terraform: 开源的基础设施即代码工具
  • terraform-provider-proxmox: Terraform Proxmox Provider,通过 Proxmox VE 的 REST API 创建虚拟机

安装 Proxmox 虚拟化工具

  1. 下载 ISO 镜像

    • 从官网下载 ISO 镜像,写入到 U 盘中。macOS 上推荐使用 balenaEtcher 写盘。
    • Windows 下可以使用 Rufus 写盘。
  2. 安装 Proxmox

    • 电脑上插入 U 盘并从 U 盘启动,按照步骤一步步完成设置。
    • 官方的 wiki 安装步骤很详细。

创建 Ubuntu Cloud-Init Template

  1. 下载 Ubuntu 20.04 cloud-init 镜像

    wget -c https://mirror.tuna.tsinghua.edu.cn/ubuntu-cloud-images/focal/20241127/focal-server-cloudimg-amd64.img
  2. 创建虚拟机

    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
  3. 转换成模板

    qm template 9999

创建 Proxmox 用户及 API Token

  1. 创建角色、用户和 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
  2. 获取 token 信息

    pveum user token show terraform-prov@pve terraform-token

使用 Terraform 创建虚拟机

  1. 安装 Terraform

    • macOS/Linux
      brew install terraform
    • Windows
      • 下载 Terraform 安装包并安装。
  2. 创建配置文件 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
    }
  3. 初始化 Terraform

    terraform init
  4. 创建虚拟机

    terraform apply
  5. 销毁虚拟机

    terraform destroy

总结

有了 Terraform 和 Proxmox VE 后,就可以愉快地使用干净的实验环境了。