맘가는 대로
베이그런트 파일 설정 본문
목적
베이그런트와 버추얼 박스를 통해 빠르게 서버를 생성하는 것을 확인하였다.원하는 서버 환경 구성을 위해서는 Vagrantfile 이라는 베이그런트 서버 설정 목적의 파일을 조정해야 한다.
베이그런트를 통해 많은 서버 설정을 미리 설정하는 것이 가능하지만, 많이 사용되는 설정을 위주로 설명하도록 하겠다.
기본 파일 받기
vagrant 는 Ruby 로 작성된 프로그램이며, Vagrantfile 도 Ruby 를 통해 작성하게 된다. 따라서 기본적으로 Ruby 문법을 따르며, Vagrant 문법을 사용하여 설정하게 된다.
다만, 일일이 Vagrantfile 뼈대를 작성하는 것은 힘든 일이기 때문에 아래의 명령어를 통해 바로 파일을 생성할 수 있다.
vagrant init
생성된 파일을 확인해보면 다음과 같은 내용이 포함되어 있다.
1 에서 2 번째 줄을 제외한 # 을 통해 표시한 모든 주석은 유용한 내용이지만 지우도록 한다.
깔끔하게 여기서부터 시작하는 것이 편하다.
(추가)
혹은 아래의 명령어를 입력하여 주석이 없는 파일을 사용할 수 있다.
vagrant init --minimal (혹은 vagrant init <VM 이미지명> --minimal)
기본 이미지 설정
우선, 사용할 서버의 기본 이미지부터 정한다. 엔터프라이즈 환경에서 주로 쓰이는 리눅스 배포판인 CentOS 를 사용할 것이다. 설정은 아래와 같이 한다. CentOS 이외에도 많은 기본 이미지가 제공되고 있으므로 출처의 기본 이미지 검색 링크를 활용하도록 한다.
호스트명 설정
호스트 명을 통해서 구분하도록 하자. 목적에 맞게 설정해주는 것이 도움이 될 것이다.
네트워크 설정
시스템의 구성 요소중 네트워크는 복잡한 요소중 하나이다. 따라서 크게 신경쓰지 않고 바로 사용할 수 있도록 하는 설정을 사용하도록 하겠다.
주의할 점은 다른 변수들과는 다르게 ‘=’ 을 통해 할당하지 않고 바로 private_network 속성을 준다는 점이다. = 을 써서 문법 오류가 발생할 수 있으므로 주의한다.
이 설정을 통해 주어지는 네트워크는 사설 네트워크로, 호스트 OS 에서만 접근이 가능하다. 브릿지 네트워크를 통한 외부 네트워크 접속 허용은 개발 목적으로 버추얼박스를 사용할 경우 그렇게 권장되지는 않는 설정이기 때문에 필요할 경우에만 public_network 설정을 이용할 것을 권장한다.
자원 설정
서버에 사용할 자원을 설정해준다. 원하는 만큼 설정할 수 있으나 사용하고 있는 호스트 컴퓨터의 여유분을 계산하여 최대치에 도달하지 않게 하며, OS 가 필요한 최소한의 자원을 주도록 한다. 보통 배포판과 관련된 공식 홈페이지에서 필요 사항을 적어줄 것이다.
네트워크 설정과 마찬가지로 ‘=’ 을 통해 설정하지 않는다. cpus 속성을 통해 가상 CPU 갯수와 memory 속성을 통해 가상 메모리를 할당한다. 이 때 단위는 MiB 이다. 각 속성 앞의 v 는 할당된 변수명을 따른 것이며, do 뒤의 변수명을 바꾸면 그에 맞추면 된다. 즉 아래와 같이 할 수도 있다.
이는 Ruby 문법을 따른 것이기 때문에 기본적으로 주어진 config 도 이에 맞다. 다만, 변경할 의미가 없어서 따르게 되며, 이같은 기법은 이후 말할 멀티 노드 생성에 도움이 되기 때문에 미리 알아두면 좋다.
쉘 프로비저닝
자동화의 꽃인 프로비저닝이다. 이후 IaaC(Infrastructure as a Code) 이해에 큰 도움이 될 설정이며, 원하는 설정을 미리 입력만 해놓으면 베이그런트가 미리 해주는 설정이기 때문에 많은 활용이 있을 설정이다. 우선, 가볍게 shell 프로비저닝을 통해 자주 사용할 Vim 에디터를 설지하는 설정을 넣는다.
단 한줄이지만 베이그런트를 통한 프로비저닝은 조금 이해가 필요한 요소들이 있다. 우선, 기본 이미지를 생성하는 규칙중 하나인 계정은 베이그런트를 통한 접속은 반드시 vagrant 계정을 이용한다는 것이다. 또한 관리자 계정이어야 한다는 것이다. 따라서 sudo 를 통해 권한 상승을 해야 한다는 것이다.
또한 프로비저닝중 커맨드가 0 이 아닌 종료 코드를 접하게 되면 바로 프로비저닝이 종료된다는 것이다. 따라서 어떠한 프롬프트도 바로 통과할 수 있도록 yum 의 -y 옵션을 사용해야 한다.
서버 생성
자, 이제 설정한 설정들이 정확하게 적용되는지 확인해 볼 차례이다. 아래의 명령어를 입력하여 서버를 생성한다.
vagrant up
명령어를 입력하면 열심히 서버를 올리는 프로그램이 내뱉는 정보 메시지들을 확인할 수 있다. 베이그런트를 사용할 때 마다 자주 볼 것이며, 생성중에 발생하는 오류들을 디버깅하기 위해 봐두는 것을 권한다. 중요한 메시지만 간단하게 보도록 하자.
우선, 메시지의 앞에 보이는 default 는 서버명을 의미한다. 현재 멀티 노드가 아닌 단일 노드 생성만을 하기 때문에 default 로 표시된다.
base box ‘centos/7’ 은 기본 서버 이미지를 centos/7 을 사용한다는 것이다.
centos/7 이미지가 최신 이미지인지 확인한다. 이 때 네트워크 접속을 통해 확인하기 때문에 일종의 불필요한 오버헤드가 된다. 이는 Vagrantfile 의 별도의 설정을 통해 하지 않도록 설정할 수 있다.
config.vm.box_check_update = false 한 줄만 추가하면 된다.
nat 은 기본적으로 추가되는 네트워크이다. nat 인터페이스를 이용하여 외부와 통신한다. hostonly 네트워크는 private_network 설정을 통해 추가된다. 이를 통해 호스트에서 게스트 OS 로 바로 통신이 가능해진다.
SSH 접속을 위해 nat 인터페이스에 포트 포워딩 설정을 하는 것이다. 멀티 노드 혹은 여러개의 베이그런트 노드를 생성할 경우 포트포워딩 포트가 이미 점유된 상태일 수가 있는데, 그 때에는 베이그런트에 정한 규칙으로 다음 포트를 사용하고 기록하기 때문에 특별히 신경쓸 필요는 없다.
마찬가지로 베이그런트 기본이미지 생성 규칙과 관련된 메시지이다. 베이그런트 이미지는 정해진 키 파일과 비밀번호를 사용하게 되어있다. 보안적으로 문제가 있기 때문에 키파일을 바꾸고 있다고 알리는 메시지이다.
호스트 명을 변경하고 있다.
마지막으로 프로비저닝을 한다. 설정한 프로비저너는 쉘이기 때문에 shell 이라고 표시된다. 이후부터는 프로비저닝 메시지이고, 여기서는 YUM 패키지 매니저를 통해 설치되는 메시지가 전달된다.
서버 확인
자, 서버가 생성이 되었으니 접속하여 확인한다. 아래의 명령어를 입력한다.
vagrant ssh
바로 확인할 수 있는 점이 있다. vagrant 계정을 통해 접속하게 되며, 호스트 명은 설정한대로 vagrant-test 가 되어 있다.
네트워크를 확인해 보자.
루프백 인터페이스인 lo, nat 인터페이스인 eth0, private_network(hostonly) 인터페이스인 eth1 가 있다. 물론, eth1 인터페이스에 배정된 ip 는 vagrantfile 에서 설정한 10.10.10.10 이 설정되어 있다.
자원 확인
CPU 와 메모리를 확인해보자.
CPU 갯수를 보면 설정한 1 개가 사용되는 것을 볼 수 있다. 이외 여러 정보는 현재 호스트에서 사용중인 CPU 정보가 나타난다.
설정한 256 MiB 의 메모리가 사용중인 것을 확인할 수 있다.
Vim 이 설치되었는지 확인해보자
이를 통해 정상적으로 설정한 바대로 서버가 설정된 것을 확인할 수 있다.
마치며
베이그런트는 빠르게 서버를 설정하고 올려주기 때문에 개발자는 물론, 많은 관리자들에게도 개발과 연구에 도움이 될 것이라고 생각되며, 실제로도 많은 IT 종사자들이 사용하고 있다.
이 글이 베이그런트를 사용하려는 사람들에게 도움이 되었으면 한다.
출처
매뉴얼 - https://www.vagrantup.com/docs/index.html
VM 이미지 검색 - https://app.vagrantup.com/boxes/search
기타
사용 터미널 - Git Bash
사용 에디터 - MS Visual Studio Code
https://code.visualstudio.com/
'자동화 > 베이그런트' 카테고리의 다른 글
베이그런트 멀티 노드 생성 (0) | 2019.06.01 |
---|---|
베이그런트 설치 및 실행 (0) | 2019.06.01 |