Proxmox API 자동화

Proxmox를 클릭 운영에서 선언적/자동화 운영으로 옮기기 위한 기준.


Proxmox를 클릭 운영에서 선언적/자동화 운영으로 옮기기 위한 기준.

자동화 대상

반복되는 작업은 자동화 후보가 된다.

  • VM 템플릿 생성
  • VM clone
  • Cloud-Init 설정
  • 백업 job 확인
  • 리소스 사용량 조회
  • 사용자/API token 관리
  • Terraform으로 VM 선언
  • Ansible로 VM 내부 설정

자동화 도구별 역할

도구역할
qm/pct단일 노드 CLI 작업
pveshProxmox API 직접 호출
TerraformVM/LXC 인프라 선언
Ansibleguest OS 설정 관리
PackerVM template 이미지 빌드
API Token비밀번호 없는 자동화 인증

API Token

자동화에는 개인 비밀번호보다 API token을 쓴다.

원칙:

  • 용도별 token 분리
  • 최소 권한 부여
  • 만료/회전 정책
  • 토큰 값은 vault나 환경변수에 저장
  • Git에 커밋 금지

웹 UI 경로:

Datacenter > Permissions > API Tokens

pvesh

pvesh는 Proxmox API를 CLI에서 호출하는 도구다.

# 노드 목록
pvesh get /nodes

# 특정 노드의 VM 목록
pvesh get /nodes/<node>/qemu

# 작업 목록
pvesh get /cluster/tasks

API 경로를 익히면 웹 UI가 내부에서 어떤 작업을 하는지 이해하기 좋다.

qm/pct 자동화

VM:

qm clone 9000 101 --name app-01 --full
qm set 101 --memory 4096 --cores 2
qm set 101 --ipconfig0 ip=192.168.20.101/24,gw=192.168.20.1
qm start 101

LXC:

pct create 201 local:vztmpl/debian-template.tar.zst \
  --hostname svc-01 \
  --storage local-zfs \
  --rootfs local-zfs:8 \
  --memory 512 \
  --cores 1 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp

반복 스크립트는 idempotent하게 만들기 어렵다. 그래서 장기적으로는 Terraform/Ansible이 더 낫다.

Terraform

Terraform은 “VM이 어떤 상태여야 하는지”를 코드로 적는 데 좋다.

관리 대상:

  • VM clone
  • CPU/Memory/Disk
  • Network
  • Cloud-Init
  • tags/description

주의:

  • provider 버전 관리
  • state 파일 보호
  • VM 수동 변경과 drift
  • API token 권한
  • destroy 명령 위험

[!warning] Terraform 주의 Proxmox VM을 Terraform으로 관리할 때 destroy는 실제 VM 삭제로 이어질 수 있다. state와 plan을 반드시 확인한다.

Ansible

Ansible은 VM 생성 후 OS 내부 설정에 적합하다.

예:

  • 패키지 설치
  • 사용자 생성
  • SSH 설정
  • Docker/containerd 설치
  • kubeadm 준비
  • 모니터링 agent 설치

Proxmox API로 VM을 만들고, Ansible로 내부를 설정하는 조합이 자연스럽다.

자동화 흐름 예시

flowchart LR
    A["Cloud image"] --> B["Proxmox Template"]
    B --> C["Terraform Clone"]
    C --> D["Cloud-Init"]
    D --> E["Ansible Configure"]
    E --> F["Service Ready"]

운영 기준

  • 수동으로 만든 VM과 자동화 VM을 구분
  • VMID 규칙 정하기
  • 이름 규칙 정하기
  • Terraform state 백업
  • API token 최소 권한
  • 자동화 변경은 Git으로 리뷰
  • 삭제 작업은 별도 확인 절차

VMID 예시:

100-199: 인프라 VM
200-299: LXC 서비스
300-399: Kubernetes 노드
9000-9099: 템플릿

관련 노트

  • 상위: 00-MOC-Proxmox
  • VM: 02-03-Proxmox-VM-관리
  • LXC: 02-04-Proxmox-LXC-컨테이너
  • Terraform: 01-05-인프라코드-Terraform
  • Ansible: 02-03-Ansible-자동화