Overview of Ansible¶
What is Ansible?¶
- Ansible은 프로비저닝 및 설정 자동화, 애플리케이션 배포 및 오케스트레이션을 자동화해야하는 시스템 및 클라우드 관리자를 위한 도구입니다.
- 2012년 2월 마이클 데한(Michael DeHaan)이 작성한 초기 버전이 출시되었고, 2015년 RedHat이 인수하여 현재 2020년 5월 기준 최신 버전은 2.9.9버전 입니다.
- GPLv3라이선스 기반의 오픈소스이며, 커뮤니티가 운영하는 Ansible Project와 Red Hat에서 제공하는 상용 버전인 Red Hat Ansible Engine이 있습니다.
- Ansible Project와 Red Hat Ansible은 CLI기반이며, 운영자를 위한 대쉬보드나 역할기반 접근 제어, 스케줄링 등 편리한 기능 및 환경을 GUI/웹 기반으로 제공하는 AWX Project와 RedHat Ansible Tower가 있습니다.
- AWX(Apache v2라이선스)는 Redhat에서 후원하는 AWX Project에서 개발했으며, RedHat Ansible Tower의 오픈 소스버전입니다.
- 매우 간단한 언어(YAML)로 작성된 Playbook을 통해 반복적이고, 복잡한 작업도 간단한 명령어 혹은 버튼 클릭만으로 해결할 수 있습니다.
- 별도의 에이전트 소프트웨어를 사용하지 않기때문에(Agentless) 특정 포트를 열거나, 버전 업그레이드 시 발생하는 보안 및 배포 문제, 에이전트 데몬이 중지되는 문제 등을 생각할 필요가 없어 관리가 쉽습니다.
- OpenSSH를 이용하여 통신하기 때문에 SSH(WinRM)를 지원하는 다양한 OS와 장치를 지원하며, Dry Run모드를 통해 변경사항을 테스트 해볼 수 있어 기존 스크립팅 기반 솔루션이 가지고 있는 잠재적인 문제를 해결할 수 있습니다.
- 1,300개 이상의 모듈이 기본으로 제공되며 Ansible Galaxy에서는 4,000 ~ 5000개가 넘는 커뮤니티가 즉시 사용할 수 있거나 특정 환경에 맞게 수정할 수 있는 모듈이나 템플릿을 제공하고 있습니다.
Ansible의 어원
Ansible이란 거리에 상관없이 두 지점간에 즉시 메세지를 주고 받을 수 있는 초광속 통신(Superluminal /FTL Communication)장치를 의미합니다. 어슐러 르 귄(Ursula K. Le Guin )의 SF소설 로케넌의 세계(Rocannon`s World/1966)에서 가장 처음사용되어 이후 여러 SF소설과 게임 및 영화등에서도 사용되고 있습니다.
Architecture¶
- Ansible은 Control Node와 Manage Node로 구성됩니다.
- Contrl Node는 Ansible이 설치된 시스템을 의미하며, Ad-hoc 명령이나 Playbook을 싱행합니다.
- Manage Node는 Host라고도 불리우며, Ansible로 관리하는 네트워크 장치, 서버 등이 될 수 있습니다.
- Inventory는 Manage Node를 나열한 목록이며, IP주소 혹은 FQDN 형식으로 작성됩니다.
- Inventory를 통해 Manage Node를 그룹화 하여 관리할 수 있습니다.
- TASK는 Ansible의 동작 단위 입니다.
- playbook은 TASK를 YAML형식으로 작성한 파일입니다. Playbook에 명시된 순서대로 일련의 TASK를 실행합니다.
- YAML(YAML Ain't Markup Language)은 쉽게 이해하고 사용할 수 있는 형식의 데이터 양식입니다.
Idempotence¶
- Ansible에서 사용하는 거의 대부분에 모듈은 멱등성(idempotence)을 가지고 있습니다.
- 멱등성은 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질입니다.
- 멱등성이 보장되지 않으면, Playbook을 재사용할 수도 없으며 실행 결과나 시스템의 상태를 직접 확인해야하는 불편함이 발생합니다.
- 멱등성이 보장되지 않는 TASK의 경우에는 조건문
changed_when
,failed_when
등을 사용하여 Playbook을 다시 실행하더라도 멱등성이 유지하도록하는 것이 중요합니다. -
아래 예제는
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
Useful Link¶
- Ansible Engine
- How Ansible Works
- Ansible Engine Pricing
- Ansible Engine VS Tower
- Ansible Project
- Ansible Community
- Ansible Docs
- Ansible Tower Docs
- Ansible Glossary
- Ansible Repository
- Ansible Engine Life Cycle