Skip to content

Overview of Ansible

logo

What is Ansible?

  1. Ansible은 프로비저닝 및 설정 자동화, 애플리케이션 배포 및 오케스트레이션을 자동화해야하는 시스템 및 클라우드 관리자를 위한 도구입니다.
  2. 2012년 2월 마이클 데한(Michael DeHaan)이 작성한 초기 버전이 출시되었고, 2015년 RedHat이 인수하여 현재 2020년 5월 기준 최신 버전은 2.9.9버전 입니다.
  3. GPLv3라이선스 기반의 오픈소스이며, 커뮤니티가 운영하는 Ansible Project와 Red Hat에서 제공하는 상용 버전인 Red Hat Ansible Engine이 있습니다.
  4. Ansible Project와 Red Hat Ansible은 CLI기반이며, 운영자를 위한 대쉬보드나 역할기반 접근 제어, 스케줄링 등 편리한 기능 및 환경을 GUI/웹 기반으로 제공하는 AWX Project와 RedHat Ansible Tower가 있습니다.
  5. AWX(Apache v2라이선스)는 Redhat에서 후원하는 AWX Project에서 개발했으며, RedHat Ansible Tower의 오픈 소스버전입니다.
  6. 매우 간단한 언어(YAML)로 작성된 Playbook을 통해 반복적이고, 복잡한 작업도 간단한 명령어 혹은 버튼 클릭만으로 해결할 수 있습니다.
  7. 별도의 에이전트 소프트웨어를 사용하지 않기때문에(Agentless) 특정 포트를 열거나, 버전 업그레이드 시 발생하는 보안 및 배포 문제, 에이전트 데몬이 중지되는 문제 등을 생각할 필요가 없어 관리가 쉽습니다.
  8. OpenSSH를 이용하여 통신하기 때문에 SSH(WinRM)를 지원하는 다양한 OS와 장치를 지원하며, Dry Run모드를 통해 변경사항을 테스트 해볼 수 있어 기존 스크립팅 기반 솔루션이 가지고 있는 잠재적인 문제를 해결할 수 있습니다.
  9. 1,300개 이상의 모듈이 기본으로 제공되며 Ansible Galaxy에서는 4,000 ~ 5000개가 넘는 커뮤니티가 즉시 사용할 수 있거나 특정 환경에 맞게 수정할 수 있는 모듈이나 템플릿을 제공하고 있습니다.

Ansible의 어원

Ansible이란 거리에 상관없이 두 지점간에 즉시 메세지를 주고 받을 수 있는 초광속 통신(Superluminal /FTL Communication)장치를 의미합니다. 어슐러 르 귄(Ursula K. Le Guin )의 SF소설 로케넌의 세계(Rocannon`s World/1966)에서 가장 처음사용되어 이후 여러 SF소설과 게임 및 영화등에서도 사용되고 있습니다.

Architecture

archi

  1. Ansible은 Control Node와 Manage Node로 구성됩니다.
  2. Contrl Node는 Ansible이 설치된 시스템을 의미하며, Ad-hoc 명령이나 Playbook을 싱행합니다.
  3. Manage Node는 Host라고도 불리우며, Ansible로 관리하는 네트워크 장치, 서버 등이 될 수 있습니다.
  4. Inventory는 Manage Node를 나열한 목록이며, IP주소 혹은 FQDN 형식으로 작성됩니다.
  5. Inventory를 통해 Manage Node를 그룹화 하여 관리할 수 있습니다.
  6. TASK는 Ansible의 동작 단위 입니다.
  7. playbook은 TASK를 YAML형식으로 작성한 파일입니다. Playbook에 명시된 순서대로 일련의 TASK를 실행합니다.
  8. YAML(YAML Ain't Markup Language)은 쉽게 이해하고 사용할 수 있는 형식의 데이터 양식입니다.

Idempotence

  1. Ansible에서 사용하는 거의 대부분에 모듈은 멱등성(idempotence)을 가지고 있습니다.
  2. 멱등성은 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질입니다.
  3. 멱등성이 보장되지 않으면, Playbook을 재사용할 수도 없으며 실행 결과나 시스템의 상태를 직접 확인해야하는 불편함이 발생합니다.
  4. 멱등성이 보장되지 않는 TASK의 경우에는 조건문 changed_when, failed_when 등을 사용하여 Playbook을 다시 실행하더라도 멱등성이 유지하도록하는 것이 중요합니다.
  5. 아래 예제는 file 모듈을 사용한 Playbook 입니다. /root/dongsam.txt 파일의 Permissions과 Ownership을 변경합니다. 이 후 다시한번 Playbook을 실행하면, 이미 Permissions과 Ownership이 명시한대로 바뀌었기 때문에 해당 TASK는 수행되지 않고 Skip되거나 Playbook을 종료합니다.

    Example

    - name: Change file ownership, group and permissions
        file:
          path: /root/dongsam.txt
          owner: d3
          group: d3
          mode: '0644
    
  1. Ansible Engine
  2. How Ansible Works
  3. Ansible Engine Pricing
  4. Ansible Engine VS Tower
  5. Ansible Project
  6. Ansible Community
  7. Ansible Docs
  8. Ansible Tower Docs
  9. Ansible Glossary
  10. Ansible Repository
  11. Ansible Engine Life Cycle