반응형

VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다.

Kubernetes에 대해 들어가기 앞서 필요한 새로운 툴인 Vagrant를 설치해보려고 한다. Vagrant[베이그런트]는 요즘 핫한 HashiCorp[하쉬코프] 회사의 도구 중 하나이며, Terraform이라는 툴 또한 유명하다. 위키백과에 보면 Vagrant는 포터블 가상화 소프트웨어 개발환경이라고 정의하고 있다. 쉽게 말해서 VM을 코드로 만들어주는 도구이며 테스트 환경에서 주로 사용한다. 지금은 2버전인데, 3버전을 계획하고 있으며 2버전은 Ruby로 만들어졌지만 3버전은 Go lang으로 만들어 질 예정이다.

도커처럼 이미지를 받아서 Vagrant를 사용할 수 있다. Vagrant 홈페이지에서 다운로드를 누르면 하단에 시스템 환경에 맞는 버전을 다운받을 수 있다.

<vagrant 공식 홈페이지>

 

Vagrant by HashiCorp

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

www.vagrantup.com

 

HashiCorp 공식 홈페이지

 

현재 호스트 Ubuntu가 18.04 LTS 버전이기 때문에 여기에 맞게 Debian 64로 받아주었다. Downloads파일에 저장이 되어 있어서 디렉토리 위치를 이동시켜준 뒤 아래 작업을 실행한다.

cd Downloads
sudo dpkg -i vagrant_2.2.16_x86_64.deb
vgrant -v

 

vagrant로 시작하는 버전은 설치파일명을 작성해주면 되며, 세번째 명령어를 이용하여 현재 설치된 vagrant 의 version을 확인할 수 있다. 작업을 할 디렉토리를 지정해두는 게 편하기 때문에 임의의 폴더를 하나 생성한다.

mkdir -p /vagrant/kubernetes
cd /vagrant/kubernetes/

실습폴더 생성 완료. 만들어준 디렉토리로 이동해준다.

 

앞서 Vagrant는 이미지를 다운받아 사용할 수 있다고 하였다. 아래의 Vagrant Cloud에서 도커허브처럼 이미지를 확인할 수 있다. 우리는 OS로 ubuntu환경에서 작업을 할 예정이므로 ubuntu/focal64를 다운받을 것이다.

<Vagrant Cloude>

 

Vagrant Cloud by HashiCorp

Vagrant Cloud by HashiCorp

app.vagrantup.com

 

아래는 홈페이지 이미지 다운로드 화면이다. 다른 OS들도 올라와 있으며 명령어로 다운받을 예정이다.

 

Ubuntu bash 쉘 창에서 아래의 명령어를 진행한다. init은 Vagrant를 초기화해주는 명령어이며 도커에서 Dockerfile을 사용하는 것 처럼 Vagrantfile이 생성되어 편집해서 사용할 수 있다. init을 해주면 현재 위치해있는 디렉토리에 vagrant가 만들어졌다고 안내메세지가 뜨는 게 정상이다. 이 상태에서 ls를 입력해보면 Vagrantfile이 정상적으로 생성된 것을 확인할 수 있다.

vagrant init ubuntu/focal64
ls

vim을 이용해 Vagrantfile에 들어가보면 이런 내용을 확인할 수 있다. configure("2")는 2버전을 의미하며 vm.box는 아까 이미지를 다운로드 했던 버전을 확인해볼 수 있다.

vim Vagrantfile 

 

:q! 를 입력하여 이 창을 나와준다.

 

생성 및 부팅

이제 이 상태에서 vagrant up을 사용하면 가상환경이 시작된다. 부팅을 하는 것인데, 첫 부팅이면 다운로드도 같이 해주면서 생성된다.

vagrant up

다운로드를 완료하는 데 까지는 시간이 조금 걸린다.

 

상태확인

상태확인을 하면 현재 러닝중인지 생성만 되었는지 확인할 수 있다. 디폴트 상태로 러닝중이다.

vagrant status

 

ssh 접속, 종료

가상머신이 생성되면 ssh로 들어갈 수 있으며 빠져나오려면 exit를 사용한다. Vagrantfile을 변경해준 게 없기 때문에 뒤에 가상머신 이름은 따로 넣지 않고 ssh를 사용해보았다.

vagrant ssh <가상머신 이름>
exit

 

VM 종료

running중인 가상컴퓨터(가상머신)을 끄는 명령어다. VM이 셧다운됨을 알 수 있다.

vagrant halt

 

VM 삭제

종료는 다시 시작할 수 있지만, 삭제는 아예 없앨 수 있는 명령어다. 그래서 rm 명령어처럼 삭제할 것인지 재 확인하는 문구가 뜨면 y를 입력해줘야 한다. 실습할 때는 눌러주기 귀찮으니 -f 옵션을 사용해서 한방에 삭제해줄 수도 있다.

vagrant destroy -f

 

버전 업데이트

추가로 vagrant 버전을 업데이트 해 주는 명령어다. 오늘기준으로 최신 버전으로 업데이트하였다.

vagrant box update

6월 10일버전이 현재 최신버전임. 아래 결과가 확인된다.

