본문 바로가기

네트워크 & 클라우드/자동화

Ansible 기초 2 - Vagrant로 기본 세팅하기

Vagrant는 가상머신에 시스템 환경을 구축하고 관리하는데 편의성을 제공하는 툴이다.
다수의 머신을 각각 생성하고 관리한다면 그건 너무 불편하다. 
생각만 해도 불편하다.
그냥..불편하다.

이번에는 Vagrant라는 툴을 이용해서 설치 및 테스트를 진행해보자
Notepad++, Vagrant 설치하기

 - 웹에서 Notepad++, Vagrant 다운로드 받아 설치

 - CMD에서 C:\HashiCorp로 이동하여 Vagrant init 명령어 실행 (Vagrantfile 생성됨)

 - C:\HashiCorp 폴더에서 Vagrant init으로 생성된 'Vagrantfile'을 Notepad++로 실행

 - 하기의 config.vm.box = "base"를 Centos로 수정해야함. box는 가상머신 이미지를 뜻함.

  (나는 CentOS를 사용하나 우분투와 같은 다른 OS를 사용하고 싶은 사람은 그렇게 해도 됨. 강요는 안함)

수정 전

 - https://vagrantcloud.com/search 에 들어가서 사용하는 OS를 찾아서 base 부분을 수정해주자

 

수정 후

 

- 그리고 호스트(윈도우)와 VM(CentOS)간의 공유 폴더는 설정이 번거로워 사용하지 않도록 세팅한다
  좀만 내려서 config.vm.synced_folder부분을 수정해주면 된다. 

수정 전
수정 후 (주석도 지워줬다)

 

Vagrant 확장 플러그인 설치

 - 이거 설치하지 말자.. 이거 때매 진행이 안됐음. 다른건 저기 아래에 있음.

설치 과정에서 호스트 방화벽을 오픈 해줘야 하는 경우도 있다!

 

Vagrant UP

 - VagrantFile 내용 토대로 vm을 프로비저닝 함.

 

자동으로 생성됨. > <

※ 참고
vagrant init = 프로비저닝을 위한 예제 스크립트 생성 (Vagrantfile)
vagrant up = Vagrantfile을 읽어 프로비저닝을 진행                 
vagrant halt = Vagrant에서 다루는 호스트들 종료
vagrant destroy = destroy라는 단어 그대로 호스트들을 날려버린다.
vagrant ssh = vagrant 호스트 접속. 당연히 ssh로.
vagrant provision = vagrant 호스트의 설정 변경 적용

 

Vagrantfile 수정

 

 bootstrap.sh 만들기

새파일 생성!
"bootstrap.sh"로 저장하면 bash파일로 인식해버린다.

vagrant up을 통해 프로비저닝 해보즈아.

virtualbox를 초기화해준다.
vagrant up 명령어를 통해 vagrantfile에 정의한 내용으로 프로비저닝 고고!

 

앞서 설치한 vagrant-vbguest plugin으로 인해 설치가 제대로 안되거나, 일부 설정이 프로비저닝이 안되는 케이스가 있다.

그냥 삭제 해보자.

vagrant plugin uninstall vagrant-vbguest 고고 하자!


Vagrant를 이용하여 Ansible Playbook 환경 구성
[Vagrantfile]
 - Ansible_env_ready.yml 파일을 Ansible-Server에 전달/실행

[bootstrap.sh]
 - /home/vagrant/.vim/autoload, /home/vagrant/.vim bashrc : vim pluging 저장될 디렉토리 생성
 - vim과 bash의 환경 설정 파일 생성

[Ansible_env_ready.yml]
 - yum으로 vim-enhanced, git(플러그인 다운을 위해) 설치
 - pathogen.vim 플러그인을 설치 (수동설치와는 다른 것)
 - vim-ansible-yaml을 git clone을 통해 다운
 - vim 환경설정(vimrc), bash(bashrc) 환경설정을 수정

[VagrantFile]

 - 2개의 라인 추가 및 약간의 수정을 했다.

   자세한 설명은 주석을 보시라

그래 주석을 보자

 

[bootstrap.sh]

 - vagrant 유저만 해당하는 환경설정 디렉토리 및 파일 생성

