소개
Ansible 은 여러 호스트에 걸쳐 구성을 적용하는 프로세스를 단순화하는 강력한 오픈소스 자동화 도구입니다. 이 튜토리얼에서는 Ansible 을 활용하여 인프라에 구성을 효율적으로 관리하고 배포하는 방법을 살펴볼 것입니다.
Ansible 기본 이해
Ansible 이란 무엇인가?
Ansible 은 인프라를 코드로 관리할 수 있도록 지원하는 오픈소스 자동화 도구입니다. 간편성, 에이전트리스 (agentless) 아키텍처, 높은 확장성을 갖추어 네트워크 전반에 걸쳐 여러 호스트를 관리하고 구성하는 데 인기 있는 선택입니다.
Ansible 의 주요 개념
플레이북 (Playbooks): Ansible 플레이북은 YAML 기반의 구성 파일로, 인프라의 원하는 상태를 정의합니다. 대상 호스트에서 수행할 작업을 기술합니다.
모듈 (Modules): Ansible 은 패키지, 파일, 서비스 등 다양한 작업을 수행할 수 있는 다수의 내장 모듈을 제공합니다. 플레이북 내에서 모듈을 사용할 수 있습니다.
인벤토리 (Inventory): Ansible 인벤토리는 대상 호스트와 관련된 변수 (IP 주소, 사용자 이름, 비밀번호 등) 를 정의하는 파일 또는 파일 집합입니다.
작업 (Tasks): 작업은 플레이북에 정의된 개별 단계로, Ansible 이 대상 호스트에서 실행할 것입니다.
핸들러 (Handlers): 핸들러는 다른 작업에 의해 트리거되는 특수 작업으로, 일반적으로 서비스를 다시 시작하거나 변경 사항에 대한 응답으로 다른 작업을 수행하는 데 사용됩니다.
Ansible 사용의 장점
간편성: Ansible 의 에이전트리스 아키텍처와 YAML 기반 구문은 자동화에 익숙하지 않은 사용자도 쉽게 학습하고 사용할 수 있도록 합니다.
확장성: Ansible 은 수천 개의 호스트를 동시에 관리할 수 있으므로 대규모 인프라 배포에 적합합니다.
멱등성 (Idempotency): Ansible 의 작업은 의도하지 않은 변경을 일으키지 않고 여러 번 실행될 수 있도록 설계된 멱등성을 갖습니다.
유연성: Ansible 은 다양한 운영 체제와 기술을 지원하여 다재다능한 자동화 도구입니다.
재사용성: Ansible 플레이북과 역할은 다른 프로젝트에서 공유 및 재사용할 수 있으므로 협업 및 효율성을 높입니다.
Ansible 시작하기
Ansible 을 시작하려면 컨트롤 노드 (Ansible 명령을 실행할 컴퓨터) 에 Ansible 패키지를 설치해야 합니다. Ubuntu 22.04 에서 다음 명령을 사용하여 Ansible 을 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install -y ansible
Ansible 설치 후 이 튜토리얼에서 다루는 다양한 개념과 기능을 탐색할 수 있습니다.
Ansible 인벤토리 구성
Ansible 인벤토리 이해
Ansible 인벤토리는 대상 호스트와 관련 변수를 정의하는 파일 또는 파일 집합입니다. Ansible 이 여러 호스트를 동시에 관리할 수 있도록 기반을 제공합니다.
인벤토리 형식
Ansible 은 여러 인벤토리 형식을 지원합니다.
INI 스타일 인벤토리: 기본이며 가장 일반적으로 사용되는 인벤토리 형식입니다. 간단한 INI 스타일 구문을 사용하여 호스트와 그룹을 정의합니다.
YAML 스타일 인벤토리: Ansible 은 복잡한 환경에서 더욱 읽기 쉽고 관리하기 쉬운 YAML 기반 인벤토리 파일도 지원합니다.
동적 인벤토리: Ansible 은 클라우드 공급업체나 구성 관리 도구와 같은 외부 데이터 소스와 통합하여 동적으로 인벤토리를 생성할 수 있습니다.
호스트 및 그룹 정의
INI 스타일 인벤토리에서 호스트를 정의하고 그룹화하는 방법은 다음과 같습니다.
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
db2.example.com
[all:children]
webservers
databases
이 예제에서는 webservers와 databases 두 개의 그룹이 있습니다. all:children 섹션은 webservers와 databases 그룹을 모두 포함하는 메타 그룹을 정의합니다.
호스트 변수 설정
인벤토리 파일에 개별 호스트 또는 그룹에 대한 변수를 정의할 수도 있습니다. 예를 들어:
[webservers]
web1.example.com ansible_user=ubuntu ansible_ssh_private_key_file=/path/to/key.pem
web2.example.com ansible_user=ubuntu ansible_ssh_private_key_file=/path/to/key.pem
[databases]
db1.example.com ansible_user=admin ansible_password=secret
db2.example.com ansible_user=admin ansible_password=secret
이 예제에서는 webservers 그룹에 ansible_user와 ansible_ssh_private_key_file 변수를, databases 그룹에 ansible_user와 ansible_password 변수를 설정했습니다.
LabEx 를 이용한 동적 인벤토리
LabEx 는 인프라를 자동으로 발견하고 관리하는 동적 인벤토리 솔루션을 제공합니다. Ansible 과 LabEx 를 통합하면 동적 인벤토리를 원활하게 사용하여 호스트의 구성 및 관리를 간소화할 수 있습니다.
Ansible 에서 LabEx 를 사용하려면 LabEx 통합을 구성하고 Ansible 구성에서 LabEx 인벤토리 스크립트를 지정해야 합니다.
여러 호스트에 대한 구성 적용
Ansible 플레이북 생성
Ansible 플레이북은 Ansible 기능의 핵심입니다. YAML 기반의 구성 파일로, 인프라의 원하는 상태와 대상 호스트에서 수행할 작업을 정의합니다.
여기서 Apache 웹 서버를 여러 호스트 그룹에 설치하는 예시 플레이북이 있습니다.
- hosts: webservers
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
enabled: yes
이 플레이북에서 webservers 그룹을 대상 호스트로 정의하고, Apache 패키지를 설치하는 작업과 Apache 서비스를 시작하고 활성화하는 작업을 지정합니다.
Ansible 플레이북 실행
Ansible 플레이북을 실행하려면 컨트롤 노드에서 ansible-playbook 명령을 사용할 수 있습니다.
ansible-playbook -i inventory.ini apache_playbook.yml
여기서 -i inventory.ini는 인벤토리 파일을 지정하고, apache_playbook.yml은 플레이북 파일 이름입니다.
실패 및 오류 처리
Ansible 플레이북은 멱등성 (idempotent) 을 갖도록 설계되어 있어, 여러 번 실행해도 예상치 못한 변경을 일으키지 않습니다. 그러나 네트워크 문제나 리소스 사용 불가능성과 같은 다양한 이유로 작업이 실패할 수 있습니다.
Ansible 은 다음과 같은 여러 가지 방법으로 실패 및 오류를 처리합니다.
- 오류 처리:
ignore_errors또는failed_when옵션을 사용하여 Ansible 이 작업 실패를 어떻게 처리할지 제어할 수 있습니다. - 핸들러: 핸들러는 다른 작업에 의해 트리거되는 특수 작업으로, 일반적으로 서비스를 다시 시작하거나 변경 사항에 대한 응답으로 다른 작업을 수행하는 데 사용됩니다.
- 역할: Ansible 역할은 관련 작업, 변수 및 핸들러를 캡슐화하는 방법을 제공하여 플레이북을 더욱 모듈화하고 재사용 가능하게 만듭니다.
LabEx 를 이용한 확장
LabEx 는 중앙 집중식 및 동적 인벤토리 관리 솔루션을 제공하여 Ansible 배포를 확장하는 데 도움이 될 수 있습니다. Ansible 과 LabEx 를 통합하면 위치나 인프라 유형에 관계없이 많은 수의 호스트에 구성을 쉽게 적용할 수 있습니다.
Ansible 과의 LabEx 통합을 통해 자동 호스트 검색, 동적 인벤토리 업데이트 및 클라우드 플랫폼 및 기타 인프라 구성 요소와의 원활한 통합과 같은 강력한 기능을 활용할 수 있습니다.
요약
Ansible 은 여러 호스트에 걸쳐 구성을 자동 배포하기 위한 강력하고 유연한 플랫폼을 제공합니다. Ansible 의 기본 사항을 이해하고 인벤토리를 구성하며 일관된 구성을 적용함으로써 인프라 관리를 간소화하고 시스템이 일관되게 구성 및 유지 관리되도록 할 수 있습니다.


