Ansible을 공부하게 된 계기
앤서블(ansible)은 데이터 분산처리 플랫폼 구축을 위해 클러스터를 구성하면서 알게 되었다. 처음 클러스터를 구성할 때는 직접 쉘 스크립트로 함수를 작성하여 사용하였다. 그 때 사용했던 함수는 다음과 같다.
1 | function clustercmd { |
위 함수는 clustercmd
뒤에 입력하는 명령어를 다른 노드들에도 똑같이 적용해주는 함수이다. 만약 클러스터 하나만 만들면 되는 상황이라면 이렇게 필요한 함수들을 하나씩 만들어 사용하는 것도 나쁘지 않다. 하지만 테스트를 위한 클러스터 구축이라면?
만약 테스트를 10번 한다고 하면 똑같은 반복 업무를 10번 해야 한다. 그 와중에 환경변수 설정하다가 오타 났는데 모르고 넘어가는 경우도 태반이고, 결국 제대로 클러스터 구축이 안되면 처음부터 끝까지 구축 프로세스를 훑어야 한다. 음..너무 귀찮고 또 귀찮다.
그래서 처음 ansible
을 시작했을 때는 테스트용 클러스터를 좀 더 빠르고 편하게 만들기 위해서였다. 또한 실제로 그렇게 사용하고 있다. ansible
은 시스템 엔지니어나 Devops 엔지니어들이 많이 사용하는 도구이고, 사용해본 결과 엄청 편하다.
그렇다면 도대체 앤서블은 무엇인가?
Ansible 이란
앤서블(Ansible)은 파이썬으로 구현된 오픈소스이며, 그동안 직접 쉘 스크립트로 일일이 수행했던 인프라 작업들을 코드로 해결할 수 있도록 해주는 도구이다. 예를 들어 각 서버에 소프트웨어를 배포하거나 환경설정 및 컨피그레이션을 수정하는 것 같은 일들도 자동화할 수 있다.
Ansible 특징
앤서블의 특징으로는 크게 2가지가 있다.
에이전트리스(Agentless)
엔서블은 관리하는 서버들에 에이전트를 설치하지 않고도 프로그램을 배포하거나 환경 변수, 컨피그레이션 등을 변경할 수 있다. 이런 방식이 가능한 이유는 각 서버들과 SSH 통신을 하여 유저가 요구한 작업들을 진행하기 때문이다.멱등성
멱등성은 어떤 연산이나 코드를 여러 번 반복해도 동일한 결과를 도출하는 성질을 의미한다. 엔서블은 특정 코드들을 여러 번 실행시켜도 똑같은 결과를 제공한다.
Ansible 구성요소
앤서블의 구성요소 목록은 다음과 같다.
- 관리자 노드 (Control node)
- 관리 노드 (Managed node)
- 인벤토리 (Inventory)
- 컬렉션 (Collection)
- 모듈 (Module)
- 과제 (Task)
- 플레이북 (Playbook)
간단하게 각각의 역할에 대해서 살펴보자.
controller(관리자 노드)
관리자 노드는 앤서블 명령어를 실제 입력하는 노드이다. 해당 서버에서는 아래에서 살펴볼 플레이북을 실행할 수 있다. 해당 서버에는 파이썬과 앤서블이 설치되어 있어야 한다. 관리자 노드로 사용하기 위해 체크해야 하는 중요한 부분은 바로 인터넷 접속 여부와 OS이다. 윈도우 서버로 관리자 노드가 될 수는 없으며, 인터넷 접속도 가능해야 한다.
target(관리 노드)
관리 노드는 실제 앤서블이 관리하는 서버들을 통칭한다. 앤서블은 에이전트리스로 실행되기 때문에 관리 노드들에 무언가를 따로 설치할 필요는 없다. 보통 관리노드는 인벤토리에 저장하여 사용한다.
inventory
인벤토리는 관리 노드들에 대한 정보를 기술한 파일이다. 보통은 노드 목록과 그룹핑을 정의하기 때문에 호스트파일(hostfile)이라고도 부른다. 또한 인벤토리는 그룹에 따라 변수들을 생성할 수 있다. 인벤토리의 예시는 아래와 같다.
1 | [all] |
playbook
플레이북은 관리 노드들에게 적용할 작업들을 모아놓은 yml 파일이다. 플레이북에는 크게 name, hosts, tasks 요소가 필수적으로 들어간다. hosts를 통해서 각 작업들의 대상을 특정할 수 있기 때문에 하나의 파일에 대상이 다른 작업도 입력할 수 있다. 또한 인벤토리 파일에 작성한 변수들을 가져다가 그대로 사용할 수도 있다. 변수를 입력하는 문법은 python의 jinja2와 동일하다. 플레이북의 예시는 아래와 같다.
1 | # playbook example |
task
테스크는 플레이북의 tasks에 들어가는 요소들을 의미한다. 위의 예시에서는 "stop and disable firewalld"
, "stop and disable tuned"
가 테스크라고 볼 수 있다. 앤서블에서 플레이북으로 명령을 시작하면 해당 플레이북 안에 있는 테스크가 순차적으로 진행되며, 이후 작업 결과에서 몇 개의 테스크가 성공하고 싷패했는지 알려준다.
module
마지막으로 살펴볼 모듈은 앤서블 테스크를 작성할 때 사용되는 템플릿이다. 위 예시를 바탕으로 살펴보자.
1 | - |
해당 테스크는 명령어 systemctl stop tuned && systemctl disable tuned
을 엔서블 테스크로 작성한 것이다. 여기서 service
라는 딕셔너리에 관리할 프로세스의 이름, 변경하려는 상태 등을 입력하면 위 명령어처럼 작동하는 것이다. 저 service
가 모듈이다. 즉, 앤서블에서 CLI로 입력하는 명령어에 대한 사용 툴이라고 볼 수 있다. 현재 앤서블에서 제공하는 모듈들의 종류는 매우 많으며, 앤서블 문서에서 모듈 리스트를 확인할 수 있다.
앤서블에 대한 개괄적인 설명은 끝났다. 다음 글부터는 앤서블을 설치 및 사용법에 대해서 자세히 살펴보자.