[본투비엔지니어] 나에게 베어본만 주어진다면?? (5)

2026. 1. 28. 22:24·project/본투비엔지니어

지난 글에서 Proxmox VE 환경 구축을 완료했습니다. 이제 이 위에 가상머신(VM)을 생성할 차례입니다.

일반적으로 VM을 생성한다고 하면 Ubuntu ISO 파일을 다운로드하여 가상 CD-ROM에 넣고, 설치 화면(GUI)을 보며 언어, 시간대, 파티션을 일일이 클릭하는 과정을 떠올립니다. 하지만 이 방식은 IaC(Infrastructure as Code) 철학과 맞지 않습니다.

 

Terraform 코드를 실행할 때마다 사람이 개입하여 설치 과정을 진행할 수는 없기 때문입니다. 자동화를 위해서는 이미 OS 설치가 완료된 상태에서, 부팅 시점에 IP와 SSH 키만 주입받아 즉시 구동되는 이미지(Image) 방식이 필요합니다.

 

1. Cloud-init

Cloud-Init은 클라우드 인스턴스의 초기 설정을 자동화하는 표준 패키지입니다. AWS EC2나 Azure 같은 퍼블릭 클라우드에서 인스턴스를 생성하자마자 바로 접속이 가능한 이유가 바로 이 기술 덕분입니다.

 

Proxmox에서도 Cloud-Init 이미지를 템플릿(Template)으로 만들어두면, Terraform을 통해 수십 대의 VM을 몇 초 만에 복제(Clone)하여 배포할 수 있습니다.

 

패키지 목록 갱신 및 도구 설치

apt update
apt install libguestfs-tools -y

2. Rocky Linux 10 Cloud Image 다운로드

Proxmox 쉘에서 공식 저장소를 통해 최신 클라우드 이미지를 다운로드합니다. 보통 .qcow2 확장자를 사용합니다.

# 이미지 저장 디렉토리로 이동
cd /var/lib/vz/template/iso/

# Rocky Linux 10 Generic Cloud 이미지 다운로드
wget https://download.rockylinux.org/pub/rocky/10.1/images/x86_64/Rocky-10-GenericCloud-Base.latest.x86_64.qcow2

3. 이미지 커스터마이징 (Virt-Customize)

virt-customize란? 이미지를 부팅하지 않고 패키지를 설치하거나 설정을 바꾸는 명령어입니다.

'qemu-guest-agent' 를 설치하여 테라폼이 내부 IP 주소를 확인할 수 있도록 해줍니다.

# qemu-guest-agent 설치 명령 주입
virt-customize -a Rocky-10-GenericCloud-Base.latest.x86_64.qcow2 --install qemu-guest-agent

4. 템플릿 VM 생성 및 설정

이제 준비된 이미지를 기반으로 템플릿용 VM을 생성합니다. Rocky Linux 버전(10)을 기억하기 위해 ID를 9010 으로 지정했습니다.

VM 생성

 

  • qm create 9010:
    • qm: QEMU/KVM Manager의 약자입니다. Proxmox의 가상머신 관리 명령어입니다.
    • 9010: VM의 고유 ID입니다. 보통 실제 서비스 VM은 100번대부터 쓰고, 템플릿은 9000번대처럼 멀리 떨어진 번호를 사용합니다.
  • --name "...": Proxmox GUI에서 보일 이름입니다.
  • --memory 2048 --cores 2:
    • 최소 사양(RAM 2GB, CPU 2코어)으로 정의합니다. 나중에 테라폼이 이 값을 무시하고 덮어씌울(Override) 것이므로 작게 잡아도 됩니다.
  • --cpu cputype=host:
    • 의미: "호스트(GMKtec 7840HS)의 CPU 기능을 숨기지 말고 VM에게 다 보여줘라."
    • 효과: 이걸 안 하면 VM은 자신의 CPU를 'Generic QEMU CPU'라고 인식합니다. 이걸 설정해야 라이젠의 고성능 명령어(AVX 등)를 VM 내부에서 100% 활용할 수 있습니다.
  • --net0 virtio,bridge=vmbr0:
    • virtio: "가상화 전용 랜카드"를 씁니다. 옛날 방식(E1000, Realtek)보다 CPU 부하가 적고 속도가 월등히 빠릅니다.
    • bridge=vmbr0: 물리적 랜선이 꽂힌 vmbr0 브리지에 연결하여, 공유기(192.168.219.x)와 직접 통신하게 합니다.

 

qm create 9010 --name "rocky-10-template" --memory 2048 --cores 2 --cpu cputype=host --net0 virtio,bridge=vmbr0

디스크 주입

 

  • qm importdisk: 다운로드 받은 이미지 파일(.qcow2)을 Proxmox가 관리하는 디스크 볼륨으로 변환해서 복사합니다.
  • local-lvm: 변환된 디스크가 저장될 위치입니다. (LVM-Thin 방식을 써서 속도가 빠르고 스냅샷 생성이 쉽습니다.)
  • 결과: 이제 VM 9010번은 '주인 없는 하드디스크' 하나를 소유하게 되었습니다. (아직 연결은 안 됨)

 

