Ansible 소개
Ansible의 핵심 개념과 구성 요소, 설치 방법 정리
참고자료
앤서블 소개
앤서블이란?
- 마이클 데한이 앤서블 웍스라는 이름으로 2014년 3월 4일에 공개한 오픈소스 프로젝트다.
- 2015년 10월 레드햇이 인수해 개발, 관리 중이다.
- 기존 Puppet, Chef와 대비해 차별화된 특징을 가지는 서버, 인프라 관리 자동화 도구다.
앤서블의 특징
- Agentless
- 기존 자동화 도구인 Puppet, Chef는 자동화 관리 대상 서버에 별도 에이전트를 설치하고 이를 통해 자동화 업무를 수행한다.
- 이런 데몬 형식 에이전트에 기반한 방식은 관리를 위한 추가 작업, 또는 OS 버전에 따라 추가 패키지나 모듈을 설치하는 등의 작업이 발생한다.
- 앤서블은 에이전트 없이 SSH로 접속하여 쉽게 대상 서버들을 관리할 수 있다.
- 멱등성
- 동일한 연산을 여러 번 적용해도 결과가 달라지지 않는 성질이다.
- 앤서블은 멱등성을 기본으로 하여 동일한 작업을 여러 번 실행해도 같은 결과를 낸다.
- 멱등성을 지원하지 않는 모듈도 존재하나, 멱등성 지원을 기본 요건으로 한다.
- 쉬운 사용법, 다양한 모듈
- 다른 자동화 도구에 비해 복잡하지 않아 자동화 절차 및 과정을 이해하기 쉽다.
- 자동화 단계는 YAML 문법으로 쉽게 작성할 수 있다.
- 일반 시스템 관리부터 특정 퍼블릭 클라우드 관련 모듈 및 컬렉션까지 제공하므로 자동화 수행이 쉽다.
앤서블은 언제 사용하는가
- 시스템 환경 설정
- 애플리케이션 설치 및 배포
- 퍼블릭, 프라이빗 클라우드 시스템의 가상 서버 생성
- 매일 점검해야 하는 시스템의 상태 체크
- 특정 시스템 구축
앤서블은 어디서 사용 가능한가
- 리눅스, macOS, BSD 계열 Unix, WSL 지원 윈도우 등 Unix-like 환경에서 Python, Ansible Core만 설치하면 사용할 수 있다.
- 앤서블을 사용하는 시스템은 2가지 종류의 노드로 분류한다.
- 제어 노드: 앤서블 코어가 설치되고 플레이북을 작성하여 실행하는 노드다.
- 앤서블 코어, 사용자에 의해 정의된 플레이북, 관리 노드를 정의한 인벤토리 파일이 존재한다.
- 관리 노드: 플레이북이 실행되어 애플리케이션 설치나 클라우드 시스템의 가상 서버 생성 같은 작업이 수행되는 노드다.
- SSH가 실행되고 있어야 하고 Python이 설치되어야 한다. (일부 예외 존재)
- 즉, 명령을 전송하는 제어 노드와 명령의 대상이 되는 관리 노드로 구성된다.
- 제어 노드: 앤서블 코어가 설치되고 플레이북을 작성하여 실행하는 노드다.
앤서블은 누가 사용하는가
- 시스템 엔지니어
- 데브옵스 엔지니어
- 클라우드 관리자
- 퍼블릭, 프라이빗 클라우드 담당자
- 이외에도 비즈니스 로직, 성능 측정에도 사용할 수 있다.
앤서블의 2가지 형태
앤서블은 크게 “커뮤니티 앤서블”과 “레드햇 앤서블 오토메이션 플랫폼”으로 나뉜다.
- 커뮤니티 앤서블: 오픈소스 형태로 운영체제가 리눅스라면 어디에나 설치해 사용할 수 있다.
- 레드햇 앤서블 오토메이션 플랫폼: 레드햇 서브스크립션을 통해 사용할 수 있다. (유료)
앤서블 아키텍처
커뮤니티 앤서블은 크게 6가지 구성요소로 이루어진다.
- 제어 노드
- 앤서블이 설치되는 노드다.
- 운영체제가 리눅스(또는 Unix-like, POSIX 지원 환경)면 제어 노드가 될 수 있다.
- 앤서블이 파이썬 모듈을 사용하므로 파이썬이 함께 설치되어야 한다.
- 관리 노드
- 앤서블이 제어하는 원격 시스템 또는 호스트다.
- 리눅스, 윈도우에 무관하며 SSH 통신만 가능하면 된다.
- 파이썬이 설치되어 있어야 한다.
- 인벤토리
- 제어 노드가 제어하는 관리 노드의 목록을 나열한 파일이다.
- 관리 노드의 성격에 따라 그루핑할 수 있다.
- 기본적으로 INI로 작성하나 YAML 등으로도 작성할 수 있다.
# 단일 호스트 web1.example.com 192.168.1.10 # 그룹 정의 [webservers] web1.example.com web2.example.com web3.example.com ansible_port=2222 [dbservers] db1.example.com ansible_user=admin db2.example.com # 변수 지정 [webservers:vars] http_port=80 max_connections=100 # 그룹의 그룹 (children) [production:children] webservers dbservers [production:vars] env=production
- 모듈
- 앤서블은 관리 노드에 작업을 수행할 때 SSH를 통해 연결한 후 앤서블 모듈이라는 스크립트를 푸시해 작동한다.
- 모듈은 실행이 완료되면 관리 노드에서 제거된다.
- 대부분의 모듈은 원하는 시스템 상태를 설명하는 매개변수를 허용한다.
- 플러그인
- 모듈과 달리 제어 노드에서 실행되어 앤서블의 기능을 확장하는 역할을 한다.
- 데이터 변환, 출력, 연결 방식 등을 수정, 확장하는 기능을 제공한다.
- 플레이북
- 관리 노드에서 수행할 작업들을 YAML 문법으로 순서대로 작성해놓은 파일이다.
- 앤서블은 작성된 플레이북을 읽어 관리 노드에 접근해 작업을 수행한다.
앤서블 오토메이션 플랫폼 추가 컴포넌트
앤서블 오토메이션 플랫폼의 주요 컴포넌트는 커뮤니티 앤서블과 동일하나, 추가로 제공하는 기능이 있다.
- 오토메이션 컨트롤러: 앤서블 관리 웹 UI (REST API도 제공)
- 실행 환경: 앤서블 모듈과 플러그인이 존재하는 컨테이너 기반의 실행 환경
- CMDB (Configuration Management DB): 인벤토리, 인증 정보, 실행 환경 등의 정보를 관리
- 오토메이션 허브: 레드햇 기술지원이 가능한 컬렉션 제공 서비스
앤서블 실습 환경 만들기
가상환경 설치
- 앤서블이 실행될 가상환경을 생성한다.
앤서블 설치
우분투 환경 기준:
sudo apt update
sudo apt install software-properties-common
# PPA(add-apt-repository)를 사용하기 위한 도구 설치
sudo add-apt-repository --yes --update ppa:ansible/ansible
# Ansible 공식 PPA 저장소를 APT에 추가 + 즉시 업데이트
sudo apt install ansible
- PPA (Personal Package Archive): 공식 저장소가 아닌, 패키지가 배포되는 팀/개인용 저장소
sudo add-apt-repository --yes --update ppa:ansible/ansible이 하는 일:- PPA URL 변환
/etc/apt/sources.list.d/에 파일 생성- GPG key 등록
apt update수행
macOS 기준:
brew update
brew install ansible