본문 바로가기

OS,Network,Container

[Vagrant] Vagrant 기본 사용법

반응형

현재 가시다님이 주관하고 있는 KANS(Kubernetes Advanced Network Study)를 참여하고 있다.

 

Kubernetes Network을 학습하기 위한 기반 지식을 학습하고 있다.

 

- iptables

- Docker

- Linux (chroot, pivot_root, namespace, cgroups)

- Vagrant

- VirtualBox

- ..

 

스터디 정보

https://gasidaseo.notion.site/c9cd413265ea4ea1b1ae38eb36dfda94

 

쿠버네티스 네트워킹 스터디 [모집 마감]

모집 종료합니다. 감사합니다.

gasidaseo.notion.site

 

스터디하면서 공부한 내용을 정리하여 올려볼까 한다. 그 첫 번째로 간단히 Vagrant 사용법을 정리해보았다.

본 Study에서 VirtualBox와 Vagrant를 활용하여 VM 실습 환경을 구성하고 있다.

Vagrant는 사용해보지 않아 공부하는 겸 정리해보기로 하였다.

 

그 후에는 Docker Network, iptables, Kubernetes, EKS 등 하나씩 정리해 나갈 예정이다.


Vagrant는 가상 시스템 환경을 관리하기 위한 도구이다.

⇒ VM 환경 세팅 시간을 줄이고 개발 환경이나 테스트 환경을 자동으로 설정하도록 도와준다.

 

Vagrant를 사용하기 위해서는 VirtualBox와 Vagrant가 설치되어 있어야 한다.

물론 꼭 VirtualBox를 사용해야 한다는 건 아니지만 통상적으로 VirtualBox + Vagrant를 많이 사용하고 레퍼런스도 많기 때문에 VirtualBox를 사용함.

 

Windows10에 Vagrant를 WSL2를 활용하여 설치할 수 있지만 뭔가 Error가 많이 발생하여 Windows10 환경에 설치를 진행하였으며, ViatualBox 또한 Windows10 환경에 설치하였다.

 

용어 정리

Box : Vagrant는 이미 만들어진 VM 이미지를 사용하여 복제한다. (이 이미지를 Vagrant에서는 Box라고 한다.)

 

Vagrantfile : 프로젝트에 필요한 설정 파일을 정의할 수 있다.

 

Provisioning : 시스템에 소프트웨어를 자동으로 설치하고 구성을 변경하는 등 준비 작업

 

Provider : 가상 환경을 제공해주는 공급자이다.

(VirtualBox, VMWare, Docker, Hyper-V 등이 있으며, 보통 VirtualBox를 많이 사용하게 된다.)

 

명령어 정리

vagrant init : 현재 디렉터리에 Vagrantfile을 생성

vagrant box list : 현재 시스템에 설치된 Box(VM Image) 목록을 보여준다.

vagrant up : Vagrantfile을 기반으로 VM을 생성 및 실행한다.

vagrant ssh : VM에 ssh로 접속한다.

    --debug로 확인해보면 내부적으로 ssh를 사용하며, LocalHost로부터 포트포워딩하여 접속한다.

vagrant status : 현재 실행된 VM의 상태를 보여준다.

vagrant halt : 실행중인 VM을 종료한다.

vagrant destroy : 실행된 VM을 종료한다.

    vagrant destroy -f : halt까지 동시에 수행한다.

vagrant reload : 실행된 VM을 재실행한다. (Vagrantfile에 수정된 내용이 있다면 해당 내용을 반영)

 


사용

KANS 스터디장 가시다님의 파일을 활용하여 배포해보겠다.

(출처 : https://raw.githubusercontent.com/gasida/NDKS/main/1/Ubuntu/Vagrantfile)

 

Vagrant.configure("2") do |config|                                                                                                                            # 이미지 정보
  config.vm.box = "ubuntu/focal64"
  config.vm.box_version = "20211026.0.0"
  config.vm.provision "shell", inline: "echo 'sudo su -' >> .bashrc"
  config.vm.provision "shell", inline: "apt update"
  config.vm.provision "shell", inline: "apt install -y conntrack bridge-utils net-tools resolvconf jq tree"
  config.vm.provision "shell", inline: "echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/head"
  config.vm.provision "shell", inline: "resolvconf -u"
  config.vm.network "private_network", ip: "192.168.50.10"
  config.vm.network "forwarded_port", guest: 22, host: 60510, auto_correct: true, id: "ssh"
  config.vm.synced_folder "./", "/vagrant", disabled: true
  config.vm.provider "virtualbox" do |spec|
    spec.memory = "2048"
    spec.cpus = "2"
    spec.linked_clone = true
  end
end

Vagrantfile은 ruby 문법을 준수한다.

 

Vagrant.configure("2") do |config|

: Vagrant 설정 형식 버전 2를 사용한다는 의미이다.

 

config.vm.box = "ubuntu/focal64"

: box는 VM Image라고 생각하면 된다. VM Image를 ubuntu/focal64를 사용하겠다는 의미이며, vagrant cloud로부터 가져오게 된다.

 

config.vm.box_version = "20211026.0.0"

: Box 이미지의 버전 정보이다.

 

config.vm.provision "shell", inline:

: 배포 중 실행하는 부분이며, VM 생성하면서 해당 Shell Scirpt를 자동으로 수행한다.

 

config.vm.network "private_network"

: 사설 IP 네트워크를 정의하는 부분이며, VirtualBox의 경우 NAT로 설정된다.

 

config.vm.synced_folder

: 공유 폴더를 설정하는 부분이다.

첫 번째 파라미터 : host의 디렉터리

두 번째 파라미터 : guest의 디렉터리

disabled : true

⇒ 공유 폴더를 사용하지 않을 경우 true로 설정

 

config.vm.network "forwarded_port"

: Guest의 Port와 Host의 Port를 매핑해주는 부분이다. 만약 host의 Port가 이미 사용중이라면 자동으로 다른 미사용 Port를 할당해주는 auto_correct: true 설정을 해줘야 한다.

 

 

(터미널은 WSL2이지만 Windows 환경에서 실행하기 때문에 .exe가 붙게 된다.)

 

1. Vagrant 프로비저닝

vagrant.exe up

2. Ubuntu SSH 접속

vagrant.exe ssh

 

 

 

네트워크 구성도는 아래와 같다.

출처 : 가시다님 자료

 

Vagrant를 통한 SSH 접속은 아래와 같은 흐름으로 접근하게 된다. (SNAT + DNAT)

 

*** NAT Mode 시에 10.0.2.2(Gateway), 10.0.2.3(DNS Server), 10.0.2.4는 VirtualBox에서 예약된 IP임

 

1) Host(127.0.0.1)의 60510을 목적지로 접근

2) 127.0.0.1:60510 → 10.0.2.2:52494로 NAT

3) 10.0.0.2:52494 → 10.0.2.15:22로 접근

 

 

3. Ubuntu 종료 및 삭제

vagrant.exe destroy -f

요약 : Vagrant는 Virtualbox만 있으면 간단하게 개발 환경 및 실습 환경을 구성할 수 있도록 도와주는 좋은 도구이다.

 

 

 

Ref

https://tech.somma.kr/Vargrant/

 

반응형