2.1 테스트 환경을 자동으로 구성하는 도구
베이그런트로 버추얼박스에 가상 머신 설치하기
2.1.1. 버츄얼박스 설치
https://www.virtualbox.org/wiki/Downloads
설치 시 버전 6.1.12 버전으로 설치
https://www.virtualbox.org/wiki/Download_Old_Builds_6_1

설치 시 설정은 디폴트값으로


설치 시 최신 버전으로 다운받으라는 문구가 나오는데 무시

설치 완료
2.1.2. 베이그런트 설치
https://developer.hashicorp.com/vagrant/downloads
사이트 들어가서, 윈도우용으로 설치
2.1.3. 베이그런트 구성하고 테스트
1. 명령 프롬포트를 실행하고 베이그런트 설치 디렉토리로 이동
vagrant init 명령으로 프로비저닝에 필요한 기본 코드 생성
$ cd c:\HashiCorp
$ vagrant init

>> 자주 쓰이는 베이그런트 명령어
vagrant init : 프로비저닝을 위한 기초 파일을 생성
vagrant up : Vagrantfile을 읽어 들여 프로비저닝 진행
vagrant halt : 베어그런트에서 다루는 가상 머신 종료
vagrant destroy : 베이그런트에서 관리하는 가상 머신 삭제
vagrant ssh : 베이그런트에서 관리하는 가상 머신에 ssh로 접속
vagrant provision : 베이그런트에서 관리하는 가상 머신에 변경된 설정 적용
2. 베이그런트 초기화 명령으로 생성된 c:\HashiCorp 폴더의 Vagrantfile을 열고 config.vm.box = "base"라는 내용이 있는지 확인


3. 확인 후, cmd에서 vagrant up 실행
> 에러 발생 (설치하려는 이미지가 'base'로 명시되어 있으나 베이그런트가 해당이미지를 찾지 못 함)

