참고로 Vagrant 세팅 과정은 제 컴퓨터의 운영체제인 Window 기준 방식입니다.
Vagrant 는 Mac 과 Window 의 세팅법이 많이 다를 수 있습니다.
Mac 사용자시면 멀티OS 사용을 위한 가상화 환경 구축 가이드 (Docker + Kubernetes)
강의를 참고하기 바랍니다. 무료이니 부담없이 들을 수 있습니다.
컴퓨터에서 사용되는 물리적인 cpu, storage, network(NIC) 등을 소프트웨어화하는 것이다. 이때 소프트웨어화라는 표현을 우리는 "가상화"라고도 한다.
ex: 클라우드 컴퓨팅
그런데 가상화는 경우 따라 물리적인 컴퓨터 자원의 영역을 넘어서기도 한다.
가상화의 영역은 컴퓨터 자원과 그 위에서 실행되는 운영체제까지 포함될 수도 있고,
심지어는 컴퓨터 자원 + 운영체제 + application 까지도 포함될 수 있다.
그러므로 가상화의 영역은 어떤 문맥에서 사용하냐에 따라 다를 수 있다.
바로 다음 목차에서 보는 HyperVisor 의 경우에는
운영체제까지가 바로 가상화의 영역이다.
물리적인 server 또는 Host OS 위에 설치되는 소프트웨어이며,
server 또는 Host OS 가 사용하는 물리적인 CPU, RAM, NETWORK 등의 컴퓨터 자원을
미리 pooling 하고, 가상 운영체제 환경에 할당해주는 소프트웨어다.
HyperVisor 제품들은 주로 물리적인 컴퓨터 자원을 미리 설정할 수 있는
기능을 제공한다.
또한 추가적으로 각 가상 운영체제 환경이 서로의 자원에 침범(Conflict) 하는 현상을
미연에 방지하는 보안적인 환경도 기본으로 제공한다.
이러한 HyperVisor
(이 글에서는 Type2 HyperVisor
) 제품으로는
Oracle VirtualBox
, VmWare
등이 있다.
이 글에서는 Vagrant
와 연동을 하기 위해서 Oracle VirtualBox
로
내용을 진행할 예정이다.
Vagrant
+VmWare
조합도 가능은 하지만 사용하려면 돈을 내야 한다.
좀 더 보충하기 위해서 아래 영상을 참고하자.
많은 걸 배울 수 있다.
가상화 인스턴스 관리 SW 이며, Provisioning Tool 이다.
Provisioning 은 IT 인프라를 생성, 설정하는 프로세스이다.
다양한 리소스에 대한 사용자 및 시스템 액세스를 관리하는 데 필요한 단계를 포함하며,
사용자 요구에 맞게 시스템 자원을 할당, 배치, 배포가 가능케 해준다.
말이 화려하지만 단순하게 말하자면
Oracle VirtualBox 만 쓰면 일일이 해야되는 수작업들을 좀 더 자동화해주고,
결과적으로 VM Instance 의 관리에서 많은 편의성을 제공받는다.
참고: AMD64, I868 중 어떤 걸 다운로드 받아야할지 모르면?
ChatGPT 에게 물어보면 된다. 아래는 ChatGPT 의 친절한 답변이다.
- 자기가 64 비트 체계 시스템이면 무조건 AMD64 를 선택하면 된다는 거다.
이후에는 설치 프로그램이 생기면, 해당 프로그램을 실행시켜서 계속 Next, Next 를
클릭해서 설치를 완료해주자. 다 설치하고 나서 컴퓨터 껐다가 키라고 한다.
껐다가 켜주자.
참고로 Vagrant 는 UI 를 제공하지 않는다.
오로지 CLI 에서만 사용하도록 만들어진 프로그램이다.
이후에 설치 파일이 다운로드 되는데,
바로 실행시켜서 계속 Next, Next 클릭 하다보면 설치된다.
이 글은 Vagrant 를 통해서 VM Instance 를 생성할 예정이므로,
이 목차는 생략한다. 궁금하신 분들은 이 글을 참고하길 바란다.
여기서는 최대한 중요한 것만 추려서 작성했지만
필요하다면 Vagrant 공식문서를 참고하길 바란다.
먼저 vagrant 가 인스턴스화할 운영체제, 즉 BOX 를 먼저 선정해야 한다.
BOX 는 Vagrant 가 Vm Instance 생성 시 사용할 운영체제라고 생각하면 된다.
BOX 는 https://portal.cloud.hashicorp.com/vagrant/discover 에서 검색해서 선정하면 된다.
BOX 의 명칭은 바로 다음에 볼 Vagrantfile 작성
에서
config.vm.box = 'generic/ubuntu2004'
처럼 사용된다.
VM Instance 를 생성하고, 그 위에 운영체제를 generic/ubuntu2004
Box
를 사용해서 설치하겠다는 의미다.
Vagrant 는 Vagrantfile 이라는 스크립트를 작성해서
필요한 Vm Instance 생성 관련 설정들을 작성하고 실행시킬 수 있다.
지금부터 이 Vagrantfile 이라는 것을 작성해보자.
먼저 자기 컴퓨터에서 아무 디렉토리를 만들고,
그 안에 Vagrantfile
라는 명칭의 파일을 을 생성한다.
그리고나서 해당 파일을 편집기로 열고 생성할 VM 에 대한 설정을 작성해주면 된다.
다만 VM Instance 를 한 개 생성할지, 한 개 이상을 생성할 지에 따라서
약간 설정법이 다르다. 2가지 방식 모두 기재했으니 참고하기 바란다.
Vagrant_API_Version="2"
Vagrant.configure(Vagrant_API_Version) do |config|
config.vm.box = 'generic/ubuntu2004'
config.vm.hostname = 'webserver'
config.vm.provider:virtualbox do |vb|
vb.name="K8s-Master"
vb.cpus = 2
vb.memory = 2048
# vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
# vb.customize [ "modifyvm", :id, "--uartmode1", "file", File::NULL ]
# vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
# vb.customize [ "modifyvm", :id, "--cableconnected1", "on" ]
end
config.vm.synced_folder ".", "/vagrant"
config.vm.network "private_network", ip: "192.168.32.10"
config.vm.provision "shell", path: "sshd_config.sh"
config.vm.network "forwarded_port", guest: 22, host: 21022, auto_correct: false, id: "ssh"
end
출처: https://github.com/joneconsulting/vagrant/blob/main/scripts/Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant_API_Version="2"
Vagrant.configure(Vagrant_API_Version) do |config|
# Node01
config.vm.define "k8s-node01" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.box_version = "3.1.16"
cfg.vm.provider:virtualbox do |vb|
vb.name = "K8s-Node01"
vb.cpus = 1
vb.memory = 1024
# vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
# vb.customize [ "modifyvm", :id, "--uartmode1", "file", File::NULL ]
# vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
# vb.customize [ "modifyvm", :id, "--cableconnected1", "on" ]
end
cfg.vm.hostname = "k8s-node01"
cfg.vm.network "private_network", ip: "192.168.32.11"
cfg.vm.network "forwarded_port", guest: 22, host: 24022, auto_correct: false, id: "ssh"
# cfg.vm.network "forwarded_port", guest: 80, host: 40080
cfg.vm.provision "shell", path: "sshd_config.sh"
end
# Master
config.vm.define:"k8s-master" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.provider:virtualbox do |vb|
vb.name="K8s-Master"
vb.cpus = 2
vb.memory = 2048
# vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
# vb.customize [ "modifyvm", :id, "--uartmode1", "file", File::NULL ]
# vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
# vb.customize [ "modifyvm", :id, "--cableconnected1", "on" ]
end
cfg.vm.hostname = "k8s-master"
cfg.vm.synced_folder ".", "/vagrant"
cfg.vm.network "private_network", ip: "192.168.32.10"
cfg.vm.network "forwarded_port", guest: 22, host: 21022, auto_correct: false, id: "ssh"
cfg.vm.provision "shell", path: "sshd_config.sh"
end
end
참고1
:vb.customize
설정여기서 주석처리한
vb.customize
설정들은 모두
SSH auth method: private key
실행 시 멈춤 현상 때문에 기재한 것이다. 가끔 이상하게SSH auth method:~
라고 나오는 부분에서
VM Instance 생성이 완전히 멈춰버리는 현상이 생기는 경우가 있다.
만약에 자신이 그렇다면 위 주석처리한 설정을 활성화해서 다시 vagrant up 하자.
참고2
: Vagrantfile 에서 사용된sshd_config.sh
의 내용은 아래와 같다.#! /usr/bin/env bash now=$(date +"%m_%d_%Y") cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$now.backup sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config systemctl restart sshd
이는 ssh 접속이 허용되도록 하기 위한 세팅 쉘 스크립트다.
이 파일은 Vagrantfile 과 동일한 디렉토리에 넣어줘야 한다.
이제 Vagrantfile
이 있는 경로 상에서 cmd(또는 pwsh) 을 실행시켜서
Vagrant 명령어를 사용해보자.
현재 vm instance 의 운영상태를 보여준다.
vagrant status 를 통해서 나오는 명칭(화면 좌측에 나오는 문구)들은
다음부터 사용될 명령어들에 덧붙여서 사용될 수 있다.
vagrant up k8s-master
vagrant up default
참고: 현재 명령어를 실행하는데 사용하는 Vagrantfile 에 정의되어 있진 않지만,
다른 경로의 Vagrantfile 에 의해서 실행중인 vm instance 가 있는지
확인하고 싶다면vagrant global-status
로 조회할 수 있다.이 명령어를 통해서 ID 를 얻을 수 있는데,
vagrant destroy ID
처럼 사용해서VM Instance
를 관리할 수 있다.
이 명령어를 사용하면 vm instance 가 생성된다.
또한 이미 생성되어 있지만 멈춰있는 인스턴스가 있다면 재실행시켜 준다.
참고:
Downloading: https://vagrantcloud.com/generice/...
라는 문구에서
다음으로 진행이 안되고 멈춘 거 같은 느낌을 받을 수 있다.
파일 크기가 1G 가 넘어서 느린 것 뿐이니 안심하길 바란다.
나의 경우에는 3~4분 정도 걸린듯하다.
virtual box
ui 를 켜보면 확인할 수 있다.
vm instance 를 shut down 시킨다 (=전원 OFF).
vm instance 를 중지시킨다.
다시 실행시키고 싶으면 vagrant up 명칭
을 입력하면 된다.
vm instance 를 삭제한다.
vagrant 를 통해서 vm instance 에 ssh 프로토콜을 사용한 로그인이 가능하다.
# ssh 다음에 입력하는 명칭은 vagrant status 를 입력했을 때
# 나오는 명칭을 입력하면 된다.
vagrant ssh k8s-master
이후에 비번을 입력하라고 하는데,
기본적으로 password
는 vagrant
이다.
vagrant ssh -c "sudo cat /etc/ssh/sshd_config" > sshd_config
가끔 필요하다. 반대로 host -> vm
으로 파일 전송이 필요하면 이 링크를 참조하자.