qm importdisk 9010 Rocky-10-GenericCloud-Base.latest.x86_64.qcow2 local-lvm

 

디스크 장착

 

  • qm set 9010: 만들어진 VM의 설정을 변경합니다.
  • --scsihw virtio-scsi-pci:
    • 가상 하드디스크 컨트롤러를 VirtIO SCSI로 설정합니다. SSD의 성능을 병목 없이 VM에 전달하기 위한 최신 표준입니다.
  • --scsi0 ...:
    • 방금 import 했던 디스크(vm-9010-disk-0)를 **0번 슬롯(C 드라이브)**에 꽂습니다.

 

qm set 9010 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9010-disk-0

 

부팅 순서 정리

 

  • --boot c: 부팅 우선순위를 설정합니다. (c는 보통 하드디스크를 의미하는 레거시 표현입니다.)
  • --bootdisk scsi0: "엄한 데(네트워크 부팅, CD-ROM) 찾지 말고, 아까 꽂은 scsi0 하드디스크로 바로 부팅해라"라고 지정합니다. 부팅 속도가 빨라집니다.

 

qm set 9010 --boot c --bootdisk scsi0

 

Cloud-Init 드라이브 추가

--ide2 ... cloudinit:

  • 아주 작은(4MB 정도) 가상 CD-ROM을 하나 더 장착합니다.
  • 역할: 테라폼이 나중에 "네 IP는 192.168.219.50이야, 암호는 이거야"라고 명령을 내리면, 그 정보가 이 CD-ROM에 기록되어 VM에게 전달됩니다.
  • 이게 없으면 테라폼으로 자동화가 불가능합니다.
qm set 9010 --boot c --bootdisk scsi0

 

디버깅 통로 개방

 

  • 의미: 모니터 화면(VGA)을 가상 직렬 포트(Serial Port)로 복제합니다.
  • 왜 필요한가?:
    • 테라폼이나 클라우드 관리 도구들은 그래픽 화면을 볼 수 없습니다. 대신 텍스트로 된 로그(Serial Output)를 읽어서 "아, 부팅이 끝났구나", "IP가 잡혔구나"를 판단합니다.
    • 이 설정이 없으면 테라폼이 "VM이 켜진 건 알겠는데, 부팅이 다 된 건지 모르겠어" 라며 타임아웃 에러를 낼 확률이 높습니다.

 

qm set 9010 --serial0 socket --vga serial0

 

템플릿 변환

 

  • 의미: "이 VM은 이제 수정 불가능한 원본(Master Copy)이다."라고 선언합니다.
  • 효과:
    • Proxmox GUI에서 아이콘이 종이 모양으로 바뀝니다.
    • 더 이상 전원 버튼(Start)을 누를 수 없습니다.
    • 대신 'Linked Clone' 기능을 쓸 수 있게 됩니다. (복제본을 만들 때 디스크를 복사하지 않고 원본을 참조만 해서, VM 생성 속도가 0.1초가 됩니다.)

 

qm template 9010

 

전체 스크립트

# 1. VM 생성 (메모리는 2048로 작게 잡음 -> 테라폼에서 늘릴 예정)
qm create 9010 --name "rocky-10-template" --memory 2048 --cores 2 --cpu cputype=host --net0 virtio,bridge=vmbr0

# 2. 디스크 가져오기
qm importdisk 9010 Rocky-10-GenericCloud-Base.latest.x86_64.qcow2 local-lvm

# 3. 디스크 연결 및 부팅 순서
qm set 9010 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9010-disk-0
qm set 9010 --boot c --bootdisk scsi0

# 4. Cloud-Init 드라이브 추가
qm set 9010 --ide2 local-lvm:cloudinit

# 5. 시리얼 콘솔 및 템플릿 변환
qm set 9010 --serial0 socket --vga serial0
qm template 9010

 

 

'project > 본투비엔지니어' 카테고리의 다른 글

[본투비엔지니어] 나에게 베어본만 주어진다면?? (7)  (0) 2026.01.29
[본투비엔지니어] 나에게 베어본만 주어진다면?? (6)  (0) 2026.01.29
[본투비엔지니어] 나에게 베어본만 주어진다면?? (4)  (0) 2026.01.27
[본투비엔지니어] 나에게 베어본만 주어진다면?? (3)  (0) 2026.01.27
[본투비엔지니어] 나에게 베어본만 주어진다면?? (2)  (0) 2026.01.22
'project/본투비엔지니어' 카테고리의 다른 글
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (7)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (6)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (4)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (3)
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 회고 (1)
      • project (13)
        • 본투비엔지니어 (12)
        • 페어쉐어 (1)
      • java (16)
      • spring (1)
      • go (1)
      • web (1)
      • cloud (1)
      • cloudflare (1)
      • database (1)
      • algorithm (16)
      • OS (1)
      • ai (1)
      • 기타 (2)
      • 오류 (1)
      • 생각정리 (2)
      • 자격증 (1)
        • RHCSA (1)
      • linux (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    [본투비엔지니어] 나에게 베어본만 주어진다면?? (5)
    상단으로

    티스토리툴바