본문 바로가기

[Linux]

[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)하여 관리.

관리대상 시스템 기준 (pull / push)

 

멱등성

멱등성이란 ? “어떠한 작업을 여러 번 실행하여도 결과는 항상 같아야 한다“

- 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 데이터 형식을 최대한 간결하게 표현하여 작업을 수행 )

 

반응형