[Ansible] #2.1 Ansible 개요

[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) , 도구를 사용하기 위한 전용 언어를 가지는데, AnsibleYAML 은 그저 데이터 포맷이기 때문에 학습이 매우 쉽고 다루기 용이하다.

2. Ansible 아키텍쳐


1

위 그림이 Ansible 의 아키텍쳐이다.
여기서 오른쪽 호스트 , 네트워크관리 노드(Management Node) , 그리고 나머지는 모두 제어 노드(Control Node) 로 나뉜다.

우선 AnsiblePython 으로 구성되어 있다는 것을 기억하자.
따라서 제어 노드Python 인터프리터가 필요하며, 관리 노드Python 으로 구성되어 있지는 않지만 Python 이 필요하다.
그 이유를 찬찬히 살펴보자.

모듈작업(Task)을 수행하기 위해 기본적으로 포함되어 있는 것을 말하며, 총 7~8천개 정도 존재한다.
cat , apt 등과 같은 명령이 Ansible 에서는 모듈 로 되어있다고 생각하면 된다.
모듈 들은 모두 Python 으로 이루어져 있으며, 어떤 모듈 을 사용할 것이라고 하면 이는 SSH 를 통해서(SFTP , SCP 포함, 둘 다 파일을 전송, 복사하는 프로토콜) 관리 노드 에서 실행된다.
즉, Python 으로 된 코드를 SSH 를 통해서 복사해서 실행하므로, 제어 노드관리 노드 둘 다 Python 이 필요한 것이다.

우리가 Ansible 을 사용하는 방법은 직접 사용하는 방법(Adhoc)이 있고, 플레이북 이라는 코드를 작성해서 사용하는 방법이 있다.

핵심은 플레이북 을 작성하는 것이 될 것이다.

Adhoc은 ‘임시의’ 라는 의미이다.

코드를 작성하지 않고, 간단하게 임시로 실행하는 것이다.

실제로는 YAML 데이터로 코드를 작성하여 플레이북 을 만들어서 Ansible모듈을 사용하게 된다.

관리 대상이 되는 파일을 타겟이라고 하며, 이를 모아둔 것을 인벤토리라고 한다.
AnsibleAPI 를 제공하기 때문에 서드파티 앱을 만들 수 있다.
또한 플러그인도 계속 추가되고 있다.

다음 글에서 각 구성 요소를 하나하나 살펴보자.


© 2022. All rights reserved.