🛠️ Proxmox VE 自動化:CLI + API + Ansible 完整指南(進階篇)
Proxmox VE(PVE)是目前最成熟的開源虛擬化平台之一,內建 KVM + LXC、ZFS、叢集 HA、高彈性 API 與完善 CLI 工具,因此非常適合將日常管理流程自動化。本篇將以進階技術角度,整合:
- 🔹 PVE CLI 自動化管理
- 🔹 PVE REST API(Token 方式登入)
- 🔹 Ansible 自動化部署 PVE / VM / LXC
- 🔹 實際自動化案例與腳本範本
讓你從日常管理到大規模佈署,都能更快、更準確、更標準化。
📌 第一章:Proxmox VE CLI 進階自動化
PVE CLI(pvesh / qm / pct)是最快、最穩定的自動化工具,以下整理最常使用的命令與案例。
1.1 檢視與管理 VM
# 查看所有 VM
qm list
# 啟動與停止 VM
qm start 101
qm shutdown 101
# 建立 VM(快速範本)
qm create 9000 --name ubuntu-tpl --memory 2048 --cores 2
1.2 匯入 OVF / VMDK
# 匯入 OVF
qm importovf 105 vm.ovf local-lvm
# 匯入 VMDK(會轉成 RAW 或 QCOW2)
qm importdisk 105 disk.vmdk local-lvm
qm set 105 --scsi0 local-lvm:105/vm-105-disk-0.raw
1.3 LXC 容器自動化
# 建立 LXC
pct create 300 local:vztmpl/ubuntu-22.04-standard.tar.gz \
--hostname test-lxc --cores 2 --memory 2048
# 啟動
pct start 300
📌 第二章:Proxmox VE REST API(Token)
PVE REST API 幾乎覆蓋所有功能。本章示範以 Token 方式登入(更安全、適合作業自動化)。
2.1 建立 API Token
位置:Datacenter → Permissions → API Tokens → Add
User: root@pam
Token ID: ansible
Privilege: Administrator(或依需求)
Expire:(可選)
完成後會取得:
- Token ID
- Secret(只會顯示一次)
2.2 使用 curl 呼叫 API
API_URL="https://pve1:8006/api2/json"
TOKEN="root@pam!ansible=yourtoken"
SECRET="yoursecret"
curl -k -H "Authorization: PVEAPIToken=$TOKEN=$SECRET" \
"$API_URL/nodes/pve1/qemu"
2.3 Python 操作 API
import requests
url = "https://pve1:8006/api2/json/nodes/pve1/qemu"
headers = {
"Authorization": "PVEAPIToken=root@pam!ansible=YOURSECRET"
}
resp = requests.get(url, headers=headers, verify=False)
print(resp.json())
📌 第三章:使用 Ansible 自動化管理 Proxmox
Ansible 是管理 PVE 大規模環境的首選。本章提供完整目錄結構、inventory、以及 playbook 範例。
3.1 Inventory 範例
[pve]
pve1 ansible_host=192.168.10.11
pve2 ansible_host=192.168.10.12
[pve:vars]
ansible_user=root
ansible_ssh_private_key_file=~/.ssh/id_rsa
3.2 使用 Ansible 建立 VM
- name: Create VM
hosts: pve
tasks:
- name: Create VM via API
uri:
url: "https://{{ inventory_hostname }}:8006/api2/json/nodes/{{ inventory_hostname }}/qemu"
method: POST
validate_certs: no
headers:
Authorization: "PVEAPIToken={{ pve_token }}"
body_format: json
body:
vmid: 200
name: ansible-vm
memory: 2048
3.3 使用 Ansible 建立 LXC 容器
- name: Create LXC container
hosts: pve
tasks:
- uri:
url: "https://{{ inventory_hostname }}:8006/api2/json/nodes/{{ inventory_hostname }}/lxc"
method: POST
validate_certs: no
headers:
Authorization: "PVEAPIToken={{ pve_token }}"
body_format: json
body:
vmid: 310
hostname: web01
ostemplate: "local:vztmpl/ubuntu-22.04.tar.gz"
cores: 2
memory: 2048
📌 第四章:常見自動化場景與最佳實務
4.1 建立標準化 VM 模板庫
- VM 標準化:CPU/Memory/網卡模型/磁碟類型
- 安裝 cloud-init 支援
- 建立 golden image(Ubuntu / Rocky / Debian)
4.2 自動備份與輪替
# 每天 02:00 備份所有 VM
pvesh create /nodes/pve1/vzdump --all 1 --mode snapshot --compress zstd
4.3 節點健康檢查(以腳本替代 GUI)
pvesh get /nodes/pve1/status
pvesh get /cluster/resources
📌 第五章:完整自動化專案範例
📁 專案結構:
proxmox-automation/
├── ansible/
│ ├── inventory
│ ├── pve-create-vm.yml
│ ├── pve-create-lxc.yml
│ └── pve-health-check.yml
├── scripts/
│ ├── backup-all.sh
│ ├── import-ovf.sh
│ └── template-build.sh
└── api/
└── python-demo.py
這類專案可直接上 GitHub,讓多人協作 PVE 管理。
📌 結語
Proxmox VE 已經不只是虛擬化平台,更是能與 DevOps、CI/CD、配置管理系統整合的完整生態。透過 CLI、REST API 與 Ansible,你可以將整個環境自動化、標準化、模組化,大幅降低人工操作錯誤,並提升部署速度。
未來也會推出「Proxmox VE 大規模佈署與高可用架構(Enterprise 版)」作為本篇的延伸內容。
沒有留言: