Hands-on Infra Lab with Packer & Terraform - 0편

Packer로 미리 빌드한 Ubuntu 22.04 QCOW2 이미지 만들기

Packer로 Ubuntu 22.04 QCOW2 VM 템플릿(커스텀 베이스 이미지) 만들기

이 글에서는 J2eff/lab-infra 프로젝트를 활용해, 로컬 KVM 기반 VM 실습 환경을 자동으로 구성하는 방법을 안내합니다.
Packer로 Ubuntu 22.04 기반 이미지를 빌드하고, libvirt + Terraform으로 VM을 배포하는 기초 설정까지 진행합니다.

🌐 전체 시리즈 로드맵

  • 0편: Packer로 base 이미지 생성 (이 글)
  • 1편: Terraform으로 libvirt provider 설정
  • 2편: VM 프로비저닝 및 네트워킹 구성

🔹 0. 왜 Packer인가?

  • Packer는 HashiCorp에서 만든 도구로, 동일한 구성으로 다양한 플랫폼에 이미지를 자동 생성할 수 있습니다.
  • 우분투 ISO로 매번 수동 설치하는 대신, 커스텀 이미지를 만들어 설치 시간 단축, 환경 통일성 확보가 가능합니다.
  • CI/CD, 테스트, 실험용 VM 환경에서 특히 유리합니다.

📌 실제 사용 사례

  • 여러 명이 동일한 실습 환경을 써야 할 때
  • 서버 부팅 후 곧바로 서비스 테스트가 가능해야 할 때
  • CI 파이프라인에서 반복적으로 VM을 생성하는 경우

🔹 1. qcow2는 뭐고, 왜 쓰는가?

  • qcow2는 QEMU/KVM에서 사용하는 가상 디스크 포맷입니다.
  • 장점:
    • 스냅샷 기능 지원
    • 디스크 공간 절약 (sparse, 압축)
    • VM 간 공유 및 배포 용이

🔹 2. 우리가 커스텀 이미지를 만드는 이유

  • 기본 Ubuntu ISO로 설치 시 부팅 → 유저 생성, 디스크 파티션 설정, 패키지 설치 등 수동 과정 포함으로 20~30분 소요
  • Packer + cloud-init을 사용하면 유저, hostname, ssh key, 커널 설치 등 설정이 자동화된 qcow2 이미지를 만들 수 있음
  • 동일 환경에서 수초~수분 내 VM 부팅 가능 — 반복 실험, 테스트 환경에 매우 유리
  • VM 환경 초기화 시간을 단축하고, 반복 작업 제거
  • 테스트 자동화에 용이 (CI/CD, GitHub Actions 등)

📋 사전 준비사항

  • Ubuntu 기반 호스트 (예: Ubuntu 22.04 Desktop)
  • 가상화 지원 CPU (BIOS에서 VT-x/AMD-V 활성화)

참고사항

  • git, make, libvirt, qemu, packer, tfenv 등은 자동 설치됩니다.
  • terraform 버전은 .terraform-version 파일을 통해 자동 버전 선택됨

🚀 1단계: 초기 설정

sudo apt update && sudo apt install -y build-essential curl git sudo

# lab-infra 프로젝트 클론
git clone https://github.com/J2eff/lab-infra.git
cd lab-infra/

🔐 2단계: 의존성 준비

make setup-sudoers  # (커맨드 실행한 다음 로그아웃 후 재접속)
make prepare        # (커맨드 실행한 다음 로그아웃 후 재접속 – libvirt 그룹 적용)

🔍 3단계: QEMU / Packer 버전 확인

환경이 올바르게 설치되었는지 빠르게 확인하려면 다음 명령을 실행하세요:

make check

예상 출력:

🧪 Packer version: Packer v1.10.0
🧪 QEMU version: QEMU emulator version 8.2.1

출력이 비어 있거나 버전이 나타나지 않으면 make prepare터미널을 재시작하거나 로그아웃 후 다시 로그인해야 합니다.

빌드 진행 상황 안내

💡 참고: 첫 빌드는 Ubuntu ISO 다운로드 + 설치로 약 15-30분 소요됩니다.

🧰 4단계: Packer로 이미지 빌드

cd base/packer
packer init ubuntu.pkr.hcl
packer build jammy.json

Ubuntu ISO는 자동 다운로드되며, 빌드 중 실패 시 [context canceled] 에러가 발생할 수 있습니다. 다시 시도해 주세요.

Image Build 결과물 확인

# 빌드 성공 확인
ls -lh base/packer/build-jammy-base/*.qcow2

성공시 메시지 예시

-rw-r--r-- 1 user user 1.3G Dec 15 10:30 build-jammy-base/ubuntu-jammy-base.qcow2

📁 템플릿 구조 설명

  • ubuntu.pkr.hcl: 메인 entrypoint로, 실제 사용할 빌더/변수 파일들을 정의
  • jammy.json: 빌더와 부트 커맨드, 디스크 포맷, ISO 설정 포함
  • http/: cloud-init 설정을 담고 있으며, Packer가 로컬 서버로 제공

3. 마무리에 다음 단계 힌트

🚀 다음 글 예고: 생성된 이미지를 Terraform libvirt provider로 VM에 적용하고 해당이미지로 vm을 실행해보겠습니다.