Ansible이란

vernolog·2024년 12월 22일

Ansible이란

IT 자동화 도구로 서버 관리, 애플리케이션 배포, 시스템 구성 등을 간소화하고 자동화하는데 사용됨. Python으로 작성된 Ansible은 에이전트가 따로 필요없고, ssh를 통해 원격 시스템과 통신. 이를 통해 다수의 서버를 관리할 수 있음

  • Ansible은 아래와 같은 사례에서 사용될 수 있음
    • 반복적인 작업을 없애고 워크플로를 단순화
    • 시스템 구성 관리 및 유지
    • 복잡한 소프트웨어 지속적 배포
  • Ansible은 아래 원칙을 중심으로 설계됨
    • 에이전트 없는 아키텍처 : IT 인프라 전반에 추가 소프트웨어를 설치하지 않아 유지 관리 오버헤드가 적음
    • 단순성 : 자동화 플레이북으 문서처럼 읽기 쉬움 yaml 구문을 사용. 또한 Ansible은 분산형으로, ssh와 기존 운영 체제의 자격 증명을 사용하여 원격 시스템에 접근
    • 확장성 및 유연성 : 모듈화된 디자인 덕분에 다양한 운영체제, 클라우드 플랫폼, 네트워크 장치를 지원하여 시스템을 쉽게 확장가능
    • 멱등성 및 예측 가능성 : 시스템이 플레이북에서 정의한 상태에 있으면 Ansible은 시스템을 변경하지 않으며, 플레이북을 여러번 실행해도 상태에 대한 변화가 없음

주요 구성 요소

1. Control Node

  • Ansible이 설치된 시스템
  • ansible 또는 ansible-inventory와 같은 Ansible 명령을 실행

2. Managed Node

  • Ansible이 제어하는 원격 시스템 또는 호스트. ssh를 통해 연결됨

3. Inventory

  • 관리되는 노드들의 목록으로, 논리적으로 구성됨.
  • Control Node에서 인벤토리를 작성하여 Ansible에 호스트 배포 정보를 제공

주요개념

인벤토리(Inventory)

  • 관리할 여러 host의 정보를 담고 있는 파일
  • 그룹단위로 호스트 관리 가능
    # example.ini
    
    mail.example.com
    
    [webservers]
    foo.example.com 
    bar.example.com
    
    [dbservers]
    one.example.com
    two.example.com
    three.example.com

플레이북(Playbook)

  • Ansible 작업을 정의
  • yaml 형식으로 작성되는 자동화 스크립트.
  • 아래는 예시코드로 웹서버를 설치하고 서비스를 시작하는 작업이 정의되어 있음
    ---
    - name: Install and start Apache web server
      hosts: webservers
      become: true
      tasks:
        - name: Install apache2
          apt:
            name: apache2
            state: present
        - name: Start apache2 service
          service:
            name: apache2
            state: started

태스크(Tasks)

  • 플레이북 내에서 실행되는 개별 작업
  • task는 여러 모듈로 구성됨

모듈(Modules)

롤(Role)

  • 복잡한 구성을 계층적으로 나누어 관리하기 위한 구조.
  • 변수, 템플릿, 작업 등을 묶어서 재사용성을 높임

사용후기

  • 너무 편하고 좋았음
  • 여러 서버에 하나의 툴을 설치할때 특히 좋음. 예를 들어 모니터링 툴.
  • 그리고 하나의 서버인 control node에만 ansible 관련 코드를 작성하면 되니 코드의 전체 양을 줄이면서 ( ← 똑같은 툴을 설치하는 경우 다른 서버에 똑같은 코드가 있어야 하므로), 코드를 한 곳으로 모아 관리할 수 있어서 좋음

참고자료

0개의 댓글