Vagrant으로 VM 구성하기
쿠버네티스 클러스터를 Vagrant를 이용하여 구성하려고 한다.
Vagrant에 대해 깊게 파고 들 필요까지는 없을 것 같고, 나중에 Vagrant 설치와 Vagrantfile을 이용한 VM 구성까지 한 번에 할 수 있게 스크립트를 작성해서 리포지토리에 올려놓을까싶다. 깃으로 들어가서 어디서나 클러스터를 구성할 수 있게..
Vagrant 설치
공식 홈페이지로 이동하여 운영체제에 맞게 설치 파일을 받은 뒤 설치한다.
Install | Vagrant | HashiCorp Developer
Vagrant란?
VM을 간단하게 구축해주는 IaC 툴이다.
Vagrant를 이용해서 가상 인스턴스를 굉장히 간편하게 만들 수 있다.
Vagrant는 Dockerfile과 비슷하게 Vagrantfile이라는 파일을 사용한다!
각 프로젝트엔 딱 하나의 Vagrantfile이 있으며, 이 파일에 원하는 가상 인스턴스를 설명해놓으면 그대로 만들어준다.
Vagrantfile 생성하기
# Vagrant를 적용할 폴더 생성
mkdir vagrant_for_k8s
# 폴더로 이동
cd vagrant_for_k8s
# Vagrant 플러그인 업데이트
vagrant plugin update
# Vagrant 시작(Init)
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.
# Vagrantfile이 디렉토리에 생성된다
ls
> Vagrantfile
Vagrantfile 내용
Vagrant init 명령어를 실행하면 자동으로 해당 디렉토리에 Vagrantfile을 생성해준다
쉽게 작성하라고 자세한 설명이 모두 주석 처리 되어있다.
주석을 모두 제거한 Vagrantfile 내용을 순서대로 풀어보자
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrantfile이 Ruby 언어 기반으로 작성되었다는 내용으로 지우면 안되는 중요한 내용
Vagrant.configure("2") do |config|
설정(Configuration) 버전(2)를 나타내며 가능한 수정하지 않는 것을 추천함
config.vm.box = "base"
end
Vagrant는 Box로 구성되어있다. Box는 기본적인 패키지 포맷으로서 쉽게 말해 Docker 클라이언트가 Docker hub에서 이미지를 긁어오는 것처럼 Vagrant도 어딘가에서 OS를 Box란 포맷으로 가져와서 실행하는 것.
기본 값은 base로 되어있지만 원하는 Box를 가져다가 입력하면 된다.

Vagrant Cloud에서 CentOS 7을 검색하면 위 사진처럼 친절하게 예시까지 보여준다
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
end
Box를 추가한 Vagrantfile은 이렇게 작성할 수 있다.
컨트롤 노드 1개와 워커 노드 2개를 포함한 Vagrantfile은 아래와 같이 작성할 수 있다.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
### Master Node ####
config.vm.define "k8s-master" do |master|
master.vm.box = "centos/7"
master.vm.provider "virtualbox" do |vw|
vw.name = "k8s-master"
vw.cpus = 2
vw.memory = 3072
vw.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
end
master.vm.host_name = "k8s-master"
master.vm.network "private_network", ip: "192.168.10.10"
master.vm.network "forwarded_port", guest: 22, host: 10030, auto_correct: true, id: "ssh"
master.vm.synced_folder ".", "/vagrant", disabled: true
end
### Worker node ###
(1..2).each do |i|
config.vm.define "k8s-worker#{i}" do |worker|
worker.vm.box = "centos/7"
worker.vm.provider "virtualbox" do |vw|
vw.name = "k8s-worker#{i}"
vw.cpus = 1
vw.memory = 2048
vw.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
end
worker.vm.host_name = "k8s-worker#{i}"
worker.vm.network "private_network", ip: "192.168.10.1#{i}"
worker.vm.network "forwarded_port", guest: 22, host: "1003#{i}", auto_correct: true, id: "ssh"
worker.vm.synced_folder ".", "/vagrant", disabled: true
end
end
end
VMWare에서 올려보고 싶은데 Default값이 버츄얼박스로 되어있는지 계속 버츄얼 박스로 생성된다
Provider관련된 플러그인을 사야하는건지 좀 더 찾아봐야겠다