ansible이란?

  • 테스트 환경을 구축하는데 사용되는 툴 Provision & configuration management tool
  • python으로 개발되고 YAML이라는 언어를 통해 정의할 수 있고 json으로 통신
    • python Github project 중 상위 랭킹 (6위)
  • 해커 뉴스 분석을 보면 ansible이 많이 Mention 되어지고 있음
  • 오픈 소스 버전 (GPL)

ansible 장점 및 지원

  • 빠른 SSH통신, 빠른 provision이 가능
  • 추후 상용 환경에서 사용할 때 agent 기반이면 방화벽 이슈, agent 데몬 관리라는 불편한 점이 존재 (agent 방식은 확장성, 대규모 provision을 할 경우 매우 효과적이지만 서버와 통신하는 부분이 고도화되기 때문에 빠르고 간단한 provision을 할 수 없음)
  • 자동 배포 환경이 쉬움
  • 개발 가능성이 높은 오픈소스
  • 대부분이 멱등성을 제공
  • playbook
  • ad-hoc 지원.
  • 병렬 provisioning 지원.
  • vagrant
  • jinja2

멱등성(Idempotency)

  • 여러 번 적용해도 결과는 바뀌지 않음
  • 바뀌는 것이 없으면 당연히 배포되어도 바뀌지 않음
  • 바뀌는 부분이 있으면 그 부분만 반영
  • shell, command, file module은 보장 안됨

Ansible에서의 멱등성이란?

여러 번 ansible 툴을 사용하더라도 동일한 결과 값을 나올 수 있도록 제공되는 형태여야 합니다. 매번 다른 결과가 나오거나 에러가 나온다면 비 멱등성하다고 할수 있습니다. ansible 툴의 거의 대부분의 모듈은 멱등성을 제공합니다. 또한 멱등성을 제공하기 위해서 조건절을 제공하고 있습니다. 예를 들면, 처음 ansible 스크립트를 실행 후 다시 실행을 하면 상황에 따라서는 파일이 append가 될 수 있습니다. 그러나 멱등성의 원칙은 언제나 실행은 해도 결과가 동일하게 나옵니다. 또한 파일/디렉터리를 생성 또는 삭제하는 ‘create’ , ‘remove:’ 같은 ansible 모듈을 실행 할 때 ‘when;’ 조건절을 이용할수 있습니다. 대부분의 ansible 모듈이 멱등성을 보장한다는 의미는 상태를 파악할 수 있다는 의미를 가지게 됩니다.


ansible의 기본개념

ansible의 환경설정, 배포를 가능케 하는 언어입니다. 리모트 서버에 접속해서 무언가를 시행시키는 정책을 기술합니다. yaml 문법으로 정책이 기술되어 있으며 좀 더 고급 단계에서는 로드밸런서를 모니터링하는 복잡한 환경에서 사용할 수 있도록 합니다. 각 playbook은 하나 또는 하나 이상의 ‘play’를 두게 됩니다. Play의 목적은 여러 호스트들에 잘 정의된 ‘role’과 ‘task’를 매핑하는 역할을 합니다. Task는 ansible 모듈의 호출을 의미합니다. Role을 좀 더 편하게 관리하기 위해서 미리 정의된 yaml 파일을 include을 하는 것이 가능 합니다. 또한 host inventory 파일에 정의한 서버 그룹별로 각각 나누어 provision 할 수 있도록 할 수 있습니다. 서버당 디렉터리를 나누어서 각각의 설정 정보가 정의된 파일을 읽어 설치하게 합니다.

playbook

플레이북은 애드혹 테스트 실행 모드와는 완벽하게 다른 사용방법이며 특히 강력한 사용 방법입니다. 간단히 말해 플레이북은 정말 간단하게 설정을 관리하고 다수의 머신에 대한 배포 시스템에 대한 기본적인 단위입니다. 기존에 존재해왔던 것과 달리 복잡한 어플리케이션 형태의 배포에 매우 적합합니다. 플레이북은 설정을 정의할 수 있으며 특정 머신의 집합을 오가며 다른 작업을 수행하도록 수동으로 작업 순서를 설정하는것도 가능합니다. 이때에 작업은 동기 또는 비동기로 수행할 수 있습니다. /usr/bin/ansible 명령을 통한 애드혹 테스크를 실행하는 것에 반해 플레이북은 소스 컨트롤을 통해 보관하거나 사용자의 설정을 내보내거나 원격 시스템을 구성, 보장되는데 더욱 적합합니다. 플레이북을 통해 이러한 기술들을 구현하는 방법은 [Ansible-Example 저장소]에 정리가 되어있습니다.

ad-hoc

Adhoc 이라는 의미는 임시적으로 수행하는 의미. ansible의 playbook을 작성하여 수행하는 것이 아니라 임시적으로나 또는 특별하게 어떤 작업을 수행하기 위해서 사용할 수 있는 실행방법이라고 할 수 있음. 

Inverntory

리모트 서버에 대한 meta 데이터를 기술하는 파일입니다. Ansible에서는 inventory 파일에는 yaml을 적용하지 않았습니다. 기본 파일은 /etc/ansible/hosts를 읽게 하거나, 따로 inventory 파일을 만들고 옵션을 주어 동작하게 할수 있습니다. 만약 고정 ip를 가지고 있고 gosts 파일 안에 들어가 있지 않는 서버가 있다면 설정 파일을 만들수 있고 테스트 환경을 만들때 유용합니다.

Ansible의 한계

  • 시스템의 초기 설치 수행은 불가능 (kickstart, pxe 등을 사용하여야 함)
  • 시스템 모니터링은 지원하지 않음
  • 시스템 변경사항은 추적하지 않음


'서버' 카테고리의 다른 글

Jupyter Notebook이란?  (0) 2017.10.18
Ansible이란?  (1) 2017.10.18
WSGI, WAS, CGI 이해  (0) 2017.04.19
호스트 네임  (0) 2017.04.19
[Linux] SSL (Secure Socket Layer)  (0) 2017.03.27
[Linux] SSH (Secure Shell)  (0) 2017.03.27
  1. ingee 2018.11.20 15:42 신고

    좋은 정리 감사합니다. 큰 도움 되었습니다.

+ Recent posts