Information Security Study

앤서블 개요, 환경설정하기 본문

네트워크 캠퍼스/3차 프로젝트

앤서블 개요, 환경설정하기

gayeon_ 2024. 8. 26. 16:32

앤서블 개요

  • IT 인프라를 자동화하고 관리하는 도구로 주로 설정 관리(Configuration Management), 애플리케이션 배포, 작업 자동화 및 오케스트레이션 등을 위해 사용한다.

 

1. 앤서블의 기본 개념

  • 에이전트리스(Agentless)
    • 앤서블의 가장 큰 특징 중 하나는 에이전트리스라는 점이다.
    • 앤서블을 사용하려면 별도의 소프트웨어 에이전트를 관리 대상 시스템에 설치할 필요가 없다.
    • SSH 프로토콜을 통해 원격으로 시스템에 접근하여 작업을 수행하므로 대상 서버에 SSH 접근 권한만 있으면 된다.
  • 데클러러티브(declarative) 방식
    • 앤서블은 "무엇을" 해야 하는지를 명확히 기술하는 선언형 방식으로 동작한다.
    • ex) 서버에 특정 패키지를 설치하거나 특정 파일의 내용이 어떻게 되어야 하는지를 정의하면 앤서블은 해당 상태에 도달하기 위해 필요한 작업을 수행한다.
  • 플레이북(Playbook)
    • 앤서블 작업의 주요 구성 요소는 플레이북이다.
    • 플레이북은 YAML 형식으로 작성되며 여러 개의 작업 단계를 정의할 수 있다.
    • 플레이북 기반으로 앤서블은 정의된 작업을 순차적으로 실행한다.

 

2. 앤서블의 주요 구성 요소

  • 플레이북(Playbook)
    • 작업의 정의가 들어 있는 파일로 여러 태스크(tasks)를 포함한 일련의 자동화 단계를 기록한다.
    • YAML 형식으로 작성된다.
    • 하나의 플레이북은 여러 개의 "플레이(plays)"로 구성되며 각 플레이는 하나 이상의 호스트 그룹에 적용된다.
  • 모듈(Modules)
    • 앤서블은 다양한 모듈을 통해 구체적인 작업을 실행한다.
    • 모듈은 파일 복사, 패키지 설치, 서비스 관리 등의 작업을 수행하는 작은 스크립트다.
    • 대표적인 모듈로는 yum, apt, service, command, copy 등이 있다.
  • 인벤토리(Inventory)
    • 앤서블이 관리하는 호스트 목록을 정의하는 파일이다.
    • 기본적으로 /etc/ansible/hosts 파일에 관리 대상 호스트들을 정의할 수 있으며 그룹을 나누어 관리할 수도 있다.
    • 호스트는 IP 주소 또는 DNS 이름으로 정의되며 다양한 그룹으로 분류할 수 있다.
  • 롤(Roles)
    • 롤은 플레이북을 보다 효율적으로 관리하기 위한 방식으로 태스크, 핸들러, 변수, 템플릿, 파일 등을 구조적으로 조직화하여 재사용할 수 있게 한다.
    • 큰 규모의 자동화 작업에서 유용하다.
  • 핸들러(Handlers)
    • 특정 이벤트가 발생했을 때 실행되는 태스크로 보통 조건부로 실행된다.
    • ex) 설정 파일을 변경한 후 서비스를 재시작해야 할 경우 핸들러를 사용할 수 있다.
  • 템플릿(Templates)
    • 앤서블에서 템플릿은 Jinja2 템플릿 엔진을 사용하여 구성 파일을 동적으로 생성하는 데 사용된다.
    • 플레이북에서 변수 값을 사용해 템플릿 파일의 내용을 생성하고 대상 시스템에 배포할 수 있다.

 

3. 앤서블의 작동 원리

앤서블은 주로 컨트롤 노드(Control Node)와 매니지드 노드(Managed Node)로 구성된다.

  • 컨트롤 노드
    • 앤서블 명령을 실행하는 시스템이다.
    • 플레이북을 작성하고 실행하며 SSH를 통해 매니지드 노드와 통신한다.
  • 매니지드 노드
    • 컨트롤 노드가 관리하는 대상 시스템들이다.
    • 앤서블은 SSH 연결을 통해 매니지드 노드에 접속하여 작업을 수행한다.

 