'ubuntu/focal64' (v20210610.0.0) is running the latest version.

 


Vagrant 작성

 

앞서 Dockerfile이나 Docker-Compose.yml 파일을 사용하는 것 처럼 Vagrant도 Vagrantfile을 사용한다고 했다. 현재 디렉토리에 생성되었던 파일을 참고하여서 작성하여 테스트 해보려고 한다. 먼저 네트워크는 100번대를 사용할 예정인데, 이 대역을 다른 가상머신에서 사용하고 있으면 에러가 나므로 사용하던 네트워크 대역을 삭제하거나 겹치지 않는 대역을 사용하는 것이 중요하다.

vim Vagrantfile

파일을 아래와 같이 수정해서 테스트하였다.

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

Vagrant.configure("2") do |config|
  # kube-control1 VM
  config.vm.define "kube-control1" do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.provider "virtualbox" do |vb|
       vb.name = "kube-control1"
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = "kube-control1"
    config.vm.network "private_network", ip: "192.168.100.11"
  end

  # kube-node1 VM
  config.vm.define "kube-node1" do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.provider "virtualbox" do |vb|
       vb.name = "kube-node1"
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = "kube-node1"
    config.vm.network "private_network", ip: "192.168.100.21"
  end

  # kube-node2 VM
  config.vm.define "kube-node2" do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.provider "virtualbox" do |vb|
       vb.name = "kube-node2"
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = "kube-node2"
    config.vm.network "private_network", ip: "192.168.100.22"
  end

  # Hostmanager Plugin
  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true

  # Provision
  config.vm.provision "shell", inline: <<-SHELL
    sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
    sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
    sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
    systemctl restart ssh
    apt update
    apt install -y chrony
  SHELL
end

 

다음은 위 파일에 대한 설명이다.

 

1. VM 설정

3개의 VM을 만들기 위해 kube-로 시작하는 VM을 지정해주었다. 그 중에 설명을 돕기 위해 첫 번째 VM에 대한 설명이다.

config.vm.define "kube-control1"

VM 이름

config.vm.box = "ubuntu/focal64"

VM 이미지

config.vm.provider "virtualbox"

도구를 virtualbox를 이용하겠다

vb.name = "kube-control1"

가상컴퓨터의 이름(ssh 뒤에 이 이름을 넣어 접속함)

config.vm.hostname = "kube-control1"

가상컴퓨터 내에 있는 hostname

config.vm.network "private_network", ip: "192.168.100.11"

100번대 네트워크를 만들어줄 것인데 ip address를 지정해주었다.

 

2. Hostmanager Plugin

plugin에 대한 설정

 

3. Provision

 config.vm.provision "shell", inline:

AWS에서 인스턴스 생성 후 자동으로 스크립트를 실행할 수 있는 스크립트 입력란이 있다. 그것과 마찬가지로 쉘 스크립트를 의미하며, 최초 생성시 실행할 스크립트다. sed는 대화 형태의 명령어다.

sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config

AWS EC2 instance는 password 인증이 되지 않고 키 기반 인증만 가능하다. 그래서 .pem파일을 다운로드 받아서 사용하였다. 그렇지만 위 sed 뒤의 내용은 패스워드 기반 인증을 허용하게 해 주는 부분이다.

sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sourcees.list
sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list

이 두 줄은 apt 저장소를 바꿔준다. Ubuntu.com으로 셋팅되어 있는데, 이게 한국에서 쓰기에는 꽤 느려서 daum으로 잡아주었다. 빠르게 패키지를 받을 수 있다.

 

사전 플러그인 설치

Vagrant up을 하기 전 플러그인을 먼저 설치한다.

vagrant plugin install vagrant-hostmanager
vagrant plugin list

vagrant-hostmanager (1.8.9, global) 라는 버전 결과창이 떴다.

vagrant up

up을 함으로 VM이 생성 및 실행된다. VM을 3개나 생성했기 때문에 시간이 조금 걸린다.

 

* 순서

네트워크 대역 중복 확인 – Vagrantfile수정(스크립트 참고) - vagrant hostmanager install – vagrant up - virtualbox에 가상머신 3대가 띄워져 있는 것을 확인할 수 있음

<결과화면>

 


확인

 

현재 상태를 확인해보니 VM 3개가 러닝중이다.

vagrant status

 

각 VM으로 접속하기 위해 ssh를 사용한다. 추가로 ip설정이 제대로 되었는지는 /etc/hosts에 가보면 알 수 있다. 처음에 만든 kube-control1으로 접속해서 테스트한다.

vagrant ssh kube-control1
cat /etc/hosts

 

지금까지 Vagrant 설치 및 기본적인 명령어에 대해서 살펴보았다. VM을 GUI가 아닌 CLI에서 사용한다는 점이 신기하기도 하고 생각보다 간단한 명령어라서 사용할 만 한 것 같다(아직까지는ㅎㅎ) HashiCorp사에서 나온 오픈소스 툴을 사용해본 것으로 좋은 경험이라고 생각한다.

다음 포스팅에서는 이 가상머신 안에 도커를 설치하고 wordpress를 구현해 볼 예정이다.

 

반응형

+ Recent posts