昨天我們看了如何利用 Terraform 管理容器
今天我們要來看如何利用 Terraform 管理 VM
Terraform 在管理 VM 時,可以利用兩種方式來建立 VM
一種是,讓 VM 在開機時載入 ISO,然後可能用什麼方法讓機器可以自動安裝
而另一種方式是利用 clone VM,而在 clone VM 時還可以使用 cloud-init 來自動建立環境
以下,我們就利用 clone VM + cloud-init 的方式來部署 VM
這樣比較快(
首先,我們要先有一個能使用 cloud-init 的 VM template
如果你不知道該怎麽做的話,麻煩回顧一下以前的文章
我們直接看底下的 Terraform 設定範例
resource "proxmox_vm_qemu" "vm_test" {
name = "vm-test"
desc = "terraform-managed VM"
target_node = "ithelp"
clone = "ubuntu-20-04-cloud-init-template"
os_type = "cloud-init"
cores = 1
sockets = 1
memory = 1024
boot = "c"
bootdisk = "scsi0"
disk {
id = 0
type = "scsi"
storage = "local-lvm"
storage_type = "lvm"
size = "8G"
}
ciuser = "ithelp"
cipassword = "insecurepassword"
ipconfig0 = "ip=dhcp"
}
首先,我們在 clone
的地方定義了要拿哪個 VM template 來 clone
這裡的 value 要是 VM template 的名稱, Terraform 會自己去搜尋這個 template
再來, os_type
的 value 要是 cloud-init
,因為我們利用 cloud-init
來快速設定 VM 環境
boot
的部分,在 Proxmox VE 的選項中, c
代表硬碟, d
代表光碟機, n
代表網路開機,而我們要用硬碟開機,所以我們在 boot
這欄要設定 c
而如果我們想設定依序用光碟機、硬碟、網路開機的話, boot
的值可以填寫 dcn
bootdisk
是指開機硬碟,由於我們的 VM template 製作時,硬碟接口是使用 SCSI,所以我們在這裡要設定 scsi0
接下來 disk
段是用來設定硬碟資訊,我們在這裡可以設定硬碟要儲存到哪,只要照著裡面的數值填寫就好了
再接下來是設定 cloud-init
的部分,我們可以在這裡設定 VM 裡的一些資訊,例如登入設定、 SSH key、網路設定...等等
由於這裡只是最簡單的範例,所以我們填寫了 ciuser
, cipassword
和 ipconfig0
三個選項
填寫完成後,我們一樣執行 terraform plan
確認沒問題後一樣 terraform apply
我們可以在 Proxmox VE 裡看到 VM clone 的訊息
過不久以後就會看到 VM 建立完成,也開機了
登入看看,應該能順利登入
Terraform 和 Proxmox VE 的混合操作先介紹到這裡
我們明天來介紹 Ansible