"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커" 책 보고 공부하기
2.2 베이그런트로 테스트 환경 구축하기
베이그런트로 Virtualbox 에 가상 머신을 설치하는 방법을 알아보았다.
이번에는 Vagrantfile 을 수정하여 원하는 구성이 자동으로 CentOS 에 입력해도록 해보자.
2.2.1 가상 머신에 필요한 설정 자동으로 구성하기
앞에서는 Vagrantfile 에 기존에 있던 이미지 파일을 추가해 가상 머신을 생성했다.
이번에는 원하는 구성을 자동으로 생성할 수 있도록 Vagrantfile 을 새롭게 작성해 보겠다.
Vagrant 코드는 루비(Ruby)라는 언어로 작성한다.
코드 입력
# -*- mode: ruby -*- // 에디터에 현재파일이 루비(ruby)임을 인식하게 하는 호환 코드
# vi: set ft=ruby : // ft는 파일 종류(file type) 의 약자.
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
end
end
- 8 line: "2"는 베이그런트에서 루비로 코드를 읽어 들여 실행할 때 작동하는 API 버전이고, 뒤의 do |config| 는 베이그런트 설정의 시작을 알린다.
- 17 line: Virtualbox 에서 보이는 가상 머신을 "m-k8s" 로 정의하고, do |cfg| 를 추가해 원하는 설정으로 변경한다. 이렇게 do |이름| 으로 시작한 작업은 end 로 종료한다.
- 18 line: 기본값 config.vm.box를 do |cfg|에 적용한 내용을 받아 cfg.vm.box로 변경한다.
- 19 line: 베이그런트 프로바이더(provider) 가 Virtualbox 라는 것을 정의한다. provider 는 베이그런트를 통해 제공되는 코드가 실제로 가상 머신으로 배포되게 하는 소프트웨어. Virtualbox 가 여기에 해당. 다음으로 Virtualbox 에서 필요한 설정을 정의하는데, 그 시작을 do |vb| 로 선언한다.
- 20 line: Virtualbox 로 생성한 가상 머신의 이름.
- 21 line: Virtualbox 로 생성한 가상 머신의 CPU.
- 22 line: Virtualbox 로 생성한 가상 머신의 메모리.
- 23 line: Virtualbox 로 생성한 가상 머신이 소속된 그룹.
- 25 line: 여기서부터는 가상 머신 자체에 대한 설정으로, do |cfg| 에 속한 작업. 호스트의 이름(m-k8s)을 설정.
- 26 line: 호스트 전용 네트워크를 private_network 로 설정해 eth1 인터페이스를 호스트 전용(Host-Only)으로 구성하고 ip는 192.168.1.10 으로 지정.
- 27 line: SSH 통신은 호스트 60010번을 게스트 22번으로 전달되도록 구성한다. 이 때 혹시 모를 포트 중복을 대비해 auto_correct:true 로 설정해서 포트가 중복되면 자동으로 변경.
- 28 line: 호스트(PC 또는 노트북)와 게스트(가상 머신) 사이에 디렉토리 동기화가 이뤄지지 않게 설정(disabled:true)한다.
- 29 line: 설정 작업이 종료되었음을 명시. do와 end 의 들여쓰기(indentation) 위치가 정확하게 일치해야 함.
Tip. id: "ssh" 를 꼭 설정해야 하는가? |
베이그런트에서는 ssh 서비스의 기본 포트 번호인 22번을 id: "ssh" 로 설정하지 않으면 다음과 같이 중복된 두 개의 포트로 설정한다. 자기 자신(127.0.0.1/localhost)의 2222번 포트로 오는 내용과 모든 IP(0.0.0.0) 의 60010 포트에서 오는 내용을 게스트의 22번으로 포워딩한다. 기능적으로는 큰 문제를 일으키지 않으나 명시적으로는 좋지 않다. C:\HashiCorp>vagrant port 22 (guest) => 2222 (host) 22 (guest) => 60010 (host) C:\HashiCorp>netstat -an | findstr 2222 TCP 127.0.0.1:2222 0.0.0.0:0 LISTENING C:\HashiCorp>netstat -an | findstr 60010 TCP 0.0.0.0:60010 0.0.0.0:0 LISTENING 따라서 이와 같은 설정의 낭비를 줄이고자 id: "ssh" 로 설정해 다음과 같이 하나의 포트만 사용한다. 참고로 vagrant port는 베이그런트에서 사용하는 포트를 확인하는 명령이다. C:\HashiCorp>vagrant port 22 (guest) => 60010 (host) C:\HashiCorp>netstat -an | findstr 60010 TCP 0.0.0.0:60010 0.0.0.0:0 LISTENING |
코드 실행
1. 명령 프롬프트에서 vagrant up 명령을 실행.
vagrant up
2. vagrant up 실행이 끝나면 vagrant ssh 명령을 실행해 생성된 가상 머신(CentOS) 에 접속한다.
3. CentOS 에서 ip addr show eth1 명령을 입력해 IP(192.168.1.10) 가 제대로 설정됐는지 확인한다.
ip addr show eth1
4. exit 명령을 실행해 CentOS 접속을 종료한다.
exit
2.2.2 가상 머신에 추가 패키지 설치하기
위에서는 설정된 vagrantfile 을 통해 CentOS 에 호스트네임, IP 등을 자동으로 설정했다.
이번에는 CentOS 에 필요한 패키지를 설치하는 방법을 진행한다.
코드 입력
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"
# config.vm.box = "sysnet4admin/CentOS-k8s"
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" #add provisioning script
end
end
- vm.provision "shell" 구문으로 경로(path)에 있는 install_pkg.sh 를 게스트(CentOS) 내부에서 호출해 실행되도록 한다.
Vagrantfile이 위치한 디렉터리에서 추가 패키지를 설치하기 위한 스크립트를 다음과 같이 작성하고 install_pkg.sh 라는 이름으로 저장한다.
#!/usr/bin/env bash
# install packages
yum install epel-release -y
yum install vim-enhanced -y
Vagrantfile 에서 호출한 install_pkg.sh 로 입력해 둔 배시 셸 파일을 실행해 EPEL(Extra Packages for Enterprise Linux) 저장소와 코드 하이라이트를 위한 Vim 기능을 추가 설치한다.
코드 실행
수정한 Vagrantfile 로 추가 패키지를 설치해본다.
1. 명령 프롬프트에서 vagrant provision 명령으로 추가한 프로비전 구문을 실행한다.
vagrant provision
...
2. vagrant ssh 명령을 실행해 CentOS에 접속한다.
vagrant ssh
3. yum repolist 명령으로 추가한 EPEL 저장소가 구성됐는지 확인한다.
yum repolist
4. vi .bashrc 를 실행해 문법 하이라이트가 적용됐는지 확인한다.
vi .bashrc
5. vi 로 문법 하이라이트가 적용된 것을 확인됐다면 :q 를 눌러서 vi 프로그램을 종료하고, exit 명령으로 가상 머신에서 빠져나온다. 그 다음 vagrant destroy -f 명령으로 베이그런트를 사용해 생성한 가상머신을 삭제한다.
vagrant destroy -f
2.2.3 가상 머신 추가로 구성하기
베이그런트로 운영 체제를 자동으로 설치하고 구성하면 편리하다.
하지만, 단순히 운영 체제 1개를 구성하려고 운영 체제를 사용하지는 않는다.
그래서 이번에는 기존에 설치한 가상 머신 외에 가상 머신 3대를 추가로 설치한다. 그리고 기존의 가상 머신과 추가한 가상 머신 간에 네트워크 통신이 원할하게 작동하는 지 확인해보자.
코드 입력
vagrantfile 에 CentOS 3대와 네트워크 구성을 테스트할 파일을 추가한다.
# -*- mode: ruby -*-
# vi: set ft=ruby :
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"
# config.vm.box = "sysnet4admin/CentOS-k8s"
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" #add provisioning script
cfg.vm.provision "file", source: "ping_2_nds.sh", destination: "ping_2_nds.sh"
cfg.vm.provision "shell", path: "config.sh"
end
#=============#
# Added Nodes #
#=============#
(1..3).each do |i| # 1부터 3까지 3개의 인자를 반복해 i로 입력.
config.vm.define "w#{i}-k8s" do |cfg| # {i} 값이 1, 2, 3 으로 차례대로 치환됨.
cfg.vm.box = "sysnet4admin/CentOS-k8s"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "w#{i}-k8s(github_SysNet4Admin)" # {i} 값이 1, 2, 3 으로 차례대로 치환됨.
vb.cpus = 1
vb.memory = 1024
vb.customize ["modifyvm", :id, "--groups", "/k8s-SM(github_SysNet4Admin)"]
end
cfg.vm.host_name = "w#{i}-k8s" # {i} 값이 1, 2, 3 으로 차례대로 치환됨.
cfg.vm.network "private_network", ip: "192.168.1.10#{i}" # {i} 값이 1, 2, 3 으로 차례대로 치환됨.
cfg.vm.network "forwarded_port", guest: 22, host: "6010#{i}", auto_correct:true, id: "ssh" # {i} 값이 1, 2, 3 으로 차례대로 치환됨.
cfg.vm.synced_folder "../data", "/vagrant", disabled: true
cfg.vm.provision "shell", path: "install_pkg.sh"
end
end
end
- 30 line: 파일을 게스트 운영체제에 전달하기 위해 "shell"이 아닌 "file" 구문으로 변경한다. 이렇게 하면 호스트에 있는 ping_2_nds.sh 파일을 게스트의 홈 디렉터리(/home/vagrant)로 전달한다.
- 31 line: config.sh 게스트에서 실행한다.
- 38 ~ 53 line: 추가한 3대의 CentOS 에 대한 구성이다. 거의 모든 내용이 기존에 CentOS와 동일하나, 3대를 효율적으로 구성하기 위해 반복문을 사용한다. 반복은 (1..3).each로 이루어지며, 해당 값은 |i|를 통해 #{i}로 치환돼 사용된다.
위의 추가 패키지를 설치할 스크립트(install_pkg.sh) 와 ping 테스트 파일(ping_2_nds.sh)그리고 설정을 변경하는 스크립트(config.sh) 작성한다.
(1) 추가 패키지를 설치할 스크립트(install_pkg.sh)
(2) ping 테스트 파일(ping_2_nds.sh)
추가로 설치한 CentOS 3대로 ping 을 보내 네트워크가 제대로 작동하는지 확인하는 명령이다.
-c 옵션은 ping 횟수를 지정한다.
(3) 설정을 변경하는 스크립트(config.sh)
ping 테스트 파일(ping_2_nds.sh) 이 업로드되고 난 후에 실행할 수 있도록 권한을 744로 준다.
코드 실행
4대의 가상 머신을 구성한다. 앞에서 작성한 파일들을 Vagrantfile과 같은 위치에 저장한다.
1. vagrant up 을 실행해 총 4대의 CentOS 를 설치하고 구성한다.
vagrant up
...
(전달한 스크립트가 정상적으로 실행되는 지도 확인하자.)
2. vagrant ssh
vagrant ssh 명령으로 설치된 CentOS에 접속한다. 설치된 가상 머신이 여러 대라서 접속할 가상 머신의 이름을 입력해야 한다는 메시지가 출력된다.
2. vagrant ssh m-k8s
m-k8s 는 가장 먼저 설치된 가상 머신의 이름이다.
vagrant ssh m-k8s
3. ./ping_2_nds.sh
업로드된 ping_2_nds.sh 파일을 실행해 3대의 CentOS(192.168.1.101 ~ 192.168.1.103) 와 통신 확인.
./ping_2_nds.sh
4. exit
4대 모두 이상 없으면 exit 명령으로 가상 머신 접속 종료.
Reference
'Kubernetes > 컨테이너 인프라 환경 구축을 위한 쿠버네티스,도커' 카테고리의 다른 글
2. 테스트 환경 구성하기(3). (0) | 2022.11.21 |
---|---|
2. 테스트 환경 구성하기. (0) | 2022.11.11 |
1. 새로운 인프라 환경이 온다. (0) | 2022.11.09 |