현재 가시다님이 주관하고 있는 KANS(Kubernetes Advanced Network Study)를 참여하고 있다.
Kubernetes Network을 학습하기 위한 기반 지식을 학습하고 있다.
- iptables
- Docker
- Linux (chroot, pivot_root, namespace, cgroups)
- Vagrant
- VirtualBox
- ..
스터디 정보
https://gasidaseo.notion.site/c9cd413265ea4ea1b1ae38eb36dfda94
스터디하면서 공부한 내용을 정리하여 올려볼까 한다. 그 첫 번째로 간단히 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/
'OS,Network,Container' 카테고리의 다른 글
[Kubernetes] Flannel CNI & PAUSE 컨테이너 알아보기 (0) | 2022.01.22 |
---|---|
[Linux] iptables 정리 (2) | 2022.01.12 |
리눅스 lsof 명령어 (4) | 2020.04.27 |
리눅스 ps 명령어 - 리눅스 Process 확인 (1) | 2020.04.27 |
리눅스 vmstat 명령어 (0) | 2020.04.27 |