Ansible 이란 무엇인가: 컨트롤러와 인벤토리 그리고 플레이북

Wookoa 2024. 6. 28.

앤서블이란 무엇인가
앤서블이란 무엇인가

 

머리말

  관리하는 서버가 3대 이하의 소수일 때는 앤서블의 필요성을 딱히 느끼지 못할 수 있다. 하지만 관리하는 서버가 많아질수록 앤서블과 같은 관리 도구의 필요성을 점차 느끼게 되며, 수십대의 서버를 관리하는 관리자는 앤서블과 같은 관리 도구가 반드시 필요한 상황에 처하게 된다. 본 포스팅에서는 앤서블의 개념과 용어에 대해서 소개하도록 한다.

Ansible이란 무엇인가

  Ansible은 인프라 관리를 자동화하는 도구로써 코드 기반으로 수행되는 특징이 있다. 오픈 소스로 공개되었기 때문에 활발한 개발 참여와 버그 리포팅을 확인할 수 있는 장점이 있다. 코드를 기반으로 인프라 관리를 자동화하는 목적에 맞게 Ansible은 Infrastructure as Code(IaC)를 지향한다.

  IaC란 인프라 관리 프로세스 중 하나로써 소프트웨어의 설치, 관리 및 프로비저닝을 코드를 통해 관리하는 프로세스를 의미한다. 이러한 IaC 관리 프로세스가 등장하면서 인프라 구축 및 관리의 자동화가 가능해졌다. 미리 준비된 코드를 실행하면 자동으로 원격지 서버에 접속 후 정해진 절차대로 작업을 수행하기 때문이다. 이로써 서버 관리자는 관리 대상 서버에 직접 접속해서 설치 또는 설정을 직접 수행할 필요가 없어졌다.

프로비저닝(provisioning)은 사용자가 요청한 IT 자원을 즉시 사용 가능한 상태로 준비시키는 행위를 의미한다. 서버 프로비저닝, 운영체제 프로비저닝, 소프트웨어 프로비저닝, 스토리지 프로비저닝, 계정 프로비저닝 등 특정 영역에 국한되지 않고 널리 사용되는 용어다. 일반적으로 특정한 리소스를 사용 가능한 상태로 설정하는 단계로 생각하면 이해가 쉽다.

  모놀리식 아키텍처를 지양하는 현대 사회에서는 Ansible이 더 이상 옵션이 아닌 필수 오픈소스로 각광받는다. 이러한 Ansible은 인프라 자동 관리를 위해 대상 서버에 명령어를 전달하는 방식으로 동작하며, 명령어 전달을 위해 원격 접속을 허용하는 몇몇의 설정만 추가하면 효율적인 인프라 관리가 가능하다. 다양한 IaC 프로세스 중 Ansible 오픈소스의 특징은 아래와 같이 설명할 수 있다.

Agentless

  IaC 프로세스를 지향하는 다른 소프트웨어는 원격지에 에이전트를 설치해서 서버와 명령어를 주고받는 통신을 하는데, Ansible은 SSH 기반으로 원격지 서버에 명령어를 전달하기 때문에 원격지 서버에 에이전트를 설치할 필요가 없다.

접근성

  Ansible은 프로세스 자동화를 위해 스크립트를 관리해야 한다. 이러한 스크립트 관리를 위해 새로운 언어나 스크립트를 습득한다면 진입 장벽이 높아질 수 있다. Ansible은 서버 관리자의 진입 장벽을 낮추기 위해 YAML 파일 포맷으로 스크립트를 관리한다. YAML 파일은 가독성이 뛰어나고 별도의 언어나 스크립트를 습득하는 과정 없이 어렵지 않게 내용을 파악할 수 있다.

멱등성(Idempotence)

  다소 생소할 수 있는 멱등성의 의미는 특정 작업을 반복 수행해도 동일한 결과가 도출되는 성질을 의미한다. Ansible은 스크립트를 여러 번 수행해도 동일한 결과가 도출될 수 있도록 멱등성을 관리한다. 자동화 소프트웨어의 가장 큰 숙제는 다양한 환경에서 발생하는 예외 상황을 회피하는 일이다. Ansible에서 제공하는 대다수의 모듈은 멱등성을 기반으로 생성되었다. 그렇기 때문에 서버 관리자가 의도하지 않은 상황에서는 중복 실행을 방지하며, 스크립트 실행 전 상태를 체크하여 문제가 없을 경우에만 수행되는 특징이 있다.

YAML 파일은 기존 JSON 포맷의 불편함을 해소하기 위해 만들어진 상위 호환 파일 포맷이다. JSON 문서를 그대로 YAML 파일로 사용하거나 원하는 부분만 수정해서 사용할 수 있으며, JSON 포맷의 단점인 주석의 부재, 유연하지 않은 문법, 타입명시의 부재 등을 해소했다.

Ansible 용어 설명

  Ansible 동작 원리를 조금 더 자세히 이해하기 위해서는 아래의 용어를 이해할 필요가 있다. 매우 간단하고 직관적인 아키텍처로 구성되었기 때문에 간단한 용어만 숙지해도 관련된 문서를 이해하는데 어려움이 없다.

컨트롤러(Controller) 서버

  Ansible 오픈소스가 설치되는 서버로써 관련 명령어를 실행하고 원격 접속지에 명령어를 전달하는 서버다. 쉽게 말해 Ansible 서버 자체를 의미한다.

인벤토리(Inventory)

  컨트롤러 서버가 명령어를 전달할 원격 접속지 서버들의 목록을 의미한다. 일반적으로 /etc/ansible/hosts 파일에 원격 접속지 서버 목록을 관리하며 해당 파일을 인벤토리라 칭한다. 다른 용어로는 Ansible Hosts라고 불리기도 한다.

플레이북(Playbook)

  원격 접속지 서버에 명령어를 전달할 명령어 모음집이다. 특정 인벤토리에 대해 자동으로 실행되는 작업 목록이며 YAML 파일 포맷으로 구성되어 있다. 스크립트 파일 정도로 이해하면 어렵지 않게 이해할 수 있다.

Ansible architecture
Ansible architecture

꼬리말

  마이크로 서비스 때문에 조각화된 서버들을 관리하기 위한 최적의 방법 중 하나로써 Ansible 오픈소스가 자리 잡았다. 비교적 진입 장벽이 낮은 수준으로 어렵지 않게 접근이 가능한 Ansible 오픈소스를 사용하면 보다 효율적인 방법으로 수많은 서버들을 관리할 수 있다. Ansible 개념과 용어들에 대해서 소개한 본 포스팅은 이로써 마무리를 짓도록 한다.

인기있는 글

소중한 댓글 (0)