Network & Server Factory

개인 공부 기록

DevOps/IaC & 자동화

[Ansible] Ansible이란? 개념과 구성 요소 정리

1nfra 2022. 7. 24. 22:15

Ansible은 서버 배포와 설정을 코드로 자동화하는 구성 관리 도구입니다. 관리 대상 서버에 Agent를 설치할 필요가 없어 간단하게 쓸 수 있습니다. 제어 노드, 매니지드 노드, 인벤토리, 태스크, 플레이북, 모듈의 개념을 정리했습니다.

1. Ansible이란

Ansible은 배포와 관리를 간소화하고 자동화하는 구성 관리 도구(Configuration Management Tool)입니다. 다른 구성 관리 도구와 달리 관리 대상에 Agent를 설치하지 않아도 됩니다.

2. 왜 필요한가

예전에는 여러 서버에 같은 환경을 만들 때 패키지 설치, 설정 파일 수정 같은 작업을 Bash 셸 스크립트로 나열해 실행하는 방식이 일반적이었습니다. 하지만 관리자 한 명이 맡는 서버가 늘어나면서 이 방식은 한계에 부딪혔습니다.

 

그래서 환경의 배포와 구성을 규격화된 코드로 정의하는 IaC(Infrastructure as Code) 개념이 생겼고, 이를 구현하는 대표적인 자동화 도구가 Ansible입니다.

3. 구성 요소

Ansible 구성 요소

3.1 제어 노드 (Control node)

Ansible을 실행하는 노드입니다. /usr/bin/ansible이나 /usr/bin/ansible-playbook 명령으로 매니지드 노드를 관리합니다.

3.2 매니지드 노드 (Managed node)

Ansible로 관리하는 서버입니다. 호스트라고도 부릅니다.

3.3 인벤토리 (Inventory)

매니지드 노드 목록입니다. 호스트 파일이라고도 하며, 노드별 IP 주소, 호스트 정보, 변수 등을 지정할 수 있습니다.

[webserver]
web1 ansible_host = 1.1.1.1
web2 ansible_host = 1.1.1.2

[db]
db1 ansible_host = 1.1.10.1
db2 ansible_host = 1.1.10.2

3.4 태스크 (Task)

Ansible의 작업 단위입니다. 애드혹(ad-hoc) 명령으로 단일 작업을 한 번 실행할 수 있습니다.

3.5 플레이북 (Playbook)

인벤토리에 정의한 대상이 무엇을 할지 정의합니다. 변수와 작업을 포함할 수 있고, YAML로 작성합니다.

- name: nginx install
  hosts: all
  become: true
  tasks:
    - name: nginx package install
    apt:
       name: nginx
       state: installed

3.6 모듈 (Module)

플레이북에서 태스크가 어떻게 수행될지 정의하는 요소입니다. 데이터베이스 처리, 사용자 관리, 네트워크 장치 관리 등 용도별 모듈이 있고, 플레이북 하나에서 여러 모듈을 쓸 수 있습니다. 위 예시에서는 패키지 설치에 apt 모듈을 썼습니다.

4. 정리

구성 요소 역할
제어 노드 Ansible을 실행하는 서버
매니지드 노드 Ansible로 관리되는 서버
인벤토리 관리 대상 목록과 변수
태스크 하나의 작업 단위
플레이북 대상과 작업을 YAML로 정의
모듈 작업을 실제로 수행하는 기능 단위
728x90
서울
--:--:--
-전체 글
-카테고리
오늘 방문