brunch

You can make anything
by writing

C.S.Lewis

by jd Jun 26. 2022

네? 앤서블이요?

Ansible practice #1 서버 간 통신을 위한 앤서블 스크립트

생업으로 삼은 일에서 처음 접한 개념을 들을 때 엄습하는 당혹스러움과 조급함. 이를 해소하기 위한 몸부림을 기록한 글이다. 먼저 배경을 적자면, 주 2회 앤서블 스터디를 진행하고 있는데 그날마다 정한 주제를 공부한 뒤 알게 된 바를 정리 중이다. 그 첫 주제가 바로 앤서블의 인벤토리다. 얕은 지식과 짧은 시간을 들여 스스로 이해한 바를 풀어낸 결과물이므로 오류가 있을 수 있다.


앤서블이란?

먼저 앤서블은 여러 서버에 설정, 동작을 스크립트 기반으로 일괄 반영해주는 자동화 도구다. 예컨대 베어메탈 서버 1대와 호스트 서버 3대 간 SSH 접속을 활성화하는 상황을 가정해보자. 앤서블을 쓰지 않는다면 각각의 서버에 접속해 키젠 생성 및 공개 키 등록을 일일이 해줘야겠지만, 앤서블에서는 스크립트 몇 줄과 실행 명령어 한 줄만으로도 이 작업을 간단히 해낼 수 있다.


앤서블 실행에 필요한 2가지, 인벤토리와 플레이북

인벤토리는 앤서블을 실행할 서버를 등록, 그룹화해주는 파일이며, '정적 인벤토리'와 '동적 인벤토리'가 있다. 아직 후자는 미처 익히지 못해 직접 사용해본 전자에 대해서만 적는다. 정적 인벤토리는 흔히 ini 형식으로 쓰는데, yaml 파일도 가능하지만 그렇게 되면 형식이 조금 더 복잡해지는 듯하다. 오르막길보다 내리막길을 좋아하는 나는 앞으로도 이변이 없는 한 ini 형식을 고집할 예정이다.  


원래 /etc/ansible/hosts 파일이 앤서블의 기본 인벤토리이지만, 대부분의 사용자는 이것을 쓰지 않는 듯하다. 그보다는 따로 인벤토리를 만든 뒤 -i 옵션으로 해당 인벤토리를 지정해 실행하는 게 보통이다. 예컨대 이런 식이다.


ansible -i <직접 만든 인벤토리> <플레이북 파일>


내가 활용한 방법

아래 그림은 내가 만든 인벤토리 파일이다. 보이는 것처럼 [ ]을 통해 그룹 이름을 정의하는 게 기본 문법이다.

인벤토리 파일(inventory.ini)

위와 같이 그룹화를 한 이유는 2가지다. 첫째는 'servers' 그룹과 'baremetal' 그룹의 통신이 원활한지 확인하고자 했고, 둘째는 'servers' 그룹에 포함된 4개의 vm에는 각각 4~6개의 네트워크가 있는데, 이 네트워크들과 각 서버가 통신 가능한지 체크하기 위함이다. 따라서 아래와 같이 각 호스트 및 호스트의 네트워크 간 핑 테스트를 수행하는 플레이북 스크립트를 짜보았다.

플레이북 파일(ping_test.yaml)

인벤토리와 플레이북 파일이 존재하는 경로에서 ansible -i inventory.ini ping_test.yaml 명령어를 수행하면 다음과 같은 결과를 확인할 수 있으며, 어떤 부분의 네트워크가 통신이 끊겨 있는지 한눈에 확인할 수 있었다.

향후 실습을 진행하면 앤서블의 동적 인벤토리에 대한 기록도 작성하고자 한다.



참고

앤서블 공식 문서 - https://docs.ansible.com/ansible/2.3/intro_inventory.html


개발자가 앤서블 시작하기 블로그 - https://wikidocs.net/130113



작가의 이전글 도저히 위로할 수 없는 사람을 만나기 앞서
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari