쿠버네티스 클러스터 구축하기 - 1 / 가상머신 세팅 - Vagrant & VMware Workstation 사용

언젠간 해봐야지 하고 미뤄뒀던 로컬 쿠버네티스 클러스터 구축을 시도한 과정을 공유하고자 한다.

 

이번 포스팅에서는 쿠버네티스 클러스터 구축을 위한 가상머신 세팅 과정을 담고 있다.

 

다음 포스팅에선 구성한 가상머신을 통해 쿠버네티스 클러스터를 구축하는 과정을 공유할 예정이다.

 

HyperVisor는 기존의 VMware Workstation 17을 사용하고, Vagrant를 사용하여 자동화와 확장성을 확보하여 클러스터에서 사용할 가상머신들을 프로비저닝했다.

 

Vagrant는 Virtual Box와 연동성이 좋지만, 원래 사용하던 VMware Workstation 17에 익숙하기도 하고 이를 삭제하고 싶지 않아서 Virtual Box를 사용하지 않았다.


# 구성 Specification

  • Local K8s Cluster Setup
  • HyperVisor: VMware Workstation17
  • Master Node 1, Worker Node 2
  • K8s Version: 1.28
  • CRI: Containerd(Planned)
  • CNI: Calico(Planned)
  • OS: Ubuntu 20.04

Master Node

  • CPU: 3
  • RAM: 6GB
  • Disk: 60GB 128GB

Worker Node

  • CPU: 2
  • RAM: 4GB
  • Disk: 20GB 128GB

# Why Vagrant? 

Vagrant는 사용자가 요청한 명세서(Vagrantfile)를 바탕으로 원하는 하이퍼바이저에게 가상머신을 사용할 수 있도록 요청해주는 역할을 수행한다.

 

Dockerfile처럼 Vagrantfile을 통해서 원하는 프로비저닝 상태를 정의한다.

 

실무 환경에선 사용하기 어렵지만 테스트 용도로 사용하기 좋고, 집에서 여러번 K8s Cluster를 만들 수 있을 것 같아 Vagrant를 사용하기로 결정했다.

 

Vagrant는 플러그인을 바탕으로 여러 하이퍼바이저와 연계가 가능하다.

 

 XShell 등을 사용해서 별도의 터미널 없이 vagrant ssh를 통해 간편하게 접속이 가능하다.

 

즉, 확장성과 자동화를 위해 가상머신을 Vagrant를 통해 프로비저닝하였다.


수행 절차

Host 환경은 Window 11, AMD CPU를 사용한다.

 

  1. Host PC에 Vagrant 설치
  2. VMware Workstation Plugin 설치
  3. Vagrantfile 작성
  4. 가상 머신 프로비저닝

1. Vagrant Installation

 

Install | Vagrant | HashiCorp Developer

Explore Vagrant product documentation, tutorials, and examples.

developer.hashicorp.com

 

공식 사이트에 들어가서 시스템 환경에 맞는 설치 바이너리 파일을 다운로드 받을 수 있다.

 

 

별다른 설정 없이 기본 값으로 설치를 진행했다.

 

설치 이후 PC를 재부팅해야 설정이 적용된다고 한다.

vagrant 설치 완료


2. VMware Workstation Plugin 설치

 

Providers | Vagrant | HashiCorp Developer

While Vagrant ships out of the box with support for VirtualBox, Hyper-V, and Docker. Vagrant has the ability to manage other types of machines as well. This is done by using other providers with Vagrant.

developer.hashicorp.com

 

마찬가지로 공식 사이트에서 플러그인 설치 가이드를 확인해보자.

공식 문서 가이드

 

Vagrant VMware Utility를 필수적으로 설치하고나서 Vagrant VMware provisider plugin을 설치해야한다는 사실을 확인할 수 있었다.

 

우선 Vagrant VMware Utility를 설치하면,

 

Install | Vagrant | HashiCorp Developer

Explore Vagrant product documentation, tutorials, and examples.

developer.hashicorp.com

 

위의 절차로 유틸리티를 설치를 할 수 있다.

 

이후, vagrant-vmware-desktop 플러그인을 설치하면 된다.

vagrant plugin install vagrant-vmware-desktop


3. Vagrantfile 작성

명세서를 작성하기 전에, 최초 Vagrant 환경 세팅을 위해 새로운 디렉토리를 생성하고 해당 경로에서 vagrant init 명령어를 실행해야한다.

 

이를 수행하면 자동으로 Vagrantfile이 생성되었음을 확인할 수 있다.

 

최초 환경은 다음과 같다.

vagrant init 후 생성된 Vagrantfile

 

이제 원하는 프로비저닝 상태를 Vagrantfile에 작성하면 된다.

 

`vagrant up` 명령어를 통해 프로비저닝을 실행하고, 실행 중인 가상머신을 종료하기 위해선 `vagrant halt`, 삭제는 `vagrant destroy`을 입력하면 된다.

 

vagrant는 디렉토리를 기준으로 동작하므로, 현재 위치에 존재하는 Vagrantfile에 의존한다.
따라서, 현재 vagrant init을 수행한 디렉토리를 잘 기억하고 이 디렉토리에서 작업을 실시해야 한다.

 

$pre_install = <<-SCRIPT
  echo ">>>> pre-install <<<<<<"
  echo 'root:test1234' | sudo chpasswd
  sudo apt-get update
SCRIPT