4. 에러 발생하지 않게 운영체제 이미지 선택 (https://app.vagrantup.com/boxes/search)
> 원래는 가상 머신의 이미지를 선택하여 필요에 맞게 수정해야 하나, 복잡하기 떄문에 만들어진 가상 이미지 사용

5. Vagrantfile 수정 후 저장
> config.vm.box = "base" 를 config.vm.box = "sysnet4admin/CentOS-k8s"로

6. 다시 한 번 vagrant up으로 실행 및 확인

....중략...

** 참고로 진행 마지막 단계에서 발생하는 에러(vagrant was unable to mount VirtualBox shared folders)는 버추얼박스의 게스트 에디션이 설치되지 않아서 발생함.
지금 과정에서는 필요하지 않아 설치하지 않음
7. 설치 후, 버추얼박스 실행해 가상 머신이 잘 작동하는지 확인

8. vagrant ssh 명령을 실행해 설치된 CentOS에 접속
$ vagrant ssh

9. 설치가 정상적으로 이뤄졌는지 CentOS의 실행 시간(uptime)과 운영 체제의 종류(cat /etc/redhat-release)확인
$ uptime
$ cat /etc/redhat-release

10. CentOS가 베이그런트로 버추얼박스에 설치되었기 때문에 설치한 가상 머신 삭제
$ vagrant destroy -f


2.2 베이그런트로 테스트 환경 구축하기
Vagrantfile을 수정해 원하는 구성이 자동으로 CentOS에 입력되도록 설정하기
2.2.1. 가상머신에 필요한 설정 자동으로 구성하기 (Vagrantfile)
- 베이그런트 코드: 루비(Ruby)
코드 입력 (처음 두 줄 외의 #주석 코드는 지워도 무관)
# -*- 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
end
end

1~2: 루비임을 인식하게 하는 호환 코드 (ft: file type)
3: "2"는 베이그런트에서 루비로 코드를 일ㄷ어 들여 실행할 때 작동하는 API 버전, do |config| : 베이그런트 설정의 시작
4: 버추얼박스에서 보이는 가상 머신을 "m-k8s"로 정의, do |cfg|를 추가해 원하느 설정으로 변경
이렇게 do |이름|으로 시작한 작업은 end로 종료
5: 기본값 config.vm.box를 do |cfg|에 적용한 내용을 받아 cfg.vm.box로 변경
6: 베이그런트의 프로바이더가 버추얼박스라는 것을 정의. 버추얼박스에서 필요한 설정을 정의하는데, 그 시작을 do |vb|로 선언
7~11: 버추얼박스에서 생성한 가상 머신의 이름, CPU 수, 메모리 크기, 소속된 그룹 명시
12: 여기서부터는 가상 머신 자체에 대한 설정, do |cfg|에 속한 작업
12번째 줄은 호스트의 이름(m-k8s)설정
13: 호스트 전용 네트워크를 private_network로 설정해 eth1 인터페이스를 호스트 전용으로 구성하고 ip설정
14: ssh통신은 호스트 660010번을 게스트 22번으로 전달되도록 구성
포트 중복을 대비해 auto_correct: true로 설정해 포트가 중복되면 포트가 자동으로 변경되도록 설정
15: 호스트(PC 또는 노트북)와 게스트(가상 머신) 사이에 디렉터리 동기화가 이뤄지지 않게 설정(disabled: true)
16~17: 설정 작업(do |gonfig|, do |cfg|)가 종료됨을 end 구문으로 명시, do와 end의 들여쓰기 위치가 정확해야 함
코드 실행(작성한 Vagrant로 가상 머신 생성)
1. 명령 프롬프트에서 vagrant up 다시 실행
$ cd c:\HasiCorp
$ vagrant up

2. vagrant up 실행이 끝나면 vagrant ssh 명령을 실행행 생성된 가상 머신(Cent OS)에 접속
$ vagrant ssh

3. CentOS에서 ip addr show eth1 명령을 입력해 IP(192.168.1.10)가 제대로 설정됐는지 확인
$ ip addr show eth1

4. exit명령을 실행해 CentOS 접속 종료
$ exit

2.2.2 가상 머신에 추가 패키지 설치
코드 입력
- Vagrantfile에 셸 프로비전 추가
# -*- 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" #add provisioning script
end
end
16: vm.provision "shell"구문으로 경로에 있는 install_pkg.sh를 게스트(CentOS)내부에서 호출해 실행

Vagrantfile이 위치한 디렉터리에서 추가 패키지를 설치하기 위한 스크립트를 작성 후 install_pkg.sh라는 이름으로 저장

#!/usr/bin/env bash
# install packages
yum install epel-release -y
yum install vim-enhanced -y

Vagrnatfile에서 호출한 install_pkg.sh로 입력해 둔 배시 셸 차일을실행해 EPEl 저장소와 코드 하이라이트를 위한 Vim 추가 기능 설치가 됨
코드 실행(앞에서 수정한 Vagrnatfile로 추가 패키지 설치)
1. 명령 프롬프트에서 실행한 vagrant provision 명령으로 추가한 프로비전 구문 실행
$ vagrant provision

2. vagrant ssh 명령을 실행해 CentOS에 접속
$ vagrant ssh

3. yum repolist 명령으로 추가한 EPEL 저장소가 구성됐는지 확인
$ yum repolist

4. vi.bashrc를 실행해 문법 하이라이트가 적용됐는지 확인
$ vi .bashrc


5. vi로 문법 적용 확인, exit로 가상 머신에서 나옴.
vagrant destroy -f 명령으로 베이그런트를 사용해 가상 머신 삭제

2.2.3 가상 머신 추가로 구성하기
- 기존에 설치한 가상 머신외에 가상 머신 3대를 추가로 설치하여, 기조니의 가상 머신과 추가 가상 머신 간에 네트워크 통신이 원활히 작동하는지 확인
코드 입력
Vagrnatfile에 CentOS 3대와 네트워크 구성을 테스트할 파일 추가
# -*- 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
#=============#
# Added Nodes #
#=============#
(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

18: 파일을 게스트 운영 체제에 전달하기 위해 "shell"이 아닌 "file" 구문으로 변경.
이렇게 하면 호스트에 있는 ping_2_nds.sh 파일을 게스트의 홈 디렉토리(/home/vagrant)로 전달
19: config.sh를 게스트에서 실행
26~37: 추가한 3대의 CentOS에 대한 구성, 3대를 효율적으로 구성하기 위해 반복문 사용
이전처럼 추가 패키지를 설치하는 스크립트 작성
install_pkg.sh
#!/usr/bin/env bash
# install packages
yum install epel-release -y
yum install vim-enhanced -y
ping 테스트 파일 작성
ping_2_nds.sh
# ping 3 times per nodes
ping 192.168.1.101 -c 3
ping 192.168.1.102 -c 3
ping 192.168.1.103 -c 3
추가로 설치한 CentOS 3대로 ping을 보내 네트워크가 제대로 작동하는지 확인하는 명령어
-c 옵션: 몇 번의 ping을 보낼 것인지
설정을 변경하는 스크립트 작성
config.sh
#!/usr/bin/env bash
# modify permission
chmod 744 ./ping_2_nds.sh
ping 테스트 파일(ping_2_nds.sh)이 업로드되고 난 후에 실행할 수 있도록 권한을 744로 줌
코드 실행
- 4대의 가상 머신 구성. 앞에서 작성한 파일은 Vagrant와 같은 위치에 저장
1. vagrant up을 실행해 총 4대의 CentOS를 설치하고 구성
$ vagrant up


2. vagrant ssh 명령으로 설치된 CentOS에 접속.
설치된 가상 머신이 여러 대라 접속할 가상 머신의 이름을 입력해야 한다는 메시지가 출력됨.
$ vagrant ssh

3. vagrant ssh m-k8s를 입력. m-k8s는 가장 먼저 설치된 가상 머신의 이름
$ vagrant ssg m-k8s

4. 업로드 된 ping_2_nds.sh 파일을 실행해 3대의 CentOS(192.168.101~103)와 통신하는 데 문제가 없는지 확인
$ ./ping_2_nds.sh

5. 4대 모두 이상 없음이 확인됐으니 exit 명령으로 가상 머신 접속 종료
$ exit

2.3 터미널 프로그램으로 가상 머신 접속하기
여러 대의 가상 머신에 한 번에 접속하도록 구성
2.3.1 푸티 설치
1. 푸티 실행 파일을 저장할 디렉터리(C:\putty)를 실행
$ mkdir C:\putty

2. 웹 브라우저에서 푸티 다운로드 페이지에 접속. (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
Alternative binary files 항목에서 운영 체제0 및 버전에 맞는 putty.exe. 실행 파일을 C:\putty 디렉터리에 받음

3. 내려받은 putty.exe 파일을 실행해 정상적으로 구동하는지 확인

푸티로 여러 대 가상 머신에 접근할 수 잇지만, 한 번에 한 대씩만 접근 가능.
우리가 원하는 것은 한 번에 여러 대의 가상 머신에 접근해서 관리하는 것이므로 추가 프로그램 설치
2.3.2 슈퍼푸티 설치
1. 깃허브 페이지(https://github.com/jimradford/superputty/releases)에서 최신 버전 파일 내려받기

2. 모두 기존 그대로 두고 설치


3. 슈퍼푸티는 푸티를 통해 실행되므로 푸티의 우치 지정 필요.
다음 화면이 보이면 putty.exe Location 옆의 Browse 버튼을 클릭해 푸티의 위치 지정

4. C:\putty에서 putty.exe를 찾아 선택하고 열기

5. 푸티 실행 경로가 지정된 것을 확인하면 ok

6. 슈퍼푸티가 정상적으로 실행되는지 확인

2.3.3 슈퍼푸티로 다수의 가상 머신 접속
가상 머신 4대(m-k8s, w1-k8s, w2-k8s, w3-k8s)에 접속
반복적으로 사용할 가상 머신의 접속 정보부터 슈퍼푸티에 구성
1. 새로운 세션 디렉토리 생성

2. 접속 정보 입력창에서 k83를 입력하고, ok

3. 새로 추가된 k8s 디렉토리에서 New선택

4. 가상 머신 정보를 입력하는 창에 다음과 같이 입력 후 save

5. m-k8s에서 Copy As를 선택해 m-k8s의 접속 정보 복사 > 복사한 접속 정보에서 표시된 부분만 맞춰 수정하고 save



6. 평문으로 접속하려면 슈퍼푸티의 보안 설정 변경 필요
F2누르거나 Tools > Options 선택
GUI 탭에서 Allow plain text passwords om putty command line 항목을 체크 후 ok

7. k8s디렉토리에서 마우스 우클릭 > Connect All을 선택해 모든 가상 머신에 한 번에 접속

8. 슈퍼푸티가 푸티를 호출하면서 발생한 파일 열기-보안 경고 창 확인.
다음부터 이 경고 창이 보이지 않도록 이 파일을 열기 전에 항상 확인에 대한 체크 해제
이후 가상 머신의 수(4개)만큼 실행 버튼 클릭
9. 가상 머신에 접속되는지 확인 및 편의를 위해 창 분리


10. 4개의 창에 한 번에 명령이 실행되는지 명령 창에서 hostanme을 입력해 확인


11. 확인이 끝났으니 다음 실습을 위해 가상 머신 모두 삭제
명령 프롬프트에서 vagrant destory -f
$ vagrant destroy -f

'공부 (`・ω・´)ゞ > 쿠버네티스' 카테고리의 다른 글
3.1 쿠버네티스 이해하기 (0) | 2023.03.06 |
---|