테스트 환경 구성

이지우·2023년 4월 15일
0

쿠버네티스

목록 보기
3/9

일관성 있는 결과를 얻으려면 프로젝트 환경이 가능한 한 일정하게 생성되고 유지돼야 함
-> 코드형 인프라로 인프라 환경을 일정하게 유지하고 구성

코드형 인프라(IaC, Infrastructure as Code)
: 코드로 하드웨어를 설정, 운영 체제 설치, 네트워크 구성, 개발 환경 구축
: 코드로 인프라를 소프트웨어처럼 다룰 수 있음


베이그런트

테스트 (cmd)

  1. vagrant init(베이그런트 초기화)

  2. Vagrantfile을 에디터 프로그램(VS Code)으로 열고 파일에서 config.vm.box = "base" 있는지 확인

  3. varant up 실행 -> 에러 발생

  4. 운영 체제 이미지 선택
    베이그런트 클라우드에 접속 -> sysnet4admin 검색 -> CentOS-k8s 확인

  5. Vargrantfile 파일 config.vm.box = "sysnet4admin/CentOS-k8s"로 변경

  6. vagrant up 실행

  7. 버추얼박스 실행하여 가상 머신 확인

  8. vagrant ssh 실행

  9. uptime, cat /etc/redhat-release 실행

  10. exit로 나와서 vagrant destroy -f 실행 (삭제)

자주 사용하는 베이그런트 명령

vagrant init
: 프로비저닝을 위한 기초 파일 생성

vagrant up
: Vagrantfile을 읽어 들여 프로비저닝 진행

vagrant halt
: 베이그런트에서 다루는 가상 머신 종료

vagrant destroy
: 베이그런트에서 관리하는 가상 머신 삭제

vagrant ssh
: 베이그런트에서 관리하는 가상 머신에 ssh로 접속

vagrant provision
: 베이그런트에서 관리하는 가상 머신에 변경된 설정 적용


가상 머신에 필요한 설정 자동으로 구성하기

베이그런트 코드는 루비 언어로 작성

코드 입력

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
  end    
end
  • 1~2번째 줄
    : 에디터에 현재 파일이 루비(ruby) 임을 인식하게 하는 호환 코드
    : 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번째 줄
    : 베이그런트의 프로바이더(proⅵder)가 버추얼박스라는 것을 정의
    : 프로바이더는 베이그런트를 통해 제공되는 코드가 실제로 가상 머신으로 배포되게 하는 소트프웨어
    : 버추얼박스에서 필요한 설정을 정의하는데, 그 시작을 do |vb|로 선언

  • 7~11번째 줄
    : 버추얼박스에 생성한 가상 머신의 이름, CPU 수, 메모리 크기, 소속된 그룹을 명시
    : 마지막으로 end를 적어 버추얼박스 설정이 끝났음을 알림

  • 12번째 줄
    : 가상 머신 자체에 대한 설정으로, do |cfg|에 속한 작업
    : 호스트의 이름(m-k8s)을 설정

  • 13번째 줄
    : 호스트 전용 네트워크를 private_network로 설정
    : eth1 인터페이스를 호스트 전용(Host-only)으로 구성
    : IP는 192.168.1.10으로 지정

  • 14번째 줄
    : ssh 통신은 호스트 60010번 을 게스트 22번으로 전달되도록 구성
    : 포트 중복을 대비해 auto-correct: true 로 설정해서 포트가 중복되면 포트가 자동으로 변경 되도록 함

  • 15번째 줄
    : 호스트(PC 또는 노트북)와 게스트(가상 머신) 사이에 디렉터리 동기화가 이뤄지지 않게 설정 (disabled: true)

  • 16~17번째 줄
    : 설정 작업(do |config|, do |cfg|)이 종료됐음을 end 구문으로 명시
    : do와 end의 들여쓰기 (indentation) 위치가 정확하게 일치해야 함

코드 실행

  1. vagrant up 실행

  2. vagrant ssh 실행

  3. ip addr show eth1 입력해 ip 설정 확인 (192. 168. 1. 10)

  4. exit


추가 패키지 설치

코드 입력

# -*- 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번째 줄
    : νm.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의 추가 기능을 설치

  1. vagrant provision 명령으로 추가한 프로비전 구문 실행

  2. vagrant ssh 명령 실행

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

  4. vi .bashrc 실행하여 문법 하이라이트 적용됐는지 확인

  5. :q 눌러서 vi 프로그램 종료, exit
    vagrant destroy -f 명령으로 가상 머신 삭제


가상 머신 추가 구성

코드 입력

# -*- 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| # 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 # 메모리를 1GB 사용하도록 변경
        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
  • 18번째 줄
    : 파일을 게스트 운영 체제에 전달하기 위해 "shell"이 아닌 "file" 구문으로 변경
    : 호스트에 있는 ping_2_nds.sh 파일을 게스트의 홈 디렉터리(/home/vagrant)로 전달

  • 19번째 줄
    : config.sh를 게스트에서 실행

  • 26~37번째 줄
    : 추가한 3대의 CentOS에 대한 구성
    : 기존 CentOS와 동일하나, 3대를 효울적으로 구성하기 위해 반복문을 사용
    : 반복은 (1..3).each로 이루어지며, 해당 값은 |i| 를 통해 #{i}로 치환돼 사용됨

추가 패키지 설치 스크립트 작성 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.101 -c 3
ping 192.168.1.101 -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 줌

코드 실행

  1. vagrant up 실행

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

  3. vagrant ssh m-k8s 입력 (가장 먼저 설치된 가상머신 이름)

  4. ./ping_2_nds.sh 파일을 실행해 통신 문제 없는지 확인

  5. 이상 없으면 exit

profile
노력형 인간

0개의 댓글