# 추후 K8s Cluster 구축 스크립트
$mater_config = <<-SCRIPT
  echo ">>>> Master Node Config <<<<<<"
SCRIPT

$worker_config = <<-SCRIPT
  echo ">>>> Worker Node Config <<<<<<"
SCRIPT

Vagrant.configure("2") do |config|
  # Master 노드 설정
  config.vm.define "master" do |master|
    master.vm.box = "generic/ubuntu2004"
    master.vm.network "private_network", ip: "192.168.1.100"
    master.vm.provider "vmware_desktop" do |v|
      v.vmx['displayname'] = "Master"
      v.gui = true 
      v.memory = 6144 # 6GB
      v.cpus = 3
    end
    master.vm.hostname = "master"
    master.vm.provision "shell", inline: $pre_install
  end

  # Worker 노드 설정
  (1..2).each do |i|
    config.vm.define "worker#{i}" do |worker|
      worker.vm.box = "generic/ubuntu2004"
      worker.vm.network "private_network", ip: "192.168.1.10#{i}"
      worker.vm.provider "vmware_desktop" do |v|
        v.vmx['displayname'] = "Worker#{i}"
        v.gui = true 
        v.memory = 4096
        v.cpus = 2
      end
      worker.vm.hostname = "worker#{i}"
      worker.vm.provision "shell", inline: $pre_install
    end
  end
end

 

이것저것 시도하면서 성공한 최초의 요구사항을 맞춘 Vagrantfile이기 때문에 참고하면 된다.

 

vagrant에 대해 깊게 알아보는 것이 목적이 아니였기 때문에 자세한 설명은 생략한다.


4. Provisioning with Vagrant

`vagrant up` 을 통해 Vagrant를 동작시키면, 아래와 같이 프로비저닝이 시작된다.

프로비저닝 수행 중

 

프로비저닝은 완료되었고, 단순하게 VM 3개만 올렸으므로, 별다른 설정은 되어있지 않다.

 

현재 동작 중인 가상 머신들을 확인하기 위해선 `vagrant status` 명령어를 사용하면 된다.

vagrant status 결과

 

프로비저닝된 가상머신들의 스펙을 확인해보면 다음과 같았다.

 

Master Node

 

Worker Node

 

CPU, RAM, NIC 등등은 정상적으로 붙어있음을 확인할 수 있었고, 사설 주소로 192.168.1.0/24를 설정만 했는데, 자동으로 NAT 인터페이스도 붙어서 인터넷이 가능했다. 이는 원래 Workstation 네트워크 설정과 일치해서 문제가 안생긴 것 같다.

 

다만, 요구와 달랐던 부분은 Disk 용량인데, 가상머신들에게 부착된 Disk가 128GB임을 확인할 수 있다.

 

128GB까지 사용할 필요가 없어서, 이를 Vagrant에서 설정하는 방법을 찾아봤다.


Virtual Box를 사용하면 간편하게 Disk 설정을 수행할 수 있는 플러그인이 있지만, VMware에는 별다른 지원이 없었다.

 

Vagrant에서 디스크를 추가적으로 붙이는 것은 가능하지만, 기존에 사용중인 Primary Disk Size를 줄이는 방법은 Shell 명령어를 사용할 수 밖에 없었다.

 

또한, 128GB로 Disk를 할당한 이유는 OS가 설치된 Vagrant Box 설정을 따라가기 때문임을 알 수 있었다.

 

Workstation과 Window를 뒤적거리다가 가상 머신들이 Thin Provisiong 형태로 Disk를 사용하는 것을 알 수 있었고, 여기에 시간을 투자하고 싶진 않아 그대로 사용하기로 결정했다. 설치된 게임들을 등가교환하긴 했다...

 

아무튼 Disk 부분을 제외하면, 가상 머신들이 정상적으로 프로비저닝되었다.


# 정리

K8s Cluster 구축을 위한 가상머신 세팅은 마쳤다.

 

Vagrant로 가상머신 프로비저닝을 수행했기 때문에 구성 자동화와 확장성을 가질 수 있었다. IaC 도구를 사용하는 이유를 알게 되었다.

 

금일 수행한 과정을 시각화해보면, 아래의 구조를 갖는다.

 

다음 포스팅에선 해당 가상머신들을 바탕으로 쿠버네티스 클러스터를 생성하고, 간단한 Pod 배포까지 수행해볼 예정이다.

 

해당 구성도는 아래와 같다.


Vagrant 명령어 - CLI

공식 문서에서 제공하는 것 중 자주 사용되는 명령어만 정리하면 아래와 같다.

명령어 동작
vagrant up Vagrantfile에 따라 프로비저닝을 실시
vagrant halt Vagrantfile을 바탕으로 현재 동작 중인 가상머신을 중지
vagrant destroy Vagrantfile을 바탕으로 현재 중지된 가상머신을 삭제
vagrant destroy -f Vagrantfile을 바탕으로 가상머신을 강제 삭제(중지하지 않아도 됨)
vagrant status Vagrant를 통해 프로비저닝된 가상머신들의 상태 확인
vagrant ssh [name | id] Vagrant가 관리하는 가상 머신 중 하나에 SSH 접속

 

더 자세한 명령어는 아래의 공식 문서에서 확인할 수 있다.

 

Command-Line Interface | Vagrant | HashiCorp Developer

Almost all interaction with Vagrant is done via the command-line interface.

developer.hashicorp.com

728x90
반응형