우선 진행하기 앞 서 미리 말했듯이 맥북에서 진행할 예정이다.
우선 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 를 찾아 적용
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 이미지를 가져와 설치할 수 있다.
도커 허브에서 도커 이미지를 가져오는 것과 비슷한 방식이라고 생각하면 될 것 같다.
여기서 나는 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
https://askubuntu.com/questions/1188137/unable-to-ping-guest-10-0-2-15-on-host
https://linuxosadm.wordpress.com/2016/05/30/virtualbox-vagrant-networking-modes-nat-host-only/
https://www.virtualbox.org/manual/ch06.html#network_hostonly
https://stackoverflow.com/questions/25433488/vagrant-can-not-ping-guest-machine-from-the-host
'DevOps > kubernetes' 카테고리의 다른 글
13. 쿠버네티스 클러스터 노드 설정을 위한 스크립트 작성 및 적용 (0) | 2021.12.02 |
---|---|
12. Vagrant 가상 머신을 통해 쿠버네티스 클러스터 만들기 - 중간 점검 (0) | 2021.12.02 |
10. Vagrant 가상 머신을 통해 쿠버네티스 클러스터 생성해보기 (시작하기 전 잡담) (0) | 2021.10.15 |
9. 쿠버네티스 대시보드 설치 및 설정하기 (0) | 2021.09.15 |
8. 쿠버네티스 자동완성 기능 설정하기 (0) | 2021.08.29 |