[Vagrant] 가상 머신 설정 및 네트워크 구성
가상머신을 4대를 설치하고 네트워크를 설정하는 과정을 베이그런트로 자동으로 설치하도록 파일을 작성합니다.
메인 노드 설정
먼저 Vagrant 파일을 에디터를 통해서 열어줍니다.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "m-k8s" do |cfg|
cfg.vm.box = "sysnet4admin/CentOS-k8s"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "m-k8s(github_SysNet4Admin)"
vb.cpus = 2
vb.memory = 2048
vb.customize ["modifyvm", :id, "--groups", "/k8s-SM(github_SysNet4Admin)"]
end
cfg.vm.host_name = "m-k8s"
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: "install_pkg.sh"
cfg.vm.provision "file", source: "ping_2_nds.sh", destination: "ping_2_nds.sh"
cfg.vm.provision "shell", path: "config.sh"
end
end
책의 저자인 조훈님께서 작성하신 코드입니다. 먼저 베이그런트에서 루비로 코드를 읽어 들일 때의 API 버전으로 2를 설정합니다. 이 베이그런트의 설정은 config를 통해 시작합니다. 가상머신의 이름을 m-k8s로 정하고 cfg로 설정을 지정합니다. 베이그런트의 코드를 실행할 것이 virtualbox임을 지정합니다.
이 버추얼박스의 이름과 cpu 개수, 메모리를 정하고 그룹을 지정합니다.
호스트명을 정하고 호스트 전용 네트워크를 설정하여 eth1 인터페이스를 호스트 전용으로 지정합니다. 그리고 ssh 통신에 대해서 설정하는데 60010번 호스트에서 오는 요청을 22번 포트로 전달되도록 포워딩설정하도록 합니다. 포트가 중복되면 변경될 수 있도록 auto_correct를 true로 설정합니다.
PC 혹은 노트북과 같은 호스트와 가상머신인 게스트 사이에서 data/vagrant 디렉터리가 서로 동기화 되지 않도록 disabled를 true로 설정합니다.
이제 프로비전을 작성합니다. 셸을 통해 가상 머신에 필요한 패키지를 설치합니다. 셸 파일은 install_pkg.sh 입니다.
cfg.vm.provision "shell", path: "install_pkg.sh"
yum install epel-release -y
yum install vim-enhanced -y
EPEL 저장소를 먼저 만들어 패키지를 저장할 수 있도록 하고 vim 에디터를 설치합니다.
cfg.vm.provision "file", source: "ping_2_nds.sh", destination: "ping_2_nds.sh"
그 다음 파일을 가상 머신에 전달합니다. 노트북(호스트)에 있는 ping_2_nds.sh 파일을 가상머신(게스트)의 홈 디렉터리에 전달합니다.
cfg.vm.provision "shell", path: "config.sh"
게스트에서 config.sh 파일을 셸로 실행합니다.
chmod 744 ./ping_2_nds.sh
ping_2_nds.sh 파일을 전달받고 실행하기 위해 권한을 744로 줍니다.
노드 추가
(1..3).each do |i|
config.vm.define "w#{i}-k8s" do |cfg|
cfg.vm.box = "sysnet4admin/CentOS-k8s"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "w#{i}-k8s(github_SysNet4Admin)"
vb.cpus = 1
vb.memory = 1024
vb.customize ["modifyvm", :id, "--groups", "/k8s-SM(github_SysNet4Admin)"]
end
cfg.vm.host_name = "w#{i}-k8s"
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: "install_pkg.sh"
end
end
end
마스터 노드와 같은 과정이지만, i 변수로 각각 다르게 설정할 수 있도록 합니다. ip값 또한 변경시킵니다. 각각의 가상머신에도 패키지를 설치합니다.
이제 Vagrant 파일이 담긴 디렉터리에서 cmd를 통해 vagrant up으로 CentOS를 설치합니다. 설치 및 연결 후에 홈 디렉터리에 있는 ping_2_nds.sh를 실행하여 통신을 확인합니다. bash에서 ./ping_2_nds.sh를 입력하여 실행합니다.