4. 앤서블의 주요 특징

  • 간단하고 직관적인 사용
    • 앤서블은 YAML을 기반으로 하여 쉽게 이해할 수 있는 구조를 가지고 있다.
    • 복잡한 구문 없이도 자동화 작업을 정의할 수 있다.
  • 확장성
    • 앤서블은 모듈 기반 구조로 확장 가능하며 필요한 경우 사용자 정의 모듈을 작성하여 추가할 수 있다.
  • 멀티 플랫폼 지원
    • 리눅스, 윈도우, 클라우드 환경 등 다양한 플랫폼을 지원한다.
  • 커뮤니티 및 상용 지원
    • 오픈소스 프로젝트로서 강력한 커뮤니티의 지원을 받으며 Red Hat Ansible Tower라는 상용 버전을 통해 대규모 환경에서도 안전하게 사용할 수 있다.

 

5. 앤서블의 주요 활용 사례

  • 서버 설정 관리
    • 앤서블을 사용하여 여러 서버에 대해 일관된 설정을 적용하고 관리할 수 있다.
    • ex) 웹 서버, 데이터베이스 서버 등의 설정을 자동화할 수 있다.
  • 애플리케이션 배포
    • 새로운 애플리케이션을 배포하거나 기존 애플리케이션의 업데이트 작업을 자동으로 수행할 수 있다.
  • CI/CD 파이프라인 구성
    • 앤서블을 사용하여 지속적 통합/지속적 배포(CI/CD) 파이프라인에서 서버와 애플리케이션의 자동화를 수행할 수 있다.
  • 클라우드 인프라 관리
    • AWS, GCP, Azure 등의 클라우드 인프라에 대해 리소스를 프로비저닝하고 관리할 수 있다.

 

6. 앤서블의 장점과 단점

 

장점

  • 간편한 학습 곡선
    • YAML 기반의 간단한 구문 덕분에 사용하기 쉬워 IT 자동화 입문자에게 적합하다.
  • 에이전트리스
    • 추가 에이전트를 설치할 필요가 없으므로 유지 관리가 간편하다.
  • 다양한 모듈 제공
    • 네트워킹, 클라우드, 컨테이너, 데이터베이스 등 다양한 영역을 지원하는 모듈을 제공한다.

 

단점

  • 속도 문제
    • 에이전트리스 특성상 대규모 환경에서 SSH 통신을 통해 작업이 이루어지므로 퍼포먼스 측면에서 일부 제한이 있을 수 있다.
  • 복잡한 작업에 대한 한계
    • 매우 복잡한 논리적인 흐름을 처리할 때는 플레이북이 복잡해질 수 있으며 다른 도구에 비해 처리하는 데 한계가 있을 수 있다.

 

앤서블 환경설정하기

 

# sudo apt -y update

# sudo apt -y upgrade

# sudo apt -y install ansible sshpass

# ansible --version

ansible 2.10.8
config file = None

configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']

ansible python module location = /usr/lib/python3/dist-packages/ansible

executable location = /usr/bin/ansible

python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]

 

위 명령어들로 앤서블을 설치한다.

앤서블은 ssh 기반으로 명령을 수행하기 때문에 sshpass 패키지도 설치해야 한다.

 

 

$ sudo mkdir /etc/ansible

$ sudo nano /etc/ansible/hosts

 

위 파일에서 앤서블의 작업 타겟이 될 인스턴스들을 호스트로 등록할 수 있다.

 

 

[target]
ip 적기
추가 아이피가 있다면 줄로 구분해서 계속 적기...

[추가그룹명]
추가아이피들...

 

위와 같이 그룹명 하위에 ip를 적으면 된다.

 

 

그리고 원격지에서 앤서블 서버가 보낸 스크립트를 실행해야 하기 때문에 공개키/비밀키 설정을 해야 한다.

$ ssh-keygen -t rsa -b 4096

 

rsa 키를 만든 후 공개키를 타겟 인스턴스의 ~/.ssh/authorized_keys 파일에 붙여넣으면 된다.