Ansible를 사용하여 configurations management에 대한 소개

소개

구성 관리는 시스템의 변경 사항을 시간이 지남에 따라 무결성을 보장하는 방식으로 처리하는 프로세스로, 일반적으로 자동화 및 관찰 가능성을 용이하게 하는 도구와 프로세스를 포함합니다. 이 개념이 IT 산업에서 시작된 것은 아니지만, 이 용어는 널리 서버 구성 관리를 지칭하는 데 사용됩니다.

서버의 맥락에서 구성 관리는 일반적으로 IT 자동화 또는 서버 오케스트레이션이라고도 합니다. 두 용어 모두 구성 관리의 실용적인 측면과 중앙 서버에서 여러 시스템을 제어할 수 있는 능력을 강조합니다.

이 가이드는 구성 관리 도구를 사용하여 서버 인프라 설정을 자동화하는 이점과 그러한 도구 중 하나인 Ansible이 어떻게 도움이 될 수 있는지 안내해 드리겠습니다.

구성 관리 도구 사용의 이점

시장에는 다양한 수준의 복잡성과 다양한 아키텍처 스타일을 가진 여러 가지 구성 관리 도구들이 있습니다. 이러한 도구들은 각자 고유의 특성을 가지고 있고 약간씩 다른 방식으로 작동하지만, 모두 동일한 기능을 제공합니다: 시스템의 상태가 프로비저닝 스크립트에 의해 설명된 상태와 일치하는지 확인하는 것입니다.

서버에 대한 구성 관리의 많은 이점은 인프라를 코드로 정의할 수 있는 능력에서 비롯됩니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다:

  • 버전 관리 시스템을 사용하여 인프라의 모든 변경 사항을 추적할 수 있습니다.
  • 개발, 테스트, 프로덕션과 같은 여러 서버 환경에 대해 프로비저닝 스크립트를 재사용할 수 있습니다.
  • 동료들과 프로비저닝 스크립트를 공유하여 표준화된 개발 환경에서 협업을 촉진할 수 있습니다.
  • 서버 복제 과정을 간소화하여 중대한 오류로부터의 복구를 용이하게 할 수 있습니다.

또한, 구성 관리 도구는 중앙 집중식 위치에서 한 대에서 수백 대의 서버를 제어할 수 있는 방법을 제공하여 서버 인프라의 효율성과 무결성을 크게 향상시킬 수 있습니다.

Ansible 개요

Ansible은 최신 구성 관리 도구로, 원격 서버의 설정 및 유지 보수 작업을 용이하게 하며, 사용자가 빠르게 사용할 수 있도록 미니멀리스트 디자인을 채택하고 있습니다.

사용자는 Ansible 프로비저닝 스크립트를 YAML로 작성합니다. YAML은 특정 프로그래밍 언어에 구애받지 않는 사용자 친화적인 데이터 직렬화 표준입니다. 이를 통해 사용자는 동일 분야의 유사한 도구들에 비해 보다 직관적으로 정교한 프로비저닝 스크립트를 생성할 수 있습니다.

Ansible은 이 도구로 관리될 노드에 특별한 소프트웨어를 설치할 필요가 없습니다. 컨트롤 머신에 Ansible 소프트웨어를 설정하면, 이 소프트웨어가 표준 SSH를 통해 노드들과 통신합니다.

구성 관리 도구 및 자동화 프레임워크로서, Ansible은 동일 분야의 다른 도구들에 존재하는 모든 공통 기능을 캡슐화하면서도 단순성과 성능에 집중합니다:

멱등성 동작

Ansible은 관리 시스템의 자원 상태를 추적하여 이전에 실행된 작업을 반복하지 않습니다. 패키지가 이미 설치되어 있다면, 다시 설치하려고 시도하지 않습니다. 목표는 프로비저닝 실행을 여러 번 수행한 후에도 시스템이 원하는 상태에 도달하거나 유지하는 것입니다. 이것이 Ansible과 다른 구성 관리 도구들을 멱등성 동작을 가진 것으로 특징짓는 것입니다. 플레이북을 실행할 때, 각 작업의 실행 상태와 시스템에 변경을 가했는지 여부를 확인할 수 있습니다.

변수, 조건문 및 반복문에 대한 지원

Ansible 자동화 스크립트를 작성할 때 변수, 조건문 및 반복문을 사용하여 자동화를 보다 다양하고 효율적으로 만들 수 있습니다.

시스템 팩트

Ansible은 관리 노드에 대한 네트워크 인터페이스 및 운영 체제와 같은 자세한 정보를 수집하고 시스템 팩트라는 전역 변수로 제공합니다. 팩트는 플레이북 내에서 사용되어 자동화를 보다 다양하고 적응력 있게 만들 수 있으며, 프로비저닝되는 시스템에 따라 다르게 동작할 수 있습니다.

템플릿 시스템

Ansible은 동적 표현식 및 변수 접근을 허용하기 위해 Jinja2 Python 템플릿 시스템을 사용합니다. 템플릿은 구성 파일 및 서비스 설정을 용이하게 하는 데 사용될 수 있습니다. 예를 들어, 템플릿을 사용하여 Apache 내에서 새로운 가상 호스트를 설정하면서 여러 서버 설치에 동일한 템플릿을 재사용할 수 있습니다.

확장 및 모듈 지원

