Kubernetes/02. 쿠버네티스 설치 및 구성

[쿠버네티스] 사전 준비, Vagrant 를 이용하여 가상환경 구축하기 & vagrantfile 소개

Jaden Park 2021. 6. 18. 01:19

들어가며:

Vagrant 란?

Vagrant 기초 명령어 사용법 소개

Vagrant Install 및 가상환경 구축

Vagrantfile

 

들어가며:

가상머신, 하이퍼바이저, 프로비저닝에 대한 사전 지식이 있다면 더 효과적으로 글을 읽을 수 있습니다.


 

Vagrant 란?

Vagrant는 운영체제 시스템에 대하여 쉬운 Provisioning을 할 수 있습니다. 주로 가상머신을 생성하고 관리할 때 사용할 수 있습니다.

가상머신을 사용자의 요구에 맞게 Host name, IP, Service Install 등 다양한 환경을 미리 설정하고 사용자가 원할 시 해당 시스템을 즉시 사용할 수 있도록 해주는 Provisioning 도구 입니다.

Vagrant를 사용하지 않는 가상머신 생성 및 관리 방법

virtualBox에 각각의 개별 가상머신을 생성하고 접속하여 한대씩 설정해야 합니다.

 

 

 

Vagrant를 사용한 가상머신 생성 및 관리 방법

vagrantfile 을 통하여 해당 파일에 가상머신에 대한 설정과 해야할 작업을 미리 정의한 후 virtualBox를 통해 Provisioning 할 수 있습니다. 이렇게 Vagrant를 통해 가상머신을 Provisioning 할 경우 가상머신을 간편하게 생성/삭제/수정 할 수 있습니다.

하이퍼바이저로 VMWare, Hyper-V 등을 사용할 수도 있습니다.


Vagrant 기초 명령어 사용법 소개

vagrant init

vagrant를 프로비저닝 하기 위한 초기 파일(Vagrantfile)을 생성합니다

 

vagrant up

작성한 Vagrantfile을 바탕으로 프로비저닝을 진행합니다

 

vagrant halt

vagrant 에서 관리하는 가상머신을 종료합니다

 

vagrant destroy

vagrant 에서 관리하는 가상머신을 삭제합니다

 

vagrant ssh

vagrant 에서 관리하는 가상머신에 ssh로 접속합니다

 

vagrant status

vagrant 의 가상머신 동작상태를 확인할 수 있습니다.

 

vagrant provision

vagrant 에서 관리하는 가상머신의 설정을 변경하고 적용합니다


Vagrant Install

우분투 18.04 환경에서 진행할 예정이기 때문에 vagrant 홈페이지에서 데비안 계열로 설치하면 됩니다.

$ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
$ sudo apt-get update && sudo apt-get install vagrant

 

설치를 완료했다면 실습을 위해 폴더를 만들어줍니다.

$ mkdir -p vagrant/k8s && cd vagrant/k8s

 

init 명령으로 프로비저닝하기위한 vagrantfile 생성해줍니다.

$ vagrant init

 

Vagrantfile 을 아래와 같이 작성해줍니다.

$ cat 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

 

vagrant-hostmanager 는 게스트머신에서 호스트파일을 관리하는 플러그인 입니다.

1.5.0 버전부터 vagrant up 으로 프로비저닝이 발생하기 전에 hostmanager를 실행하기 때문에 사전에 설치를 해주어야합니다.

up 명령으로 작성한 Vagrantfile 을 바탕으로 프로비저닝을 진행합니다.

$ vagrant plugin install vagrant-hostmanager
$ vagrant up

 

status 명령으로 각 노드들이 running 되고 있는 것을 확인합니다.

$ vagrant status

 

 

vagrant ssh 로 노드에 접속이 성공하면 완료입니다.

passwd 는 vagrant 입니다.

$ vagrant ssh kube-control1


Vagrantfile

Vagrantfile의 주요 기능은 프로젝트에 필요한 머신 유형과 이러한 머신을 구성하고 프로비저닝하는 방법을 설명하는 vm 환경설정 파일입니다.

Vagrantfiles의 구문은 Ruby 이지만 대부분 간단한 변수 할당이므로 Vagrantfile을 수정하는 데 Ruby 프로그래밍 언어에 대한 지식이 필요하지 않습니다.

 

Configuration Version

구성 버전은 Vagrant 1.1+ 가 Vagrant 1.0.x Vagrantfiles 와 하위호환성을 유지하면서 새로운 기능과 구성 옵션을 도입할 수 있는 매커니즘 입니다.

Vagrant.configure("2") do |config|
  # ...
end

"2" 첫 번째 라인 위의 구성 객체의 버전을 나타냅니다.

현재 지원하는 버전은 "1" 과 "2" 두 가지 뿐입니다.

버전 "1"은 Vagrant 1.0.x 구성을 나타내고, "2"는 2.0.x 까지 이어지는 1.1+ 의 구성을 나타냅니다.

단일 구성 섹션 내에서 단일 버전만 사용할 수 있다는 것을 유념해야합니다.

config.vm.provider 는 버전 1 구성 섹션에서는 새 구성을 사용할 수 없습니다.

마찬가지로 config.vm.forword_port 는 버전 2 구성 섹션에서 작동하지 않습니다. (이름이 변경됌)

 

Minimum Vagrant Version

버전 호환성 이슈를 최소화 하기 위해서 vagrant 최소 요구 버전을 맨 위에 명시합니다.

Vagrant.require_version ">= 1.3.5"
Vagrant.require_version ">= 1.3.5", "< 1.4.0"

 

Loop Over VM Definitions (vm 정의 루프 사용하기)

여러 같은 종류의 머신의 경우 반복문으로 설정 세팅할 수 있습니다.

(1..3).each do |i|
  config.vm.define "node-#{i}" do |node|
    node.vm.provision "shell",
      inline: "echo hello from node #{i}"
  end
end

# THIS DOES NOT WORK!
for i in 1..3 do
  config.vm.define "node-#{i}" do |node|
    node.vm.provision "shell",
      inline: "echo hello from node #{i}"
  end
end

 

config.vm

config.vm.box(문자열) - 가상머신에 가져올상자를구성합니다.여기의 값은 설치된 상자의 이름이거나HashiCorp의 Vagrant Cloud에있는 상자의 축약형 이름이어야합니다.

config.vm.provider - 프로비저닝에 사용할 하이퍼바이저 제공자를 선택합니다.

config.vm.network -기기에 네트워크를 구성합니다.

더 자세한 설정은 이곳을 참조하시기 바랍니다.