본문 바로가기
인프라/Docker&K8S

vagrant 로 vm 생성하기 vagrant명령어

by IT맥구리나스 2022. 4. 7.

📗 vagrant는 무엇인가?

테스트 환경을 코드를 통해 쉽게 구성해줄 수 있게 해주는 툴

주로 virtualbox에서 테스트하며, 검색해 본 결과 라이센스와 호환성 문제로 vmware는 잘 안 쓰는듯하다.

프로비저닝 : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말

 

코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝 하는 것

📗 설치 방법

아래 링크에서 최신 버전 다운로드

https://www.vagrantup.com/

 

📗 초기화

cmd창을 열고 설치 위치에서 init을 한다.

C:\Users\japan>cd C:\HashiCorp

C:\HashiCorp>
C:\HashiCorp>
C:\HashiCorp>vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

init이 끝나면 Vagrantfile이 생성됨을 확인할 수 있음

 

📗 이미지 지정

vagrant 클라우드에서 설치하고자 하는 OS 이미지를 찾고 버튼 클릭

https://app.vagrantup.com/boxes/search

vagrantfile 소스에 이미지를 복사 후에, cmd 창에 vagrant up 명령어 수행한다.

cpu memory hostname 네트워크 설정 등을 한 vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
 config.vm.define "m-k8s" do |cfg|
 config.vm.box = "ubuntu/focal64"
  cfg.vm.provider "virtualbox" do |vb|
   vb.name="m-k8s(admin)"
   vb.cpus=2
   vb.memory=2048
   vb.customize ["modifyvm",:id, "--groups","/k8s-SM(github_SysNet4Admin)"]
  end
  cfg.vm.host_name="m-k8s"
  cfg.vm.network "private_network",ip:"192.168.1.10"
  cfg.vm.network "forwarded_port", guest:22, host:60010, auto_correct:true, id:"ssh"
  cfg.vm.synced_folder "../data","/vagrant", disabled:true
 end
end

접속은 vagrant ssh

 

📗 생성된 이미지 삭제하기

C:\HashiCorp>vagrant destroy -f
==> default: Destroying VM and associated drives...

 

 

📗 다수의 vm 생성하기

만약 3개의 노드를 추가하는 방법은 아래와 같다.

for문처럼 돌리면 다수의 vm도 뚝딱 생성이 가능

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
 config.vm.define "m-k8s" do |cfg|
 config.vm.box = "ubuntu/focal64"
  cfg.vm.provider "virtualbox" do |vb|
   vb.name="m-k8s(admin)"
   vb.cpus=2
   vb.memory=2048
   vb.customize ["modifyvm",:id, "--groups","/k8s-SM(github_SysNet4Admin)"]
  end
  cfg.vm.host_name="m-k8s"
  cfg.vm.network "private_network",ip:"192.168.1.10"
  cfg.vm.network "forwarded_port", guest:22, host:60010, auto_correct:true, id:"ssh"
  cfg.vm.synced_folder "../data","/vagrant", disabled:true
 end

## 3 node add

(1..3).each do |i|
 config.vm.define "w#{i}-k8s" do |cfg|
	config.vm.box = "ubuntu/focal64"
	cfg.vm.provider "virtualbox" do |vb|
	 vb.name="w#{i}-k8s"
	 vb.cpus = 2
	 vb.memory = 1024
	end
	cfg.vm.host_name = "w#{i}-k8s"
	cfg.vm.network "private_network", ip:"192.168.1.10#{i}"
	cfg.vm.network "forwarded_port", guest:22, host: "6010#{i}",auto_correct: true, id: "ssh"
	cfg.vm.synced_folder "../data", "/vagrant", disabled:true
  end
end
end

접속은 vagrant ssh 호스트네임을 쓰면 된다.

 

📗 네트워크 잡아주기

vm을 생성해도 vm 간 통신이 되지 않는다 찾아보니 생성한 네트워크 인터페이스 카드에 아이피가 등록되지 않아 발생한 문제

 

파일 > 호스트 네트워크 관리자에 들어가면 169.254.252.215로 되어있는 것을 볼 수 있음

VirtualBox Host-Only Ethernet Adapter의 아이피를 바꿔준다.(vm 아이피만 아니면 되는 듯)

주의사항 : vm을 모두 종료시키고 설정해야 한다, 구동 중에 변경하고 닫으면 ip설정이 초기화됨

생성된 vm 끼리 ping이 잘 나가면 성공이다.

 

📗 생성된 vm SSH 접속하기

cmd창에서 vagrant ssh-config 명령어를 치면 생성된 vm의 정보와 ssh연결에 필요한 프라이빗 키가 조회된다

📗 securecrt로 접속하기

hostname : 127.0.0.1 port는 설정한 포트 username은 vagrant

authentication에 Publickey를 누르고 Properties클릭

Use identiy or certificate file에  vagrant ssh-config에서 조회 한 프라이빗 키를 넣는다.

 

 

 

📗 vagrant vm 끄기

vagratn halt

📗 vagrant vm 켜기

초기 프로비저닝뿐만 아니라 기존 vm이 있을 경우 vagrantfile에 정의된 vm을 켜준다.

vagarnt up

📗 사용후기

1개의 vm을 만들고 복제한다 치더라도 vagrant가 vm을 만들고 삭제하는 속도가 훨씬 빠르다. 3~4개 만드는데 5분내외

다만 virtualbox에서만 쓰는 방법만 많이 있고 그외 가상화 환경에서 쓰는 것은 인터넷에 자료가 별로 없다.

또한 원격접속툴을 이용하여 하려면 id/pw방식이 아닌 퍼블릭키 인증방식이라 좀 불편하다..

id/pw방식은 없으려나 나중에 찾으면 기록해놔야겠다.

반응형

댓글