IaC/Infrastructure Provisioning

Vagrant란?

Somaz 2022. 8. 25. 14:49
728x90
반응형

Overview

오늘은 Vagrant에 대해 알아본다.


Vagrant는 로컬 개발 환경을 빠르게 구축하고 자동화할 수 있도록 도와주는 도구로, 특히 KVM, VirtualBox, Docker 등 다양한 가상화 백엔드를 지원한다.

이번 글에서는 KVM 기반 환경에서 Vagrant를 사용하는 방법을 소개하며,
KVM 설정부터 Vagrant 설치, Vagrantfile 구성, VM 생성 및 관리까지 실습을 중심으로 정리했다.

 

프로젝트 단위로 통합된 가상 머신 구성을 통해 테스트 환경을 일관되게 유지할 수 있으며,
향후 Ansible, Terraform 등과 연계하여 DevOps 인프라 자동화에도 유용하게 활용할 수 있다.

 

 

참고

https://github.com/somaz94/vagant-packer

 

 

 

 

 

 

 

 

 


 

 

Vagrant란?

Vagrant는 가상 머신(VM) 환경을 구축하고 관리하는 자동화 도구로, Provisioning 기능을 활용하여 환경을 자동으로 설정할 수 있다. 프로젝트 단위로 VM을 관리하며, 로컬에서 생성, 삭제, 상태 확인 등의 작업을 쉽게 수행할 수 있다.

 

 

주요 기능

  • VM 환경 자동 구축
  • 가상화 플랫폼(KVM, VirtualBox, Docker 등)과 연동
  • Provisioning을 통한 자동화 구성 지원
  • 개발 환경을 일관성 있게 유지 가능

 

 

 

 

KVM 설치 및 설정

 

1. KVM 설치

yum -y group install 'Virtualization Host'

 

 

2. Nested Virtualization 설정

cat /sys/module/kvm_intel/parameters/nested  # (Y: enabled, N: disabled)

 

 

설정 파일 수정 후 활성화:

vi /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1\options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

 

 

3. 커널 모듈 재적용

modprobe -r kvm_intel
modprobe -a kvm_intel

 

 

4. PCI Passthrough 및 SR-IOV 활성화

vi /etc/default/grub
GRUB_CMDLINE_LINUX="nofb splash=quiet console=tty0 ... intel_iommu=on"
grub2-mkconfig -o /boot/grub2/grub.cfg

 

 

5. IPv4 Forwarding 설정

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

 

 

6. 재부팅 후 KVM 지원 상태 확인

systemctl reboot
virt-host-validate

 

 

 

 

Vagrant 설치

 

 

1. Vagrant 및 필수 패키지 설치

sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vagrant
sudo yum -y install qemu libvirt libvirt-devel ruby-devel gcc qemu-kvm libguestfs-tools
vagrant plugin install vagrant-libvirt
vagrant plugin install vagrant-mutate

 

 

2. KVM용 Vagrant VM Pool 생성

mkfs.xfs /dev/sdb1
mkdir -p /var/lib/libvirt/vagrant
echo "$(blkid /dev/sdb1 -o export | grep ^UUID) /var/lib/libvirt/vagrant xfs default 0 0" >> /etc/fstab
mount -a

virsh pool-define-as --name vagrant --type dir --target /var/lib/libvirt/vagrant
virsh pool-start vagrant
virsh pool-autostart vagrant

 

 

<옵션> Vagrant VM 생성용 kvm-libvirt Pool 생성, 서버의 /dev/sdb1 디스크를 사용

# mkfs.xfs /dev/sdb1

# mkdir -p /var/lib/libvirt/vagrant

# echo "$(blkid /dev/sdb1 -o export | grep ^UUID) /var/lib/libvirt/vagrant xfs default 0 0" >> /etc/fstab

# mount -a

# virsh pool-define-as --name vagrant --type dir --target /var/lib/libvirt/vagrant

# virsh pool-start vagrant