Ansible은 시스템 관리 작업 자동화를 위한 수백 개의 내장 모듈을 제공하여, apt로 패키지 설치나 rsync로 파일 동기화와 같은 일반적인 작업을 쉽게 처리할 수 있도록 합니다. 또한 MySQL, PostgreSQL, MongoDB 등의 데이터베이스 시스템과 PHP의 composer, Ruby의 gem, Node의 npm 등의 의존성 관리 도구와 같은 인기 있는 소프트웨어를 다루기 위한 모듈도 포함되어 있습니다. 또한 Ansible은 플러그인과 모듈을 통해 기본적으로 제공되지 않는 사용자 정의 기능을 추가할 수 있는 다양한 방법을 제공합니다.

또한 Ansible Galaxy 포털에서 서드파티 모듈과 플러그인을 찾을 수 있습니다.

Ansible 개념 숙지

이제 Ansible 용어와 개념을 살펴보며 이 시리즈 전반에 걸쳐 등장하는 용어들에 익숙해질 수 있도록 도와드리겠습니다.

제어 노드

Ansible이 설치되어 서버에 연결하도록 설정된 시스템을 제어 노드라고 합니다. 여러 개의 제어 노드를 가질 수 있으며, Linux 또는 Unix 기반 운영 체제를 실행하는 개인용 컴퓨터나 노트북을 포함하여 Ansible을 실행할 수 있는 모든 시스템을 제어 노드로 설정할 수 있습니다. 현재 Ansible은 Windows 호스트에 설치할 수 없지만, Linux를 실행하는 가상 머신을 설정하고 거기에서 Ansible을 실행하여 이러한 제한을 우회할 수 있습니다.

관리 노드

Ansible을 사용하여 제어하는 시스템을 관리 노드라고 합니다. Ansible은 관리 노드가 SSH를 통해 접근 가능해야 하며, Python 2 (버전 2.6 이상) 또는 Python 3 (버전 3.5 이상)이 설치되어 있어야 합니다.

Ansible은 Windows 서버를 포함한 다양한 운영 체제를 관리 노드로 지원합니다.

인벤토리

인벤토리 파일에는 Ansible을 사용하여 관리할 호스트 목록이 포함되어 있습니다. Ansible은 일반적으로 설치 시 기본 인벤토리 파일을 생성하지만, 프로젝트별 인벤토리를 사용하여 인프라를 더 잘 분리하고 실수로 잘못된 서버에서 명령이나 플레이북을 실행하는 것을 방지할 수 있습니다. 정적 인벤토리는 일반적으로 .ini 파일로 생성되지만, JSON을 반환할 수 있는 모든 프로그래밍 언어로 작성된 동적으로 생성된 인벤토리를 사용할 수도 있습니다.

작업

Ansible에서 작업은 관리 노드에서 실행할 작업의 개별 단위입니다. 수행할 각 작업은 작업으로 정의됩니다. 작업은 임시 명령을 통해 일회성 작업으로 실행하거나, 자동화 스크립트의 일부로 플레이북에 포함할 수 있습니다.

플레이북

플레이북에는 작업의 순서가 지정된 목록과, 해당 자동화의 대상이 되는 호스트, 해당 작업을 실행하기 위해 권한 상승 시스템을 사용할지 여부, 변수를 정의하거나 파일을 포함하는 선택적 섹션을 나타내는 몇 가지 지시문이 포함되어 있습니다. Ansible은 작업을 순차적으로 실행하며, 플레이북 전체 실행을 플레이라고 합니다. 플레이북은 YAML 형식으로 작성됩니다.

핸들러

핸들러는 관리 노드의 시스템에서 활성화된 서비스에 대해 재시작이나 중지와 같은 작업을 수행하는 데 사용됩니다. 핸들러는 일반적으로 작업에 의해 트리거되며, 모든 작업이 완료된 후 플레이의 끝에서 실행됩니다. 이런 방식으로, 예를 들어 둘 이상의 작업이 서비스를 재시작하도록 트리거하면, 서비스는 모든 작업이 실행된 후에 한 번만 재시작됩니다. 기본 핸들러 동작은 더 효율적이고 전반적으로 더 나은 관행이지만, 작업에 필요한 경우 즉시 핸들러 실행을 강제할 수도 있습니다.

역할

역할은 Ansible에 의해 알려진 미리 정의된 구조로 구성된 플레이북 및 관련 파일 세트입니다. 역할은 웹 서버 설치, PHP 환경 설치 또는 MySQL 서버 설정과 같은 특정 목표를 위한 세분화된 자동화의 공유 가능한 패키지로 플레이북을 재사용하고 재활용하는 것을 용이하게 합니다.

결론

Ansible은 최소화된 IT 자동화 도구로, YAML을 프로비저닝 스크립트에 사용하여 학습 곡선이 완만한 특징을 가지고 있습니다. 패키지 설치 및 템플릿 작업과 같은 작업을 추상화하는 데 사용할 수 있는 많은 내장 모듈을 제공합니다. 단순화된 인프라 요구 사항과 접근하기 쉬운 구문으로 구성 관리를 시작하는 사람들에게 적합할 수 있습니다.

이 시리즈의 다음 부분에서는 Ubuntu 20.04 서버에서 Ansible을 설치하고 시작하는 방법을 살펴볼 것입니다.

Source:
https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible