728x90
반응형

우선 진행하기 앞 서 미리 말했듯이 맥북에서 진행할 예정이다.

우선 vagrant 와 VirtualBox 는 미리 설치해두었다.
설치하는 부분은 윈도우와 같이 어렵지 않으니까 쉽게 설치할 수 있었고
물론 버전에 따른 이슈가 조금 있긴 했지만 찾아보면서 잘 실행되도록 준비를 마친 상태다.

따라서 현재 VirtualBox 와 Vagrant 설치 환경은 이렇다.
VirtualBox Version  - 6.1.26 
Vagrant Version - Vagrant 2.2.18
그리고 에디터는 Visual Studio Code 를 사용할 예정이다.


VagrantFile 을 통해 VirtualBox 가상 머신 생성 요약 정리

1. VagrantFile 생성

vagrant init

2. Vagrant Box 설정

Vagrant Cloud 에서 원하는 Box 를 찾아 적용

 

Vagrant Cloud by HashiCorp

Vagrant Cloud by HashiCorp

app.vagrantup.com

3. 3개의 가상 머신 설정

VagrantFile 작성을 통해 마스터 노드와 워커 노드 2개의 가상 머신의 자원과 네트워크 설정

4. 가상 머신 생성

VagrantFile 을 통해 가상 머신 생성

vagrant up

가상 머신 상태 확인

vagrant status

5. 가상 머신 접속 확인

vagrant ssh [서버 이름]

1. VagrantFile 생성

그럼 VagrantFile 을 먼저 생성해보자.

[jaynam@MacBook-Pro ~/workspace/k8s_cluster]# vagrant init
==> vagrant: A new version of Vagrant is available: 2.2.18 (installed version: 2.2.15)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

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 이 생성된 것을 확인할 수 있다.

[jaynam@MacBook-Pro ~/workspace/k8s_cluster]# ls -rlt 
total 8
-rw-r--r--  1 jaynam  staff  3010 10 15 17:19 Vagrantfile

이제 생성된 VagrantFile 을 통해 가상 머신을 만들어주어야 한다.
생성된 파일을 확인해보자.

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

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

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

  (... 잘라내기 ...)

end

VagrantFile 을 어떻게 작성하는지에 대한 주석이 엄청 많이 달려있다.
주석을 다 지우고 나니까 몇 줄 되지 않았다.

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

Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

맨 위에 적힌 두 줄은 지우면 안된다.
그 이유는 간단한게 말해 VagrantFile 이 ruby 언어를 사용한다는 것을 알려주기 위해서다.

 

2. Vagrant Box 설정

기본적으로 박스는 base 로 기본 설정이 되어있는데 이 부분을 수정해 원하는 OS 를 설치할 수 있다.
우선 가상 머신을 생성하기 위한 이미지가 필요한데 나는 centos7 버전을 사용할 예정이다.

박스가 무엇인지는 베이그런트 문서를 통해 확인해볼 수 있다.

https://www.vagrantup.com/docs/boxes

나는 centos 7 버전의 이미지를 가져와 가상 머신을 생성하려고 한다.
하지만 기존에 virtualbox 에서는 이미지를 다운로드 받아 수동으로 넣어주었는데
베이그런트는 베이그런트 클라우드라는 곳에서 베이그런트 환경을 제공해주는 패키지를 담은 박스(Box)라는 것을 제공해주고 있다.
그래서 이 박스를 가져와 가상 머신 생성에 필요한 OS 이미지를 가져와 설치할 수 있다.
도커 허브에서 도커 이미지를 가져오는 것과 비슷한 방식이라고 생각하면 될 것 같다.

 

Vagrant Cloud by HashiCorp

Vagrant Cloud by HashiCorp

app.vagrantup.com

여기서 나는 centos 7 버전의 box 이미지를 가져와서 사용할 예정이다.

사용법에 적혀있는 것과 같이 사용하면 된다.

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

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

 

3. 3개의 가상 머신 설정

여기서 나는 3개의 가상 머신이 필요하다.
마스터 노드 1개 그리고 워커 노드 2개 -> 총 3개의 노드가 필요
그리고 마스터 노드와 워커 노드의 설정을 다르게 해줘야 하기 때문에
마스터 노드 하나를 생성하고 워커 노드 2개를 구분해서 생성해주어야 한다.
따라서 마스터노드와 워커노드 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 |vb|
      vb.name = "k8s-master"
      vb.cpus = 2
      vb.memory = 3072
      vb.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
    end
    master.vm.host_name = "k8s-master"
    master.vm.network "private_network", ip: "192.168.1.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 |vb|
        vb.name = "k8s-worker#{i}"
        vb.cpus = 1
        vb.memory = 2048
        vb.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
      end
      worker.vm.host_name = "k8s-worker#{i}"
      worker.vm.network "private_network", ip: "192.168.1.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

일단 VagrantFile 에 기존에 만들었던 마스터 노드와 2개의 워커 노드 환경에 맞게 작성해보았다.
마스터 노드와 워커 노드를 설정하는 부분에서 노드 이름, cpu, memory, ip 값만 다르게 설정 해주었다.
그리고 이전의 실습한 내용과는 다르게 ip 주소값을 10.0.2.[10-12] -> 192.168.1.[10-12] 로 변경해주었다.
그리고 IP를 변경하면서 VirtualBox 의 호스트 네트워크 관리자에서 IPv4 주소 또한 변경해주었다.

기존에는 포트 포워딩을 통해 포트를 지정해주었기 때문에 문제가 되지 않았지만
기존에 사용하던 10.0.2.10 의 IP 주소를 그대로 사용하게 되면 가상머신 간 통신이 제대로 되지 않았다.
그래서 왜 안 되는지 확인해보았다.

vagrant는 NAT 네트워크만 설정하므로 호스트에는 10.0.2.0/24에 대한 경로가 없다고 한다.
따라서 게스트에서 ping이 가능하도록 하기 위해서는 다른 IP 주소값으로 설정해주어야 한다고 한다.

호스트 전용 네트워크 관련 내용 추가 )
IP 주소를 동적할당하게 되면 192.168.56.2부터 192.168.56.254까지 임의로 지정하게 된다.
사설 
IP 주소를 지정하지 않으면 10.0.2.15라는 독립적이고 고립된 IP 주소를 할당한다고 한다.

혹시나 가상 머신간 ping 이 되지 않는다면 IP 주소값을 다르게 해서 테스트해보면 좋을 것 같다.

추가로 워커 노드의 경우 ruby 언어에서의 반복문을 사용해서 여러 개의 워커 노드를 만들어주었는데
(1..2) 부분을 (1..N) 으로 하고 N 을 전역 변수로 설정해서 값을 지정해도 된다.
나중에 N 의 값을 통해 워커 노드의 개수를 지정할 수 있기 때문에 관리가 편해진다.

처음 작성해보다 보니 어떻게 하는지 몰라 이것 저것 찾아보았다.
가상 머신의 provider 를 virtualbox 로 설정했고 가상 머신에 대한 기본 자원들을 설정해주었다.

그리고 synced_folder 부분은 가상 머신에 파일을 동기화해서 사용하는 건데
나는 disabled 설정을 해주어 동기화를 비활성화 해주었다.

 

4. 가상 머신 생성

이제 vagrant up 명령을 통해 가상 머신을 생성해보자.

[jaynam@MacBook-Pro ~/workspace/k8s_cluster]# vagrant up
Bringing machine 'k8s-master' up with 'virtualbox' provider...
Bringing machine 'k8s-worker1' up with 'virtualbox' provider...
Bringing machine 'k8s-worker2' up with 'virtualbox' provider...
==> k8s-master: Importing base box 'centos/7'...
==> k8s-master: Matching MAC address for NAT networking...
==> k8s-master: Checking if box 'centos/7' version '2004.01' is up to date...
==> k8s-master: Setting the name of the VM: k8s-master
==> k8s-master: Clearing any previously set network interfaces...
==> k8s-master: Preparing network interfaces based on configuration...
    k8s-master: Adapter 1: nat
    k8s-master: Adapter 2: hostonly
==> k8s-master: Forwarding ports...
    k8s-master: 22 (guest) => 10030 (host) (adapter 1)
==> k8s-master: Running 'pre-boot' VM customizations...
==> k8s-master: Booting VM...
==> k8s-master: Waiting for machine to boot. This may take a few minutes...
    k8s-master: SSH address: 127.0.0.1:10030
    k8s-master: SSH username: vagrant
    k8s-master: SSH auth method: private key
    (... 싹둑 ...)
