快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机
作者 | Addo Zhang
來源 | 云原生指北
自從用上 m1 的電腦,本地開發(fā)環(huán)境偶爾會(huì)遇到兼容性的問題。比如之前嘗試用 Colima 在虛擬機(jī)中運(yùn)行容器運(yùn)行時(shí)和 Kubernetes,其實(shí)際使用的還是 aarch64 虛擬機(jī),實(shí)際使用還是會(huì)有些差異。
手上有臺(tái)之前用的黑蘋果小主機(jī),吃灰?guī)讉€(gè)月了,實(shí)屬浪費(fèi)。
CPU:?Intel?8700?6C12T MEM:?64G?DDR4 DISK:?1T?SSD折騰的目的:
將平臺(tái)虛擬化
提供多套實(shí)驗(yàn)環(huán)境
快速創(chuàng)建銷毀實(shí)驗(yàn)環(huán)境
體驗(yàn)基礎(chǔ)設(shè)施即代碼 IaaS
主要用到的工具:
虛擬化工具?Proxmox VE
Terraform:開源的基礎(chǔ)設(shè)施即代碼工具
terraform-provider-proxmox:Terraform Proxmox Provider,通過 Proxmox VE 的 REST API 在創(chuàng)建虛擬機(jī)。
安裝 Proxmox 虛擬化工具
從官網(wǎng)?下載 ISO 鏡像,寫入到 U 盤中。macOS上推薦使用 balenaEtcher 寫盤。
電腦上插入 U 盤并從 U 盤啟動(dòng),按照步驟一步步完成設(shè)置。
官方的 wiki 安裝步驟很詳細(xì)。
安裝完成之后就可以創(chuàng)建虛擬機(jī)了,可以用命令行?qm create?或者?https://localhost:8006?Web UI來創(chuàng)建。
這樣畢竟還是有點(diǎn)麻煩,每次都要執(zhí)行很多操作。雖說可以編寫腳本,但是通用型不夠好。因此我們選擇 Terraform,實(shí)現(xiàn)基礎(chǔ)設(shè)施即代碼。
創(chuàng)建 Ubuntu Cloud-Init Template
這里選用 Cloud-Init 的方式,從 cloud-init template 來克隆虛擬機(jī)。cloud-init 的虛擬機(jī)可以完成一些高級(jí)定制的初始化工作,有興趣的參考 Cloud Init 文檔。
登陸到 Proxmox VE 宿主機(jī),使用 Ubuntu 20.04 cloud init image 來創(chuàng)建模板,從官網(wǎng)下載:
wget?https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img執(zhí)行下面的命令創(chuàng)建一個(gè)虛擬機(jī):
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將剛創(chuàng)建好的虛擬機(jī)轉(zhuǎn)換成模板:
qm?template?9000模板與普通的虛擬機(jī)會(huì)有些許的不同,使用模板我們可以快速創(chuàng)建虛擬機(jī)。這里我們不會(huì)用 UI來創(chuàng)建。
創(chuàng)建 Proxmox 用戶及 API Token
使用 Proxmox VE 的 REST API 需要權(quán)限校驗(yàn),有用戶名密碼或者 API Token 兩種方式。我們選用后者,登陸到 Proxmox 宿主機(jī),執(zhí)行如下命令創(chuàng)建角色、用戶以及 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?│ └──────────────┴──────────────────────────────────────┘這里我們會(huì)用到 token 的full-tokenid?和?value。
Terraform
有了 token 和 cloud-init 模板后,就是定義虛擬機(jī)了。
安裝最新版本的 terraform。
brew?install?terraform在空目錄中創(chuàng)建?ubuntu.tf?文件,并按步驟進(jìn)行配置:
配置要使用的 provider:
terraform?{required_providers?{proxmox?=?{source?=?"telmate/proxmox"}} }配置 provider
需要提供?pm_api_url、pm_api_token_id?和?pm_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" }配置虛擬機(jī)資源
可以參考provider 的配置說明:
resource?"proxmox_vm_qemu"?"proxmox-ubuntu"?{count?=?1name??=?"ubuntu-${count.index?+?1}"desc??=?"Ubuntu?develop?environment"#?節(jié)點(diǎn)名target_node?=?"pve"#?cloud-init?templateclone?=?"ubuntu-2004-cloudinit-template"#?關(guān)機(jī)?guest?agentagent???=?0os_type?=?"ubuntu"onboot??=?true#?CPUcores????=?4sockets??=?1cpu??????=?"host"#?內(nèi)存memory???=?16384scsihw???=?"virtio-scsi-pci"bootdisk?=?"scsi0"#?硬盤設(shè)置,因計(jì)算的方式?101580M?代替?100Gdisk?{slot?????=?0size?????=?"101580M"type?????=?"scsi"storage??=?"local-lvm"iothread?=?1}#?網(wǎng)絡(luò)network?{model??=?"virtio"bridge?=?"vmbr0"}lifecycle?{ignore_changes?=?[network,]}#?記住這里要使用IP CIDR。因?yàn)橹粍?chuàng)建一個(gè)虛擬機(jī),虛擬機(jī)的 IP 是 192.168.1.91。如果要?jiǎng)?chuàng)建多個(gè)虛擬機(jī)的話,IP 將會(huì)是 .91、.92、.93 。ipconfig0?=?"ip=192.168.1.9${count.index?+?1}/24,gw=192.168.1.2"#?用戶名和?SSH?keyciuser??=?"addo"sshkeys?=?<<EOFSSH?KEYS?HEREEOF }創(chuàng)建虛擬機(jī)
第一次需要先執(zhí)行?init?命令進(jìn)行初始化:
terraform?init可以使用?terraform fmt?和?terraform validate?對(duì)配置文件進(jìn)行格式化和校驗(yàn)。
然后執(zhí)行?terraform apply?并輸入?yes?開始創(chuàng)建虛擬機(jī)
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]這樣虛擬機(jī)就創(chuàng)建成功了,使用前面配置的私鑰和 IP 地址就可以 ssh 到虛擬機(jī)中。
銷毀虛擬機(jī)
虛擬機(jī)的銷毀也很簡單,執(zhí)行?terraform destory?并輸入?yes?即可。
總結(jié)
有了 Terraform 和 Proxmox VE 后,就可以愉快的使用干凈的實(shí)驗(yàn)環(huán)境了。但是干凈到一些開發(fā)中常用軟件都沒有,使用起來也不方便。
后續(xù)考慮通過 cloud-init 來對(duì)虛擬機(jī)進(jìn)行高級(jí)定制,比如容器環(huán)境和 K3s 等等。
往期推薦
虛幻引擎5上的《黑客帝國》全新體驗(yàn),愛了愛了
Medusa又一個(gè)開源的替代品
數(shù)字孿生+交通,到底有啥用?
5G專網(wǎng),路在何方?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看
總結(jié)
以上是生活随笔為你收集整理的快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内含福利|CSDN携手字节跳动:云原生M
- 下一篇: 云原生,智慧营销破圈新利器