초보자를 위한 Ansible – Ansible 기본 사항 및 작동 방식
앤서블에 대해 들어보셨지만 정확히 무엇인지 모르시나요? 걱정하지 마세요. 앞으로 5분 안에 앤서블의 핵심을 파악하게 될 것입니다.
앤서블이란 무엇인가?
앤서블(Ansible)은 구성 관리, 애플리케이션 배포, 프로비저닝 등을 자동화하여 비즈니스를 지원하는 오픈 소스 DevOps 도구입니다. 앤서블의 가장 큰 장점 중 하나는 간편한 배포입니다. 앤서블은 SSH를 사용하여 서버 간 통신을 수행하며, YAML이라는 사람이 읽기 쉬운 간단한 언어를 기반으로 하는 플레이북을 통해 자동화 작업을 정의합니다.
앤서블은 IT 인프라에 안정성, 일관성, 그리고 확장성을 제공합니다. 데이터베이스, 스토리지, 네트워크, 방화벽 등 다양한 구성 요소를 자동화할 수 있으며, 애플리케이션 실행에 필요한 모든 패키지와 소프트웨어가 서버에 일관되게 설치되도록 보장합니다.
예를 들어, Visual C++로 빌드된 애플리케이션의 디버그 버전을 배포한다고 가정해 보겠습니다. 이 애플리케이션을 실행하려면 Microsoft Visual C++ 라이브러리 DLL과 같은 몇 가지 사전 요구 사항이 충족되어야 하며, 컴퓨터에 Visual C++가 설치되어 있어야 합니다. 앤서블은 이러한 모든 필수 패키지와 소프트웨어가 컴퓨터에 올바르게 설치되었는지 확인하여 테스트 환경이나 프로덕션 환경 등 어떤 환경에서도 애플리케이션이 원활하게 실행되도록 지원합니다.
뿐만 아니라, 앤서블은 애플리케이션의 모든 변경 이력을 보관하므로 언제든지 이전 버전으로 롤백하거나 새 버전으로 업그레이드하는 것이 간편합니다.
앤서블의 주요 특징 몇 가지를 살펴보겠습니다.
에이전트리스: 앤서블은 Puppet이나 Chef와 같은 다른 솔루션과는 달리 관리 대상 노드에 별도의 소프트웨어나 에이전트를 설치할 필요가 없습니다.
Python: 앤서블은 오늘날 가장 강력하고 빠르게 성장하는 프로그래밍 언어 중 하나인 Python을 기반으로 구축되었습니다.
SSH: 안전하고 암호 없는 네트워크 인증을 제공하는 SSH 프로토콜을 사용합니다. 사용자는 클라이언트에 SSH 키를 복사하는 것만으로 인증을 설정할 수 있습니다.
푸시 아키텍처: 앤서블은 필요한 구성을 클라이언트 노드로 푸시합니다. 미리 정의된 구성(플레이북)을 한 번에 여러 노드로 푸시하여 변경 사항을 수천 대의 서버에 단 몇 분 만에 적용할 수 있는 강력한 기능을 제공합니다.
간편한 설정: 앤서블은 최소한의 요구 사항과 구성으로 쉽게 설정하고 사용할 수 있습니다.
앤서블 아키텍처

앤서블 아키텍처는 Linux 서버나 퍼블릭/프라이빗 클라우드 환경에서 시작됩니다. 이곳은 모든 IT 설치와 구성의 저장소 역할을 합니다.
위 그림에서 볼 수 있듯이, 앤서블 아키텍처에는 SSH를 통해 연결되고 플레이북을 푸시하는 여러 호스트 시스템이 있습니다.
자동화 엔진은 사용자가 호스트에 배포되는 플레이북을 직접 실행할 수 있도록 합니다. 자동화 엔진은 여러 구성 요소로 이루어져 있습니다. 그중 첫 번째는 호스트 인벤토리입니다. 이는 관리 대상이 되는 모든 호스트의 IP 주소 목록입니다.
다음으로 모듈이 있습니다. 앤서블은 다양한 내장 모듈을 제공하며, 각 모듈은 플레이북이 실행될 때 실행되는 코드 조각입니다. 플레이북은 플레이로 구성되고, 플레이는 여러 작업으로 구성되며, 각 작업은 모듈을 사용합니다.
플레이북을 실행하면 모듈이 호스트에서 실행되며, 모듈에는 특정 작업이 포함되어 있습니다. 따라서 플레이북을 실행하면 해당 작업이 호스트 컴퓨터에서 수행됩니다. 사용자는 필요에 따라 사용자 정의 모듈을 만들 수도 있습니다. 몇 줄의 코드를 작성하여 모듈을 만들면 언제든지 사용할 수 있습니다.
또한 아키텍처에는 플레이북이 존재합니다. 플레이북은 실제 워크플로를 정의합니다. 플레이북에 작성된 작업은 작성된 순서대로 정확하게 실행됩니다. 예를 들어, 패키지를 먼저 설치한 다음 서비스를 시작하도록 작성했다면 정확히 그 순서대로 실행됩니다. 플레이북은 YAML 코드로 작성되며, YAML은 사람이 읽기 쉬운 데이터 직렬화 언어로 영어와 매우 유사합니다.
플러그인은 특별한 종류의 모듈입니다. 플러그인은 모듈이 노드에서 실행되기 전에 실행됩니다. 플러그인은 주로 로깅 목적으로 중앙 제어 시스템에서 실행됩니다. 콜백 플러그인을 사용하면 다양한 이벤트를 로깅하고 표시할 수 있습니다. 캐시 플러그인은 자주 변경되지 않는 사실을 캐시하여 비용이 많이 드는 사실 수집 작업을 피하는 데 사용됩니다. 또한, 앤서블에는 프론트 엔드 모듈인 액션 플러그인도 있어서 모듈 자체를 호출하기 전에 컨트롤러 시스템에서 특정 작업을 수행할 수 있습니다.
마지막으로 연결 플러그인이 있습니다. 호스트 시스템에 연결할 때 항상 SSH를 사용할 필요는 없습니다. 앤서블은 도커 컨테이너 연결 플러그인과 같은 다양한 연결 플러그인을 제공하며, 이러한 플러그인을 사용하면 모든 도커 컨테이너에 쉽게 연결하여 즉시 구성을 시작할 수 있습니다.
이것이 앤서블 아키텍처에 대한 설명입니다. 다음으로 앤서블이 실제로 어떻게 작동하는지 알아보겠습니다.
앤서블 작동 방식

앤서블은 관리 대상 노드에 연결하여 모듈이라고 하는 작은 프로그램을 푸시하는 방식으로 작동합니다. 앤서블은 SSH를 통해 이러한 모듈을 실행한 다음 완료되면 제거합니다.
앤서블 관리 노드는 플레이북의 전체 실행을 제어하는 제어 노드입니다. 인벤토리 파일은 모듈을 실행해야 하는 호스트 목록을 제공합니다. 관리 노드는 SSH를 통해 호스트 컴퓨터에 연결하고, 모듈을 실행하여 필요한 구성 요소를 설치합니다. 모듈 설치가 완료되면 해당 모듈은 제거됩니다. 이것이 앤서블이 작동하는 방식입니다.
다음으로 앤서블을 설치하고 구성하는 방법에 대해 더 자세히 알아볼 수 있습니다.
결론
이 글이 앤서블을 이해하고 시작하는 데 도움이 되었기를 바랍니다. 앤서블은 인프라 관리 방식을 혁신할 수 있는 강력한 도구입니다. 시스템 관리자나 개발자라면 기술을 향상시키기 위해 실습 교육 과정을 고려해 보세요.