Ansible 101
Ansible에 대해 알아보아요
Reference: brownbears.tistory.com
What is Ansible?
**IaC(Infrastructure as Code)**를 지향하는 자동화 관리 도구
Open-source 기반으로 제작되었다
Ansible을 구동하는 module 및 library는 Python 기반이다
YAML format을 기반으로 playbook을 실행시켜서
원하는 자동화를 구현하거나,
Ad hoc mode로 module을 실행시켜 상태를 조회해 볼 수 있따
SSH를 기반으로 Target Host에 agentless 방식으로 자동화를 구성 및 관리한다
Advantages of Ansible
1. Agentless
일반적으로 대부분의 IaC 도구들이 자동화 대상 장비들에 agent를 기반으로 구성하는 pull 방식인 것에 반해,
Ansible은 자동화 대상 장비들에 agentless 기반의 push 동작 방식으로 동작한다
대상 장비에 agent를 설치하지 않기 때문에, Data center 또는 IT Infra 담당자들이 상대적으로 거부감이 덜하다
SSH 기반으로 대부분 동작하기 때문에, 기술적 접근성도 용이하다
2. 접근 용이성
Ansible은 Python 기반으로 개발되었지만, Python에 대한 지식이 없어도 사용할 수 있을만큼 진입장벽이 낮은 편이다
3. 다양한 Module 지원
Version이 지속적으로 patch되고, 넓은 사용자층을 확보하면서 많은 module을 지원하고 있다
다양한 cloud infra, 가상화, 서버 OS, Platform 및 Network 장비와 Storage까지 매우 폭넓은 module들을 version upgrade마다 확장하고 있따
4. 멱등성 (Idempotence)
Ansible에서는 YAML script file로 작성된 Playbook을 여러 차례 반복 실행해도 동일한 결과를 출력시켜,
멱등성
을 일관되게 수행할 수 있다여러번 적용해도 결과는 바뀌지 않는다
바뀌는 것이 없으면 당연히 배포되어도 바뀌지 않는다
바뀌는 부분이 있으면 그 부분만 반영된다
Shell, command, file module은 보장되지 않는다
Ansible을 실행하면 Task를 수행하기 전에 module의 상태를 먼저 체크하고,
Task를 수행 할때도 추가된 것과 변화된 부분에 대한 정보들을 제공하여 일관성있는 결과를 제공할 수 있다
Ansible Architecture
Control Node
중앙 제어 node이며, Ansible이 설치되는 node
Windows는 설치가 불가능하므로
winrm
을 사용해야 한다
Managed Node
Ansible Control Node에 의해 관리되는 서버
hosts 에 등록된 대상
Ansible Control Node에서 SSH를 통해 Managed Node에 배포한다
Inventory
Managed Node 가 등록되어 있는 목록
작업할 node 혹은 server들의 접속 정보를 가지고 있는 파일
Remote server에 대한 meta data를 기술하는 파일
기본 파일은
/etc/ansible/hosts
를 읽게 하거나, 따로 Inventory 파일을 만들고 option을 주어 동작하게 할 수 있다만약 고정 IP를 가지고 있고, hosts 파일 안에 들어가 있지 않는 server가 있다면 설정 파일을 만들 수 있고, 테스트 환경을 만들 때 유용하다
Modules
Ansible에서 실행되면서 작업하는 하나하나의 단위
다음과 같은 작업을 간단히 수행할 수 있게 도와줌
Package, service 설치
File에 대한 권한 설정
Database 작업
Cloud 작업
Network 작업
Tasks
Module의 집합
작업 단위
Playbooks
계획된 작업을 순서대로 실행하기 위해 작성되는 YAML file
Last updated