[Linux] 리눅스 Ansible
Infrastructure As Code (IAC)
인프라 구조를 코드의 형태로 자동으로 완성
aws cloud formation - 클라우드 환경에 해당하는 리소스를 관리
테라폼 - 클라우드 환경에 해당하는 리소스를 관리
컨테이너 가상화에서 많이 사용
microsoft architecture 는 전부 IAC로 관리
이미 구성되고 정의된 리소스를 통합 관리(공통된 작업)할 때 ansible 사용
Infrastructure As Code의 장점
- 소스코드로 작성 된 소프트웨어를 사용하므로 관리 품질 향상
- 다수의 시스템을 병렬 처리로 인한 인프라 관리자의 작업 시간 감소
- 작업 시간 감소로 인한 효율적 처리가 가능하여 관리 비용이 절감
- 소프트웨어에서 정의 된 작업만 수행하므로 오류 발생률이 낮다
Infrastructure As Code 실현도구
- 원시적인 형태의 실현 도구로는 Shell Script 또한 포함된다.
- 전용도구 : Ansible(앤서블), Chef(셰프), Pupper(퍼펫)
Ansible 특징
Agent Less
- 퍼펫, 셰프등의 도구의 경우 관리 대상 시스템에 Agent(ex: filebeat)가 구성되어야 한다.
- Ansible의 경우 Agent 구성이 필요 없으며 대상 시스템에 직접 접근(ssh)하여 관리.
멱등성
멱등성이란 ? “어떠한 작업을 여러 번 실행하여도 결과는 항상 같아야 한다“
- Ansible은 절차적 작업이 아닌 선언적 작업으로 진행 된다.
EX) 절차적 작업 : A Service 패키지를 설치 및 실행 한다.
EX) 선언적 작업 : A Service가 설치되어있고, 실행중인 상태를 확인 후 작업을 수행 한다.
- 만약 최종결과에 부합하는 상태일 경우에는 해당 작업은 수행되지 않는다.
재사용성
- Ansible은 플레이북 단위로 작업을 수행한다 ( EX: Apache 설치 플레이북 )
- 플레이북은 롤 설정이 가능하며, 다른 플레이북에서 해당 롤을 가져와 사용이 가능하다.
Ansible 구성요소
Ansible Software
- Ansible을 사용하기 위한 소프트웨어
- Ansible은 상주 프로세스가 없으며, 명령줄에 의해 동작
로그스테이시 같은 경우 연결이 되어있어야 한다.
인벤터리 ( Inventory )
- Ansible을 이용하여 조작 할 관리대상 서버의 목록을 정의하는 역할
- 인벤터리는 여러대의 관리대상 서버를 그룹화하여 정의가 가능하다. (ex: web, DB)
- 정적 구성과 동적 구성으로 구분된다.
- /etc/ansible/hosts 파일에 호스트를 명시
정적구성 인벤토리 : 관리대상 서버의 수가 적고, 변동사항이 많지 않은경우 관리자가 직접 명시하여 정의
동적구성 인벤토리 : 관리대상 서버의 수가 많고, 변동사항이 많은 경우 동적으로 인벤터리 정의
보통 정적구성 인벤토리를 많이 사용
모듈 ( Module )
- 모듈은 앤서블에서 실행되는 하나의 명령어를 말한다.
- 모듈은 관리대상 서버의 상태를 파악 후 변경사항이 있을 경우에만 작업을 수행
- 확장모듈도 추가로 설치 가능
[ Module 사용예 ]
EX) 패키지 설치, 사용자 및 그룹 관리, 파일 관련 작업, 네트워크 관리, 클라우드 서비스 작업 등
※ 모듈은 파이썬 언어로 만들어지며, 앤서블 기본내장 모듈을 베이스로 동작
플레이북 ( Playbook )
- 플레이북은 실제 스크립트 작업 과정을 YAML(혹은 JSON) 형식으로 정의한다.
- 플레이북내에는 실제 작업수행에 필요한 모듈이 정의 된다.
YAML(혹은 JSON) : 데이터 정의어
어플리케이션 KEY1, KEY2 변수가 존재
KEY1, KEY2의 값이 상황에 따라서 계속 바뀐다면
어플리케이션 간에 데이터를 주고 받을 때
YAML(혹은 JSON) 파일형식에 KEY1, KEY2의 값을 지정해서 넘겨준다.
EX) YAML은 데이터 구조를 사람이 읽기 쉬운형태로 정의하는 데이터 정의형식을 말한다.
( 앤서블에서는 YAML 데이터 형식을 최대한 간결하게 표현하여 작업을 수행 )