본문 바로가기

Docker & Kubernetes

쿠버네티스(Kubernetes) - 베이그런트 (Vagrant)

(!) mac OS 기준으로 작성합니다.

 

베이그런트(vagrant)는 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요할 때 시스템을 사용할 수 있는 상태로 만들어준다. 이를 프로비저닝(provisioning)이라고 하는데, 프로비저닝을 하면 필요할 때 환경을 매우 쉽고 간단하게 구현할 수 있다. 베이그런트는 독립적으로 사용되는 도구가 아니며, 가상 머신을 생성하거나 조작하는 기능을 직접 제공하지는 않고 프로바이더라는 개념이 있어서 가상머신을 관리하는 도구(버추얼박스, 도커 등)와 조합해서 사용한다.

 

버추얼박스(virtualbox)는 이노테크(InnoTek)에서 개발한 가상화 소프트웨어로 오라클에서 배포한다. 버추얼박스는 현존하는 대부분의 운영 체제를 게스트 운영 체제로 사용할 수 있으며, 확장팩을 제외하면 아무런 제한 없이 소프트웨어의 모든 기능을 무료로 이용할 수 있다.

베이그런트와 버추얼박스 설치하기

$ brew install --cask virtualbox vagrant vagrant-manager

(vagrant와 virtualbox는 공식홈페이지에서 다운로드하여 설치도 가능하다. 본인은 brew로 설치)

베이그런트의 기본명령어

명령어 설명
vagrant init 프로비저닝을 위한 기초 파일을 생성
vagrant box list 현재 시스템에 설치된 베이그런트 박스 목록 확인
vagrabt box add 현재 시스템에 새로운 박스를 설치
vagrant up Vagrantfile을 읽어 들여 프로비저닝을 진행
vagrant status 베이그런트에서 실행된 가상 머신의 상태를 확인
vagrant halt 베이그런트에서 다루는 가상 머신을 종료
vagrant destroy
 -f : 강제종료
베이그런트에서 관리하는 가상 머신을 삭제
vagrant reload 베이그런트에서 관리하는 가상 머신을 재실행 (Vagrantfile의 내용을 반영)
vagrant ssh 베이그런트에서 관리하는 가상 머신에 ssh로 접속
vagrant provision 베이그런트에서 관리하는 가상 머신에 변경된 설정을 적용
vagrant package 베이그런트의 가상 머신을 박스 파일로 패키징
vagrant suspend 베이그런트의 가상 머신을 중지
vagrant resume 베이그런트의 가상 머신을 재개
vagrant global-status 베이그런트에서 실행된 모든 가상 머신들의 상태를 확인

베이그런트 실행

= vagrant 폴더 지정 및 VagrantFile 생성하기

# vagrant 폴더 생성할 경로로 이동 (본인은 /project)
$ cd project

# VagrantFile 생성할 폴더 생성
$ mkdir vagrant

# VagrantFile 초기화, 생성
$ 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에 들어가보면 [config.vm.box = "base"] 라는내용이 작성되어있는데, 이곳에 설치할 운영 체제 이미지를 넣어주면 된다.

이미지 검색은 https://app.vagrantup.com/boxes/search 에서 가능하다. 참고 서적에서 제공해주는 이미지를 적용해보자.

= 사용할 이미지적용

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "sysnet4admin/CentOS-k8s"
  
  # .....

(!) 이미지를 생성하는 방법은 공식문서를 참고하자. => https://www.vagrantup.com/docs/boxes/base

 

$ vagrant up

# default: Mounting shared folders...
# 아래에 나오는 에러는 Virtualbox의 게스트 에디션이 설치 되지 않아서 발생하는 오류라고 한다. 참고하자

=> virtualBox에서 잘 떴는지 확인해보자. 그리고 위의 명령어를 참고하여 삭제, 종료, 시작, 접속 등 테스트해보자

 

= VagrantFile 설정 알아보기

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

Vagrant.configure("2") do |config|
  N = 4 # 워커노드 수
  Ver = '1.18.4' # k8s version to install

  # Master 노드
  config.vm.define "master-k8s-ys-config" do |cfg|
    cfg.vm.box = "sysnet4admin/CentOS-k8s"
    cfg.vm.provider "virtualbox" do |vb|
      vb.name = "master-k8s-ys"
      vb.cpus = 2
      vb.memory = 3072
      vb.customize ["modifyvm", :id, "--groups", "/k8s-SgMST-1.13.1(github_SysNet4Admin)"]
    end
    cfg.vm.host_name = "m-k8s-ys"
    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
    cfg.vm.provision "shell", path: "./config/config.sh", args: N
    cfg.vm.provision "shell", path: "./config/install_pkg.sh", args: [ Ver, "Main" ]
    cfg.vm.provision "shell", path: "./config/master_node.sh"
  end

  # Worker 노드
  (1..N).each do |i|
    config.vm.define "w#{i}-k8s-ys-config" do |cfg|
      cfg.vm.box = "sysnet4admin/CentOS-k8s"
      cfg.vm.provider "virtualbox" do |vb|
        vb.name = "w#{i}-k8s-ys"
        vb.cpus = 1
        vb.memory = 2560
        vb.customize ["modifyvm", :id, "--groups", "/k8s-SgMST-1.13.1(github_SysNet4Admin)"]
      end
      cfg.vm.host_name = "w#{i}-k8s-ys"
      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
      cfg.vm.provision "shell", path: "./config/config.sh", args: N
      cfg.vm.provision "shell", path: "./config/install_pkg.sh", args: Ver
      cfg.vm.provision "shell", path: "./config/work_nodes.sh"
    end
  end

end

- cfg.vm.network "private_network"m ip: "192.168.1.10" 으로 설정하는경우, 발생하는 오류 해결방법 참고

=> https://mungmange.tistory.com/136

 

- ssh 통신 설정을 하는 이유는, 설정하지않으면 자동으로 2222, 60010 2개의 포트를 22번 게스트로 포워딩하는데, 설정 낭비를 줄이고자 작성한 것.

 

- cfg.vm.provision의 path에 정의된 .sh파일의 내용은 아래의 깃저장소 참고

=> https://gitlab.com/nodo3482/ys-k8s/-/tree/main/config

참고자료

= https://velog.io/@moey920/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%9D%B8%ED%94%84%EB%9D%BC-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%951

 

= https://www.44bits.io/ko/post/vagrant-tutorial#%EB%A7%A5osmacos%EC%97%90%EC%84%9C-%EB%B2%A0%EC%9D%B4%EA%B7%B8%EB%9F%B0%ED%8A%B8%EC%99%80-%EB%B2%84%EC%B6%94%EC%96%BC%EB%B0%95%EC%8A%A4-%EC%84%A4%EC%B9%98

 

= https://www.vagrantup.com/

= 서적 - 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커, 길벗 - 제 2장