DevOps, Infra

[DevOps] Ansible 이란?

seulseul 2023. 1. 17. 23:20

1. Ansible 이란?

  • Ansible (앤서블)은 여러 개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구이다.
  • IaC (Infrastrictire as Code) 를 지향하는 오픈소스

2. Ansible (앤서블) 요소

  • 인벤토리 (Inventory)
    • 어디서 수행할 것인지
  • 플레이북 (Playbook)
    • 무엇을 수행할 것인지
  • 모듈 (Module)
    • 어떻게 수행할 것인지

2.1. 인벤토리(Inventory)

인벤토리는 앤서블에 의해 제어될 대상을 정의한다. ini 형식과 yaml 형식이 있으니 편한 문법을 선택하여 사용하면된다. 여러 서버들의 SSH 접근 IP, 포트 , 리눅스 사용자와 같은 접속정보를 아래와 같이 정의한다.

ini 형식

master  ansible_host=192.168.0.201  ansible_user=ubuntu
worker1 ansible_host=192.168.0.202  ansible_user=ubuntu
worker2 ansible_host=192.168.0.203  ansible_user=ubuntu

[all_nodes]
master
worker1
worker2

Ansible 설치시 기본 인벤토리는 /etc/ansible/hosts 이고, 인벤토리를 따로 만들어서 관리할 수 도 있다.

2.2. 플레이북 (Playbook)

플레이북은 인벤토리 파일에서 정의한 대상들이 무엇을 수행할 것인지 정의하는 역할을 하며 yaml 포맷으로 설정한다.

#!/usr/bin/env ansible-playbook

---
- hosts: all_nodes
  become: true
  tasks:
  - name: Install Required System Packages
    apt: 
      name: "{{ packages }}"
      state: present
      update_cache: yes
    vars:
      packages:
        - apt-transport-https
        - ca-certificates
        - curl
        - software-properties-common
  • 위 yaml 파일은 system 설치를 수행하는 tasks 를 갖고있다.
  • sudo apt-get install apt-transport-https \
        ca-certificates \
        curl \
        software-properties-common -y 과 같은 역할을 한다.

2.3. 모듈 (Module)

 

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소이다.

Ansible은 원격 호스트에서 또는 플레이북을 통해 직접 실행할 수 있는 모듈 라이브러리를 제공합니다.

공식 홈페이지에서 소개한 것과 같이 모듈은 일종의 라이브러리 플러그인 입니다.

  • OS 작업 (패키지 설치 등)
  • 파일 작업 (복사 등)
  • 데이터베이스 작업 (테이블 관리 등)