关于云计算:快速搭建实验环境使用-Terraform-部署-Proxmox-虚拟机

3次阅读

共计 4047 个字符,预计需要花费 11 分钟才能阅读完成。

自从用上 m1 的电脑,本地开发环境偶然会遇到兼容性的问题。比方之前尝试用 Colima 在虚拟机中运行容器运行时和 Kubernetes,其理论应用的还是 aarch64 虚拟机,理论应用还是会有些差别。

手上有台之前用的黑苹果小主机,吃灰几个月了,实属节约。正好元旦假期,有工夫折腾一下。

CPU: Intel 8700 6C12T
MEM: 64G DDR4
DISK: 1T SSD

折腾的目标:

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

次要用到的工具:

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

装置 Proxmox 虚拟化工具

从官网 下载 ISO 镜像,写入到 U 盘中。macOS 上举荐应用 balenaEtcher 写盘。

电脑上插入 U 盘并从 U 盘启动,依照步骤一步步实现设置。

官网的 wiki 装置步骤很具体。

装置实现之后就能够创立虚拟机了,能够用命令行 qm create 或者 https://localhost:8006 Web UI 来创立。

这样毕竟还是有点麻烦,每次都要执行很多操作。虽说能够编写脚本,然而通用型不够好。因而咱们抉择 Terraform,实现基础设施即代码。

创立 Ubuntu Cloud-Init Template

这里选用 Cloud-Init 的形式,从 cloud-init template 来克隆虚拟机。cloud-init 的虚拟机能够实现一些高级定制的初始化工作,有趣味的参考 Cloud Init 文档。

登陆到 Proxmox VE 宿主机,应用 Ubuntu 20.04 cloud init image 来创立模板,从官网下载:

wget https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img

执行上面的命令创立一个虚拟机:

qm create 9000 --name "ubuntu-2004-cloudinit-template" --memory 1024 --cores 1 --net0 virtio,bridge=vmbr0
qm importdisk 9000 ubuntu-20.04-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1

将刚创立好的虚拟机转换成模板:

qm template 9000

模板与一般的虚构机会有些许的不同,应用模板咱们能够疾速创立虚拟机。这里咱们不会用 UI 来创立。

创立 Proxmox 用户及 API Token

应用 Proxmox VE 的 REST API 须要权限校验,有用户名明码或者 API Token 两种形式。咱们选用后者,登陆到 Proxmox 宿主机,执行如下命令创立角色、用户以及 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

┌──────────────┬──────────────────────────────────────┐
│ key          │ value                                │
╞══════════════╪══════════════════════════════════════╡
│ full-tokenid │ terraform-prov@pve!terraform-token   │
├──────────────┼──────────────────────────────────────┤
│ info         │ {"privsep":"0"}                      │
├──────────────┼──────────────────────────────────────┤
│ value        │ 9748c040-a283-4c72-a48b-9ce784778eed │
└──────────────┴──────────────────────────────────────┘

这里咱们会用到 token 的full-tokenidvalue

Terraform

有了 token 和 cloud-init 模板后,就是定义虚拟机了。

装置最新版本的 terraform。

brew install terraform

在空目录中创立 ubuntu.tf 文件,并按步骤进行配置:

配置要应用的 provider:

terraform {
  required_providers {
    proxmox = {source = "telmate/proxmox"}
  }
}

配置 provider

须要提供 pm_api_urlpm_api_token_idpm_api_token_secret

provider "proxmox" {
  pm_tls_insecure     = true
  pm_api_url          = "https://192.168.1.4:8006/api2/json"
  pm_api_token_id     = "terraform-prov@pve!terraform-token"
  pm_api_token_secret = "9748c040-a283-4c72-a48b-9ce784778eed"
}

配置虚拟机资源

能够参考 provider 的配置阐明:

resource "proxmox_vm_qemu" "proxmox-ubuntu" {
  count = 1
  name  = "ubuntu-${count.index + 1}"
  desc  = "Ubuntu develop environment"

  # 节点名
  target_node = "pve"

  # cloud-init template
  clone = "ubuntu-2004-cloudinit-template"

  # 关机 guest agent
  agent   = 0
  os_type = "ubuntu"
  onboot  = true
  # CPU
  cores    = 4
  sockets  = 1
  cpu      = "host"
  # 内存
  memory   = 16384
  scsihw   = "virtio-scsi-pci"
  bootdisk = "scsi0"

  # 硬盘设置,因计算的形式 101580M 代替 100G
  disk {
    slot     = 0
    size     = "101580M"
    type     = "scsi"
    storage  = "local-lvm"
    iothread = 1
  }

  # 网络
  network {
    model  = "virtio"
    bridge = "vmbr0"
  }

  lifecycle {
    ignore_changes = [network,]
  }
  # 记住这里要应用 IP CIDR。因为只创立一个虚拟机,虚拟机的 IP 是 192.168.1.91。如果要创立多个虚拟机的话,IP 将会是 .91、.92、.93。ipconfig0 = "ip=192.168.1.9${count.index + 1}/24,gw=192.168.1.2"

  # 用户名和 SSH key
  ciuser  = "addo"
  sshkeys = <<EOF
  SSH KEYS HERE
  EOF
}

创立虚拟机

第一次须要先执行 init 命令进行初始化:

terraform init

能够应用 terraform fmtterraform validate 对配置文件进行格式化和校验。

而后执行 terraform apply 并输出 yes 开始创立虚拟机,

proxmox_vm_qemu.proxmox-ubuntu[0]: Creating...
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [10s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [20s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [30s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Still creating... [40s elapsed]
proxmox_vm_qemu.proxmox-ubuntu[0]: Creation complete after 42s [id=pve/qemu/100]

这样虚拟机就创立胜利了,应用后面配置的私钥和 IP 地址就能够 ssh 到虚拟机中。

销毁虚拟机

虚拟机的销毁也很简略,执行 terraform destory 并输出 yes 即可。

总结

有了 Terraform 和 Proxmox VE 后,就能够欢快的应用洁净的试验环境了。然而洁净到一些开发中常用软件都没有,应用起来也不不便。

后续思考通过 cloud-init 来对虚拟机进行高级定制,比方容器环境和 K3s 等等。

文章对立公布在公众号 云原生指北

正文完
 0