[Ansible] #2.1 Ansible 개요
Ansible
의 개요에 대해서 알아보자.
1. Ansible이란 ?
간단하게 말하면 IaC
를 가능하게 하는 소프트웨어 도구이다.
소프트웨어 프로비저닝, 구성 관리, 애플리케이션 배포 기능이 포함되어있다.
에이전트
없이 OpenSSH
를 통해 원격에 연결한다.
YAML
파일을 사용해 정의되며, 대부분의 Unix
계열에서 실행할 수 있다.
구성 관리 도구
는 Ansible
말고도 다른 수십가지 종류가 있는데, 그 중에서 Ansible
을 사용하는 이유는 에이전트
를 사용하지 않는다는 것이다.
즉, 다른 도구들은 대부분 에이전트가 필요하다.
Ansible
이 인기를 끈 이후로 다른 도구들도 에이전트
없이 사용할 수 있도록 하고 있지만, 기본적으로 다르기 때문에 Ansible
을 많이 사용한다.
기본적으로 윈도우는 SSH
를 사용하지 않고, WinRM(Remote Management)
를 사용하기 때문에 연결이 불가능하다.
즉, Ansible
은 윈도우 환경의 서버에서는 사용할 수 없다.
YAML
은 데이터를 표현하는 하나의 포맷으로, xml
, JSON
, html
과 같은 것이라고 생각하면 된다.
보통 도구들은 각각의 DSL(Domain Specific Language)
, 도구를 사용하기 위한 전용 언어를 가지는데, Ansible
의 YAML
은 그저 데이터 포맷이기 때문에 학습이 매우 쉽고 다루기 용이하다.
2. Ansible 아키텍쳐
위 그림이 Ansible
의 아키텍쳐이다.
여기서 오른쪽 호스트
, 네트워크
는 관리 노드(Management Node)
, 그리고 나머지는 모두 제어 노드(Control Node)
로 나뉜다.
우선 Ansible
은 Python
으로 구성되어 있다는 것을 기억하자.
따라서 제어 노드
는 Python
인터프리터가 필요하며, 관리 노드
는 Python
으로 구성되어 있지는 않지만 Python
이 필요하다.
그 이유를 찬찬히 살펴보자.
모듈
은 작업(Task)
을 수행하기 위해 기본적으로 포함되어 있는 것을 말하며, 총 7~8천개 정도 존재한다.
cat
, apt
등과 같은 명령이 Ansible
에서는 모듈
로 되어있다고 생각하면 된다.
이 모듈
들은 모두 Python
으로 이루어져 있으며, 어떤 모듈
을 사용할 것이라고 하면 이는 SSH
를 통해서(SFTP
, SCP
포함, 둘 다 파일을 전송, 복사하는 프로토콜) 관리 노드
에서 실행된다.
즉, Python
으로 된 코드를 SSH
를 통해서 복사해서 실행하므로, 제어 노드
와 관리 노드
둘 다 Python
이 필요한 것이다.
우리가 Ansible
을 사용하는 방법은 직접 사용하는 방법(Adhoc
)이 있고, 플레이북
이라는 코드를 작성해서 사용하는 방법이 있다.
핵심은 플레이북
을 작성하는 것이 될 것이다.
Adhoc
은 ‘임시의’ 라는 의미이다.
코드를 작성하지 않고, 간단하게 임시로 실행하는 것이다.
실제로는 YAML
데이터로 코드를 작성하여 플레이북
을 만들어서 Ansible
의 모듈
을 사용하게 된다.
관리 대상이 되는 파일을 타겟이라고 하며, 이를 모아둔 것을 인벤토리라고 한다.
Ansible
은 API
를 제공하기 때문에 서드파티 앱을 만들 수 있다.
또한 플러그인
도 계속 추가되고 있다.
다음 글에서 각 구성 요소를 하나하나 살펴보자.