jisung-02notes
← Archive

Ansible 소개

Ansible의 핵심 개념과 구성 요소, 설치 방법 정리

jisung-02

참고자료

  1. https://product.kyobobook.co.kr/detail/S000209345794

앤서블 소개

앤서블이란?

  • 마이클 데한이 앤서블 웍스라는 이름으로 2014년 3월 4일에 공개한 오픈소스 프로젝트다.
    • 2015년 10월 레드햇이 인수해 개발, 관리 중이다.
  • 기존 Puppet, Chef와 대비해 차별화된 특징을 가지는 서버, 인프라 관리 자동화 도구다.

앤서블의 특징

  1. Agentless
    • 기존 자동화 도구인 Puppet, Chef는 자동화 관리 대상 서버에 별도 에이전트를 설치하고 이를 통해 자동화 업무를 수행한다.
    • 이런 데몬 형식 에이전트에 기반한 방식은 관리를 위한 추가 작업, 또는 OS 버전에 따라 추가 패키지나 모듈을 설치하는 등의 작업이 발생한다.
    • 앤서블은 에이전트 없이 SSH로 접속하여 쉽게 대상 서버들을 관리할 수 있다.
  2. 멱등성
    • 동일한 연산을 여러 번 적용해도 결과가 달라지지 않는 성질이다.
    • 앤서블은 멱등성을 기본으로 하여 동일한 작업을 여러 번 실행해도 같은 결과를 낸다.
      • 멱등성을 지원하지 않는 모듈도 존재하나, 멱등성 지원을 기본 요건으로 한다.
  3. 쉬운 사용법, 다양한 모듈
    • 다른 자동화 도구에 비해 복잡하지 않아 자동화 절차 및 과정을 이해하기 쉽다.
    • 자동화 단계는 YAML 문법으로 쉽게 작성할 수 있다.
    • 일반 시스템 관리부터 특정 퍼블릭 클라우드 관련 모듈 및 컬렉션까지 제공하므로 자동화 수행이 쉽다.

앤서블은 언제 사용하는가

  • 시스템 환경 설정
  • 애플리케이션 설치 및 배포
  • 퍼블릭, 프라이빗 클라우드 시스템의 가상 서버 생성
  • 매일 점검해야 하는 시스템의 상태 체크
  • 특정 시스템 구축

앤서블은 어디서 사용 가능한가

  • 리눅스, macOS, BSD 계열 Unix, WSL 지원 윈도우 등 Unix-like 환경에서 Python, Ansible Core만 설치하면 사용할 수 있다.
  • 앤서블을 사용하는 시스템은 2가지 종류의 노드로 분류한다.
    1. 제어 노드: 앤서블 코어가 설치되고 플레이북을 작성하여 실행하는 노드다.
      • 앤서블 코어, 사용자에 의해 정의된 플레이북, 관리 노드를 정의한 인벤토리 파일이 존재한다.
    2. 관리 노드: 플레이북이 실행되어 애플리케이션 설치나 클라우드 시스템의 가상 서버 생성 같은 작업이 수행되는 노드다.
      • SSH가 실행되고 있어야 하고 Python이 설치되어야 한다. (일부 예외 존재)
    • 즉, 명령을 전송하는 제어 노드와 명령의 대상이 되는 관리 노드로 구성된다.

앤서블은 누가 사용하는가

  1. 시스템 엔지니어
  2. 데브옵스 엔지니어
  3. 클라우드 관리자
  4. 퍼블릭, 프라이빗 클라우드 담당자
  • 이외에도 비즈니스 로직, 성능 측정에도 사용할 수 있다.

앤서블의 2가지 형태

앤서블은 크게 “커뮤니티 앤서블”과 “레드햇 앤서블 오토메이션 플랫폼”으로 나뉜다.

  1. 커뮤니티 앤서블: 오픈소스 형태로 운영체제가 리눅스라면 어디에나 설치해 사용할 수 있다.
  2. 레드햇 앤서블 오토메이션 플랫폼: 레드햇 서브스크립션을 통해 사용할 수 있다. (유료)

앤서블 아키텍처

커뮤니티 앤서블은 크게 6가지 구성요소로 이루어진다.

  1. 제어 노드
    • 앤서블이 설치되는 노드다.
    • 운영체제가 리눅스(또는 Unix-like, POSIX 지원 환경)면 제어 노드가 될 수 있다.
    • 앤서블이 파이썬 모듈을 사용하므로 파이썬이 함께 설치되어야 한다.
  2. 관리 노드
    • 앤서블이 제어하는 원격 시스템 또는 호스트다.
    • 리눅스, 윈도우에 무관하며 SSH 통신만 가능하면 된다.
    • 파이썬이 설치되어 있어야 한다.
  3. 인벤토리
    • 제어 노드가 제어하는 관리 노드의 목록을 나열한 파일이다.
    • 관리 노드의 성격에 따라 그루핑할 수 있다.
    • 기본적으로 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
  4. 모듈
    • 앤서블은 관리 노드에 작업을 수행할 때 SSH를 통해 연결한 후 앤서블 모듈이라는 스크립트를 푸시해 작동한다.
    • 모듈은 실행이 완료되면 관리 노드에서 제거된다.
    • 대부분의 모듈은 원하는 시스템 상태를 설명하는 매개변수를 허용한다.
  5. 플러그인
    • 모듈과 달리 제어 노드에서 실행되어 앤서블의 기능을 확장하는 역할을 한다.
    • 데이터 변환, 출력, 연결 방식 등을 수정, 확장하는 기능을 제공한다.
  6. 플레이북
    • 관리 노드에서 수행할 작업들을 YAML 문법으로 순서대로 작성해놓은 파일이다.
    • 앤서블은 작성된 플레이북을 읽어 관리 노드에 접근해 작업을 수행한다.

앤서블 오토메이션 플랫폼 추가 컴포넌트

앤서블 오토메이션 플랫폼의 주요 컴포넌트는 커뮤니티 앤서블과 동일하나, 추가로 제공하는 기능이 있다.

  1. 오토메이션 컨트롤러: 앤서블 관리 웹 UI (REST API도 제공)
  2. 실행 환경: 앤서블 모듈과 플러그인이 존재하는 컨테이너 기반의 실행 환경
  3. CMDB (Configuration Management DB): 인벤토리, 인증 정보, 실행 환경 등의 정보를 관리
  4. 오토메이션 허브: 레드햇 기술지원이 가능한 컬렉션 제공 서비스

앤서블 실습 환경 만들기

가상환경 설치

UTM 가상머신 설치 가이드

  • 앤서블이 실행될 가상환경을 생성한다.

앤서블 설치

우분투 환경 기준:

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이 하는 일:
    1. PPA URL 변환
    2. /etc/apt/sources.list.d/에 파일 생성
    3. GPG key 등록
    4. apt update 수행

macOS 기준:

brew update
brew install ansible