카샤의 만개시기

Ansible 개념과 구조 본문

DevOps/Ansible

Ansible 개념과 구조

SKaSha 2019. 9. 1. 13:51

앤서블은 설정 관리(Configuration Management) 툴로써, 공상 과학 소설에서 '빛의 속도보다 빨리 정보를 전송할 수 있는 허구의 통신 장치'로 유래되었다.
많은 서버들에 동시다발적으로 동일한 환경을 배포해야할때, Bash 쉘 스크립트는 한계점을 가지며 이를 고안하도록 만들어진 것이 Infrastructure as a Code이다.
이는 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것을 의미하며 이는 특정 환경을 동일하게 도출 할수 있도록 멱등성(Idempotent)를 보장한다.

Bash 쉘 스크립트에서 echo 'hello world' > file.txt라는 스크립트를 실수로 2번 입력했을때 hello world가 두번 저장되지만 앤서블은 플레이북이 두번 실행되더라도 최종적으로 한번만 실행되어 원하고자 하는 상태를 유지시킨다.
이와 같이 결과값이 항상 동일하게 유지되는 것을 멱등성이라고 한다.

Chef나 Puppet처럼 에이전트를 사용하는 일부 설정 관리 시스템은 기본적으로 pull기반이기에, 서버에 설치된 에이전트가 주기적으로 중앙 서비스에 체크인하여 서비스에서 설정 정보를 가져온다.
하지만 앤서블은 agentless 기반의 push 동작 방식으로써 설치와 구성관리가 편하다는 점과 서버에 변경 사항이 언제 발생하는지 제어하는데 있어 타임아웃을 기다릴 필요가 없다는 장점이 있습니다.

pull-based 접근 방법이 많은 수의 서버를 확장하고 언제든지 온라인 상태가 되도록 새 서버를 처리하고자 할때 더 유리하다고 주장하는 의견도 존재합니다.
하지만 앤서블은 앤서블은 수천 개의 노드가 있는 상용 환경에서도 성공적으로 사용된 사례가 많으며, pull기반의 방법이 더 선호된다면 앤서블의 ansible-pull이라는 툴을 제공하고 있습니다.

앤서블 3요소

앤서블은 크게 3가지 요소를 통해서 어디서, 무엇을, 어떻게 수행할지를 정의한다.

  1. 인벤토리 (inventory)
    인벤토리는 앤서블에 의해 제어되어 Infrastructure as a Code의 대상이 될 서버들의 목록을 정의하는 파일로서 일반적으로 hosts 파일에 정의해 사용한다.

    앤서블의 인벤토리 파일의 기본 위치 /etc/ansible/hosts/

hosts파일에 모든 변수를 지정할 필요없이 ansible.cfg파일을 이용하여 기본값을 설정할수 있다.

앤서블이 ansible.cfg파일을 찾는 순서

  1. ANSIBLE_CONFIG 환경변수로 지정된 파일
  2. ./ansible.cfg (현재 디렉토리)
  3. ~/.ansible.cfg (홈 디렉토리)
  4. /etc/ansible/ansible.cfg
  1. 플레이북 (playbook)
    플레이북은 yaml 포맷으로 되어 있는 파일로서, 인벤토리 파일에 정의된 서버들에 무엇을 할지 정의한다.

  2. 모듈 (module)
    모듈은 플레이북에서 task가 어떻게 수행되는지를 나타낸다.
    예를 들어 apt 모듈을 이용하여 패키지를 설치한다거나,
    service 모듈을 이용하여 nginx를 재시작하는 등의 task의 모듈들을 말한다.

    앤서블 모듈에 대한 문서를 보여주는 ansible-doc이라는 커맨드라인 툴을 제공하며 2000개 이상의 모듈이 포함되어 있다.
    $ ansible-doc service

플레이북과 플레이의 관계

playbook relation
하나의 플레이북은 하나 이상의 플레이를 포함한다.
플레이는 정렬되지 않은 호스트 집합과 정렬된 태크스 목록을 연결한다.
각 작업은 정확히 하나의 모듈과 연관된다.

'DevOps > Ansible' 카테고리의 다른 글

앤서블 1.9.x에서 2.x.x버전으로  (0) 2019.09.03
Comments