快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机
作者 | Addo Zhang
來源 | 云原生指北
自從用上 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-tokenid?和?value。
Terraform
有了 token 和 cloud-init 模板后,就是定義虛擬機了。
安裝最新版本的 terraform。
brew?install?terraform在空目錄中創建?ubuntu.tf?文件,并按步驟進行配置:
配置要使用的 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" }配置虛擬機資源
可以參考provider 的配置說明:
resource?"proxmox_vm_qemu"?"proxmox-ubuntu"?{count?=?1name??=?"ubuntu-${count.index?+?1}"desc??=?"Ubuntu?develop?environment"#?節點名target_node?=?"pve"#?cloud-init?templateclone?=?"ubuntu-2004-cloudinit-template"#?關機?guest?agentagent???=?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"#?用戶名和?SSH?keyciuser??=?"addo"sshkeys?=?<<EOFSSH?KEYS?HEREEOF }創建虛擬機
第一次需要先執行?init?命令進行初始化:
terraform?init可以使用?terraform fmt?和?terraform 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 等等。
往期推薦
虛幻引擎5上的《黑客帝國》全新體驗,愛了愛了
Medusa又一個開源的替代品
數字孿生+交通,到底有啥用?
5G專網,路在何方?
點分享
點收藏
點點贊
點在看
總結
以上是生活随笔為你收集整理的快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内含福利|CSDN携手字节跳动:云原生M
- 下一篇: 云原生,智慧营销破圈新利器