# Proxmox IaC 解決方案


# 前言 IaC


# 實作


# Proxmox 開啟 API Token

Datacenter > 權限 > API 權杖 > 增加

選擇綁定帳號與期限與權杖名稱

image

把她存起來


# Proxmox 安裝 Terraform

在 Proxmox 主機

1
2
3
4
5
6
7
8
9
10
# 其他基本依賴套件
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
# 安裝 GPG Key
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null
# 驗證 fingerprint
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint # 這裡會 Show 出來

image

1
2
3
4
5
6
7
8
9
10
11
# 新增 Terraform Repository
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
# 更新
sudo apt update
# 安裝 Terraform
sudo apt-get install terraform
# 看看 Terraform 安裝成功沒
terraform -help


# Optional - 啟用 tab-completetion

1
2
touch ~/.bashrc
terraform -install-autocomplete

# 建立第一個 虛擬機 Iac


# 建立專案資料夾

1
2
mkdir iac
cd iac

# 建立 Ubuntu 虛擬機 terraform template

1
touch ubuntu.tf

內容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 使用的 Provider 設定
terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
}
}
}

# Provider 的配置
provider "proxmox" {
pm_tls_insecure = true # 啟用不安全的 TLS 通訊
pm_api_url = "https://XX.XX.XX.XX:8006/api2/json" # Proxmox API 的 URL
pm_api_token_id = "剛剛在 PVE 介面建立的 Token id" # 用於驗證的 Token ID
pm_api_token_secret = "剛剛在 PVE 介面建立的 Token Secret" # 用於驗證的 Token Secret
}

# 虛擬機資源的配置
resource "proxmox_vm_qemu" "proxmox-ubuntu" {
count = 1 # 創建的虛擬機數量
name = "ubuntu-${count.index + 1}" # 虛擬機的名稱
desc = "Ubuntu 開發環境" # 虛擬機的描述

target_node = "pve" # 虛擬機部署的目標節點

clone = "ubuntu-2004-cloudinit-template" # 從哪個模板克隆虛擬機

agent = 0 # 是否啟用客戶端代理
os_type = "ubuntu" # 虛擬機的操作系統類型
onboot = true # 是否開機自動啟動虛擬機

# CPU 設定
cores = 4 # 虛擬機的核心數量
sockets = 1 # 虛擬機的插槽數量
cpu = "host" # 虛擬機的 CPU 型號

# 記憶體設定
memory = 16384 # 虛擬機的記憶體大小(MB)
scsihw = "virtio-scsi-pci" # 虛擬機的 SCSI 硬件類型

# 開機硬碟設定
bootdisk = "scsi0" # 開機時使用的硬碟

# 硬碟設定
disk {
slot = 0 # 硬碟的插槽位置
size = "200G" # 硬碟的大小
type = "scsi" # 硬碟的類型
storage = "local-lvm" # 儲存池名稱
iothread = 1 # 是否使用 I/O 線程
}

# 網路設定
network {
model = "virtio" # 網路卡的模式
bridge = "vmbr1" # 網路橋接的名稱
}

lifecycle {
ignore_changes = [
network,
] # 忽略變更的項目列表
}

# 用戶名和 SSH 鍵設定
ciuser = "test" # 用戶名
sshkeys = <<EOF
SSH KEYS HERE # 在這裡添加你的 SSH 鍵內容
EOF
}

# Terraform 起飛

1
2
3
4
5
6
7
8
terraform init #初始化
terraform fmt # 格式化
terraform validate # 驗證
# 如果上面都通過
terraform apply # yes
# 如果想要銷毀
terraform destroy


# Reference

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