700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

时间:2019-04-01 05:23:23

相关推荐

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

作者 | Addo Zhang

来源 | 云原生指北

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

手上有台之前用的黑苹果小主机,吃灰几个月了,实属浪费。

CPU:Intel87006C12TMEM:64GDDR4DISK:1TSSD

折腾的目的:

将平台虚拟化

提供多套实验环境

快速创建销毁实验环境

体验基础设施即代码 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:8006Web UI来创建。

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

创建 Ubuntu Cloud-Init Template

这里选用 Cloud-Init 的方式,从 cloud-init template 来克隆虚拟机。cloud-init 的虚拟机可以完成一些高级定制的初始化工作,有兴趣的参考 Cloud Init 文档。

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

wgethttps://cloud-/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img

执行下面的命令创建一个虚拟机:

qmcreate9000--name"ubuntu--cloudinit-template"--memory1024--cores1--net0virtio,bridge=vmbr0qmimportdisk9000ubuntu-20.04-server-cloudimg-amd64.imglocal-lvmqmset9000--scsihwvirtio-scsi-pci--scsi0local-lvm:vm-9000-disk-0qmset9000--bootc--bootdiskscsi0qmset9000--ide2local-lvm:cloudinitqmset9000--serial0socket--vgaserial0qmset9000--agentenabled=1

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

qmtemplate9000

模板与普通的虚拟机会有些许的不同,使用模板我们可以快速创建虚拟机。这里我们不会用 UI来创建。

创建 Proxmox 用户及 API Token

使用 Proxmox VE 的 REST API 需要权限校验,有用户名密码或者 API Token 两种方式。我们选用后者,登陆到 Proxmox 宿主机,执行如下命令创建角色、用户以及 API Token:

pveumroleaddTerraformProv-privs"VM.AllocateVM.CloneVM.Config.CDROMVM.Config.CPUVM.Config.CloudinitVM.Config.DiskVM.Config.HWTypeVM.Config.workVM.Config.OptionsVM.MonitorVM.AuditVM.PowerMgmtDatastore.AllocateSpaceDatastore.Audit"pveumuseraddterraform-prov@pvepveumaclmod/-userterraform-prov@pve-roleTerraformProvpveumusertokenaddterraform-prov@pveterraform-token--privsep=0┌──────────────┬──────────────────────────────────────┐│key│value│╞══════════════╪══════════════════════════════════════╡│full-tokenid│terraform-prov@pve!terraform-token│├──────────────┼──────────────────────────────────────┤│info│{"privsep":"0"}│├──────────────┼──────────────────────────────────────┤│value│9748c040-a283-4c72-a48b-9ce784778eed│└──────────────┴──────────────────────────────────────┘

这里我们会用到 token 的full-tokenid和value。

Terraform

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

安装最新版本的 terraform。

brewinstallterraform

在空目录中创建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=truepm_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=1name="ubuntu-${count.index+1}"desc="Ubuntudevelopenvironment"#节点名target_node="pve"#cloud-inittemplateclone="ubuntu--cloudinit-template"#关机guestagentagent=0os_type="ubuntu"onboot=true#CPUcores=4sockets=1cpu="host"#内存memory=16384scsihw="virtio-scsi-pci"bootdisk="scsi0"#硬盘设置,因计算的方式101580M代替100Gdisk{slot=0size="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"#用户名和SSHkeyciuser="addo"sshkeys=<<EOFSSHKEYSHEREEOF}

创建虚拟机

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

terraforminit

可以使用terraform fmtterraform validate对配置文件进行格式化和校验。

然后执行terraform apply并输入yes开始创建虚拟机

proxmox_vm_qemu.proxmox-ubuntu[0]:Creating...proxmox_vm_qemu.proxmox-ubuntu[0]:Stillcreating...[10selapsed]proxmox_vm_qemu.proxmox-ubuntu[0]:Stillcreating...[20selapsed]proxmox_vm_qemu.proxmox-ubuntu[0]:Stillcreating...[30selapsed]proxmox_vm_qemu.proxmox-ubuntu[0]:Stillcreating...[40selapsed]proxmox_vm_qemu.proxmox-ubuntu[0]:Creationcompleteafter42s[id=pve/qemu/100]

这样虚拟机就创建成功了,使用前面配置的私钥和 IP 地址就可以 ssh 到虚拟机中。

销毁虚拟机

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

总结

有了 Terraform 和 Proxmox VE 后,就可以愉快的使用干净的实验环境了。但是干净到一些开发中常用软件都没有,使用起来也不方便。

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

往期推荐

虚幻引擎5上的《黑客帝国》全新体验,爱了爱了

Medusa又一个开源的替代品

数字孪生+交通,到底有啥用?

5G专网,路在何方?

点分享

点收藏

点点赞

点在看

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。