Ansible 기본 개념

Ansible Components
Ansible Logo

기본 소개

Ansible은 여러 대의 서버를 효율적으로 관리하기 위해 만들어진 자동화 툴입니다.
이 툴을 소개하면서 많이 이야기 하는 것이 Infrastructure as a Code 라는 개념인데, 인프라의 상태를 코드로 표현하여 배포함으로써 간편하게 관리할 수 있다는 장점을 강조하고 있습니다.
간단하게 Ansible을 소개를 드리자면 Ansible을 이용하면 Contoller에서 SSH로 접근이 가능한 모든 서버(또는 장비)는 모두 관리하에 둘 수 있습니다.

기본 아키텍처

Ansible Architecture

위 그림은 제가 임의로 그린 Ansible Architecture입니다. 제일 상단의 GCP는 무시해주세요.
Ansible은 다른 툴들과 마찬가지로 ‘Server-Client’구조로 되어 있습니다.
다만 차이가 있다면, Client에서 특별한 에이전트 설치가 필요 없다는 점입니다.
에이전트의 역할을 SSH 데몬이 대체하기 때문에 SSH 접속만 가능하다면 위에서 말씀드린 것과 같이 대상은 구분이 없습니다.

Ansible Components

Ansible은 크게 3가지 요소로 구성되어 있습니다. 인벤토리(Inventory), 플레이북(Playbook), 모듈(Module)이 그것입니다.

인벤토리는 Ansible에 의해 제어될 호스트(Host)or클라이언트(Client)를 모아둔 요소라고 생각하시면 됩니다.
호스트별로 적어둘 수도 있고, 임의로 그룹화 할 수도 있습니다.

플레이북은 인벤토리 파일에서 정의된 호스트에서 해야할 일들을 정의해둔 파일입니다.
이 파일은 YAML 포맷으로 구성되어 있으며, 실제로 여러개의 플레이북을 생성해둔 뒤에 롤(Role) 요소를 활용하여 여러 플레이북을 엮어서 사용합니다.

모듈은 플레이북에서 정의한 명령들이 어떻게 수행될지 나타낸 요소입니다. 모듈은 일반적으로 사용방법이 정의가 되어 있습니다. 그렇기 때문에 각 모듈들의 옵션들을 미리 숙지하여 사용해야 합니다.

특징

Ansible 은 기본적으로 멱등성이라는 특징을 갖고 있습니다.
멱등성이란, 같은 명령을 여러번 내려도 늘 같은 결과값이 나와야 한다고 생각하시면 됩니다.
일반적으로 Ansible 을 서버관리에 사용을 한다고 하면 여러 패키지들을 설치하는데 많이 사용될텐데, 설치된 상태를 요구한 플레이북을 사용했다면 여러번 이 플레이북을 수행했어도 한번 설치가 됐으면 그 이상 수행하지 않게 될 것입니다.

마무리하며..

오늘 이 포스트는 개념의 소개를 하기 위한 것이기 때문에 실제 Command Line은 적지 않았습니다. 다음 글에서 다룰 수 있도록 하겠습니다. Ansible은 프로젝트 모음 글에서 관련글을 볼 수 있습니다.

Leave a Reply