==> k8s-worker2: Machine booted and ready!
==> k8s-worker2: Checking for guest additions in VM...
    k8s-worker2: No guest additions were detected on the base box for this VM! Guest
    k8s-worker2: additions are required for forwarded ports, shared folders, host only
    k8s-worker2: networking, and more. If SSH fails on this machine, please install
    k8s-worker2: the guest additions and repackage the box to continue.
    k8s-worker2: 
    k8s-worker2: This is not an error message; everything may continue to work properly,
    k8s-worker2: in which case you may ignore this message.
==> k8s-worker2: Setting hostname...
==> k8s-worker2: Configuring and enabling network interfaces...
[jaynam@MacBook-Pro ~/workspace/k8s_cluster]# vagrant status
Current machine states:

k8s-master                running (virtualbox)
k8s-worker1               running (virtualbox)
k8s-worker2               running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

가상 머신 생성이 끝나고 나서 virtualbox 에서 가상 머신이 생성된 것을 확인할 수 있었고
ping 이 제대로 가는 것을 확인했다.

[vagrant@k8s-master ~]$ ping 192.168.1.11 -c 3
PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.
64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.417 ms
64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.677 ms
64 bytes from 192.168.1.11: icmp_seq=3 ttl=64 time=0.727 ms

--- 192.168.1.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.417/0.607/0.727/0.135 ms


[vagrant@k8s-master ~]$ ping 192.168.1.12 -c 3
PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data.
64 bytes from 192.168.1.12: icmp_seq=1 ttl=64 time=0.383 ms
64 bytes from 192.168.1.12: icmp_seq=2 ttl=64 time=0.339 ms
64 bytes from 192.168.1.12: icmp_seq=3 ttl=64 time=0.488 ms

--- 192.168.1.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 0.339/0.403/0.488/0.064 ms

 

vagrant 를 통해 VirtualBox 가상 머신을 생성하는 부분까지 해보았다.
하지만 아직 몇 가지 해결해야할 문제가 남아있다.

1. vagrant ssh 명령어를 통해 접속은 되지만 putty 로 접속이 되지 않는다. (ssh 접속 문제)

이 문제는 아마 sshd 설정과 관련된 문제라고 생각된다.
그래서 vagrant 에 적용할 스크립트에 수정사항을 추가해 해결할 예정이다.

2. VirtualBox 그룹화 설정이 잘 되지 않는다. -> 추가로 알아봐야 할 문제

이 문제는 어떻게 해결해야할 지 잘 모르겠지만 한번 시간내서 찾아봐야할 것 같다.

 

- 참고 사이트 - 

https://jsonobject.tistory.com/329

 

Vagrant, Windows에서 나만의 가상머신 개발환경 구축하기

개요 개발자에게 VM은 이미 익숙한 개념이다. VM 덕분에 매번 고통스러운 환경설정 없이 나만의 개발환경을 순식간에 구축할 수 있으며 필요할 때마다 여러 개발환경을 전환할 수도 있다. Vagrant

jsonobject.tistory.com

https://askubuntu.com/questions/1188137/unable-to-ping-guest-10-0-2-15-on-host

 

unable to ping guest 10.0.2.15 on host

I am beginner of ubuntu, and i have installed ubuntu 16.04 on my desktop computer, then installed Vagrant by following steps sudo apt-get install virtualbox sudo apt-get install vagrant vagrant bo...

askubuntu.com

https://linuxosadm.wordpress.com/2016/05/30/virtualbox-vagrant-networking-modes-nat-host-only/

 

VirtualBox (Vagrant) networking modes: NAT & host-only

      I’ve been using VirtualBox for quite some time to spin up virtual machines locally on my MS/Ubuntu/Mac desktop/laptop, most times using default settings. After adopting Vagrant months a…

linuxosadm.wordpress.com

https://www.virtualbox.org/manual/ch06.html#network_hostonly

 

Chapter 6. Virtual Networking

This networking mode enables you to interconnect virtual machines running on different hosts. Technically this is done by encapsulating Ethernet frames sent or received by the guest network card into UDP/IP datagrams, and sending them over any network avai

www.virtualbox.org

https://stackoverflow.com/questions/25433488/vagrant-can-not-ping-guest-machine-from-the-host

 

Vagrant: can not ping guest machine from the host

I have Mac OS with installed vagrant. On guest machine I have Ubuntu 12. So, what I would like to do is ping guest machine from host. Guest machine attached to NAT (according to VirtualBox setting...

stackoverflow.com

 

728x90
반응형
복사했습니다!