# virsh pool-autostart vagrant

 

 

https://www.vagrantup.com/downloads
https://www.vagrantup.com/docs/installation
https://www.vagrantup.com/docs/other/environmental-variables - Vagrant 환경변수
https://github.com/tlesne/ebook-2/blob/master/Vagrant/Pro%20Vagrant.pdf - Vagrant ebook

 

 

 

 

 


 

 

 

Vagrant Structure

 

해당 프로젝트의 최상위 디렉토리에서 'vagrant init' 명령어를 입력하였을때 Vagrantfile이 생성된다.

  • 초기 Vagrantfile 이 아직 존재하지 않는 경우 생성하여 현재 디렉토리를 Vagrant 환경으로 초기화한다.
  • 첫 번째 인수가 주어지면 `config.vm.box` 생성된 Vagrantfile의 설정이 미리 채워진다.
  • 두 번째 인수가 지정되면 `config.vm.box_url` 생성된 Vagrantfile의 설정이 미리 채워진다.

 

 

즉 Vagrant는 최상의 디렉토리를 VM 생성 및 관리르 해야 할 프로젝트로 인식한다.

 

 

 

 


 

 

 

Vagrant 프로젝트 구성

 

 

1. Vagrant 환경 초기화

vagrant init

 

 

2. Vagrantfile 설정

# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'  # 기본 Provider 설정

Vagrant.configure("2") do |config|
  Control = 3  # 컨트롤 노드 개수
  Compute = 2  # 컴퓨트 노드 개수
  Ceph = 1     # Ceph 노드 개수
  Ver = '0.0.5'  # 버전 설정

  config.vm.synced_folder '.', '/vagrant', disabled: true  # 동기화 폴더 비활성화

  (1..Control).each do |i|
    config.vm.define "control0#{i}" do |cfg|
      cfg.vm.box = "somaz-testVM"
      cfg.vm.provider "libvirt" do |vb|
        vb.cpus = 16
        vb.memory = 98304
        vb.management_network_name = "service"
        vb.management_network_mac = "52:54:00:3f:2a:a#{i}"
        vb.storage_pool_name = "vagrant"
        vb.machine_virtual_size = 500
        vb.graphics_ip = "0.0.0.0"
      end
      cfg.vm.host_name = "control0#{i}"
      cfg.vm.network "private_network", ip: "192.168.20.1#{i}",
        libvirt__network_name: "mgmt",
        libvirt__forward_mode: "none",
        libvirt__dhcp_enabled: "false"
      cfg.vm.network "forwarded_port", guest: 22, host: "6001#{i}", host_ip: "127.0.0.1"
      cfg.vm.provision "shell", path: "edu_init1.sh", args: [Control, Compute, Ceph]
    end
  end
end
 

 

 

 

 

 


 

 

 

 

 

 

 

마무리 (Conclusion)

Vagrant는 복잡한 가상 머신 설정을 단순화하고 자동화하여 개발자와 운영자 모두에게 효율적인 환경을 제공한다.


특히, KVM 기반 리눅스 환경과의 조합은 높은 성능과 유연성을 제공하며,
VM 생성, 삭제, 프로비저닝을 한 줄의 명령어로 수행할 수 있는 점이 큰 장점이다.

 

이번 실습을 통해

  • KVM 설정 및 가상화 준비
  • Vagrant 설치 및 설정
  • Vagrantfile을 통한 VM 정의 및 자동 구성

 

까지 실습해보았으며,


앞으로는 Ansible, Terraform 등과의 통합을 통해 완전한 인프라 자동화를 목표로 삼을 수 있다.

 

 

GitHub - somaz94/vagant-packer 에서는 관련 코드 예제와 설정을 확인할 수 있다.
지속적인 테스트와 개선을 통해 나만의 클라우드 기반 테스트 환경을 구축해보자!

 

 

 

 

 


참고 자료

https://www.vagrantup.com/docs/cli/init

https://github.com/somaz94/vagant-packer

728x90
반응형