[Ansible_env_ready.yml]

- 앤서블 실행 준비파일을 생성해보자.

작성이 완료되었으면, vagrant provision 명령어로 ansible-server의 설정을 변경해보자

...

Ansible_env_ready.yml에서 마지막쯤에 있던 vimrc, bashrc 환경파일 수정까지 봤다면 완료라고 봐야겠다.

 

이제 확인해보자.

분명히 vagrantfile에 작성한대로 Ansible_env_ready.yml이 호스트에 복사가 되었을 것이다.

그리고 vim도 색이 이쁘게 입혔을 것이다.

제발...

우선 yml 파일은 있다..

vi로 열어보자 (vim은 alias로 vi 지정함)


Vagrant로 노드 생성 하기!
[Vagrantfile]
- Ansible-node CentOS로 2개 추가 구성
- Ansible-server와 동일하게 진행하나 아래 두개만 설정 추가
  1) virtualbox의 cpu/memory값 수정
  2)  Ansible-Server에서 add_ssh_auth.sh을 실행

[add_ssh_auth.sh]
- sshpass를 이용해 앤서블 서버에 앤서블 노드 ssh_key를 등록. 서버에서 ssh방식으로 노드를 관리하기 위함

[Ansible_env_ready.yml]
- hosts파일에 서버와 노드 등록
- /etc/ansible/hosts에 Ansible을 통해 관리할 노드들을 입력
- sshpass를 설치함

[vagrantfile]

- Ansible-server를 복사해서 Ansbile-Node01/02에 대한 내용을 수정해준다.

- cpu/memory를 변경해주는 설정과 ip/port를 변경해주자.

- Ansible-server에도 한줄 추가한다

- 접속하는 계정인 vagrant로 add_ssh_auth.sh을 추가하기 위한 설정. (루트 권한이 필요 없어서 privileged: false)

 

[add_ssh_auth.sh]

- 생성해보자

 

[Ansible_env_ready.yml]

- tasks에 3개 추가해보자!

 

코드를 실행시켜보자

 - 1안) 현재 생성되어 있는 Ansible-Server를 제거하고 한번에 server, node 다 설치

 - 2안) Ansible-Server를 Provision하고, vagrant up을 통해 node01-02 로딩

 

나는 1안으로 다 날리고 vagrant up으로 모두 로딩한다. 

사라짐...

- Vagrant up 명령어로 프로비저닝 생성해보자. 노트북 팬이 갑자기 쎄게 돌아간다.

확인해보자

- ssh key

- cat /etc/hosts

- cat /etc/ansible/hosts

잘 된 것 같다.

그런데 ansible all -m ping -k 를 하고 패스워드를 입력해도 잘 먹히지 않는다.

이는 centos 서버의 sshd_config(etc/ssh/에 있음)에서 패스워드로의 접속을 허용하지 않았기 때문.

 

그럼 어디 한번 허용 한번 해보자.

각 노드들로 들어가서 설정을 변경해주는 것은 ansible을 하는 의미가 없다.

yaml로 해도되고, bash로 해도 되지만, 둘다 해보는게 좋으므로 ansible-server는 yaml 파일로, ansible-node는 bash 파일로 만들어서 설정을 적용해보겠다.

 

[vagrantfile]

- Ansible-Node를 위해 'bash_ssh_conf_4_CentOS.sh'이라는 bash shell을 복사하고 실행하는 코드를 작성했다.

- 그리고 Server는 'Ansible_ssh_conf_4_CentOS.yml'을 복사하고 실행하는 코드를 실행해보았다.

 

[bash_ssh_conf_4_CentOS.sh]

 - 원본 파일 백업하고, 스트리밍 편집기로 PasswordAuthentication을 Yes로 변경하는 코드

 

[Ansible_ssh_conf_4_CentOS.yml]

 

Vagrant provision 명령어로 프로비저닝 하고, 다시 ping을 날려보자!

 

nginx 설치

- vi nginx_install.yml

- ansible-playbook nignx_install.yml -k 

 

시간대 변경하기

- vi timezone.yml

- ansible-playbook timezone.yml -k

 

NFS Client&Server 구성하기

- vi nfs.yml

- ansible nfs.yml -k

- 확인