새소식

IaC/Ansible

[A101 Study 1주차] Ansible 소개

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 A101 Study 1주차 스터디 내용 정리

 

 

올해 첫 스터디를 Ansible 스터디로 시작하게 되었습니다.
올초에 Ansible 활용이 필요한 업무가 내정되어 있는데, 5주간 열심히 공부하여 폭풍성장 해보도록 하겠습니다.

 

이번 스터디는 '앤서블로 시작하는 인프라 자동화' 책을 기반으로 진행하였습니다.

 

1. Ansible 소개

 

출처: https://docs.ansible.com/ansible/latest/getting_started/index.html

 

Ansible 은 오픈소스 IT 자동화 도구입니다.

 

  • 마이클 데한에 의해 Ansiblework 라는 이름으로 2014년 3월 4일 처음 소개되었고, 그 후 2015년 레드햇이 인수하여 개발, 관리하고 있습니다.
  • 앤서블은 파이썬앤서블 코어만 설치하면 어디에서나 플레이북을 작성하고 이를 실행시킬 수 있습니다.
  • 앤서블은 앤서블 코어가 설치되고 플레이북을 실행할 수 있는 제어 노드 (Control Node) 와 플레이북이 실행되는 관리 노드 (Managed Node) 로 구성됩니다.
  • 앤서블은 제어 노드에만 설치됩니다.

 

1.1. Ansible 을 왜 사용하는가?

Ansible 을 사용하지 않을 경우, 관리자가 직접 서버에 접근해야한다.

 

Ansible 을 사용하지 않고 다수의 서버를 관리할 경우 관리자가 직접 서버에 접근하여 명령어를 수행해야 하기 때문에 많은 시간이 소요됩니다.
또한 서버 마다 변경 사항에 대한 기록을 각각 문서 등으로 관리해야되는 번거로움이 있을 수 있습니다.

 

Ansible 을 사용하면, 서버에 접근할 필요 없이 작업을 자동화 할 수 있다.

 

이 때, Ansible 을 사용하면 다음과 같은 장점이 있습니다.

 

  1. 특정 1개의 서버 혹은 로컬 PC 에서 모든 Task 관리 가능
  • 모든 서버에 SSH 로 접속할 필요가 없습니다.
  1. 1개의 Yaml 파일에서 Configuration / Installation / Deployment 단계를 모두 선언하고 관리할 수 있습니다.
  • 서버에서 수동으로 쉘 스크립트 명령어를 입력할 필요가 없습니다.
  1. 동일한 구성 파일을 여러번, 다른 환경에서 재활용 할 수 있습니다.
  2. Human Error 를 방지할 수 있습니다.

 

1.2. Ansible 특징

  1. Agentless

Ansible 은 관리 노드에 별도의 에이전트를 설치할 필요가 없습니다.
즉, SSH 접속만 가능하다면 손쉽게 대상 서버들을 관리할 수 있습니다.

 

이것이 바로 Ansible 의 가장 큰 특징이자 장점입니다.

 

  1. 멱등성 (Idempotent)

멱등성은 동일한 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질입니다.
앤서블은 시스템을 원하는 상태로 표현하여 유지하도록 설계되어 있어, 동일한 작업을 여러 번 실행해도 동일한 결과를 냅니다.

 

  1. 쉬운 사용법, 다양한 모듈

앤서블은 YAML 을 사용하기 때문에 앤서블 파일을 쉽게 작성하고 읽을 수 있습니다.
또한 파일 복사와 같은 일반 시스템 관리 모듈부터 다양한 환경의 퍼블릭 클라우드 관련 모듈 및 컬렉션까지 제공하므로, 쉽게 플레이북 예제를 찾아보고 자동화를 수행할 수 있습니다.

 

1.3. Ansible vs Puppet/Chef

상기 특징을 정리하여 다른 자동화 도구인 Puppet / Chef 와 앤서블을 비교하면 다음과 같습니다.

  Ansible Puppet / Chef
문법 YAML Ruby
대상 노드 Agent 설치 여부 미설치 설치 필요
(에이전트 버전 업데이트 및 관리 필요)

 

2. Ansible 용어

 

용어에 대해서는 이후 추가로 배우겠지만, 이번 글에서는 간략하게 알아보겠습니다.

 

2.1. 제어 노드 (Control Node)

 

앤서블이 설치되는 노드로 운영체제가 리눅스라면 제어 노드가 될 수 있습니다.
앤서블은 파이썬을 이용하므로, 앤서블과 함께 파이썬이 설치되어 있어야 합니다.

 

2.2. 관리 노드 (Managed Node)

 

관리 노드는 앤서블이 제어하는 원격 호스트를 의미합니다.
별도 에이전트 설치 없이 제어 노드와 SSH 통신이 가능해야 하며, 관리 노드에 파이썬이 설치되어 있어야 합니다.

 

2.3. 인벤토리 (Inventory)

 

제어 노드가 제어하는 관리 노드의 목록을 나열해놓은 파일입니다.
앤서블은 인벤토리에 정의되어 있는 관리 노드에만 접근할 수 있습니다.

Inventory 예시

 

2.4. 모듈 (Modules)

 

앤서블은 관리 노드의 작업을 수행할 때 SSH 접속 후, '앤서블 모듈'이라는 스크립트를 푸시하여 작동합니다.

 

2.5. 플러그인 (Plugins)

 

플러그인은 앤서블의 핵심 기능을 강화합니다.
모듈이 대상 시스템에서 별도의 프로세스로 실행되는 동안 플러그인제어 노드에서 실행됩니다.
플로그인은 앤서블의 핵심 기능(데이터 변환, 로그 출력, 인벤토리 연결 등)에 대한 옵션확장 기능을 제공합니다.

 

2.6. 플레이북 (Playbook)

 

플레이북은 관리 노드에서 수행할 작업들을 YAML 문법을 이용해 순서대로 작성해놓은 파일입니다.
엔서블은 이렇게 작성된 플레이북을 활용하여 관리 노드에 SSH로 접근해 작업을 수행합니다.

Playbook 예시

 

 


 

이번 글에서는 Ansible 에 대해 간략하게 알아보았습니다.
다음 글부터는 실제 Ansible 을 설치하고 실행하는 법에 대해 알아보겠습니다.

Contents

포스팅 주소를 복사했습니다