[Ansible]

xeomina·2022년 7월 8일
0

IaC

목록 보기
2/2
post-thumbnail

Ansible

앤서블 이해하기

Ansible(앤서블)은 여러개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구이다. 2012년에 마이클 데한이라는 개발자가 만들어 소스코드를 공개한 오픈소스 소프트웨어이다. 2015년에 오픈소스 업계의 큰 손인 레드헷이 인수했다.

앤서블은 플레이북이라는 파일에 실행할 구성을 선언해놓으면, 필요할 때마다 자동으로 실행시킬수 있는 것이 가장 큰 특징이다. 웹 서버의 구성과 DB 서버의 구성을 선언해놓으면 관리자들은 필요할 때마다 그 구성대로 서버의 설정을 배포할 수 있게 해주는 것이다.

기존 리눅스에서 동일한 환경을 구성하기 위해 Bash 쉘 스크립트에 패키지의 설치, 설정파일 수정 등을 나열하여 이를 실행하는 것이 일반적이었다. IT의 기술력이 진보함에 따라 인프라 환경도 기존 Data Center에서 Cloud 환경으로 변화되고 있으며, 한명의 관리자(Admin)가 관리해야 하는 서버의 숫자가 증가하게 되었다.

따라서 클러스터에 존재하는 많은 서버들에 동시에, 동일한 환경을 배포해야 하는 상황이 발생하게 되었고, Bash 쉘 스크립트의 한계점을 갖게 되었다. 이를 위해 고안된 Infrastructure as a code 개념이다. 이것은 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것을 의미한다. Infrastucture as a code가 가능한 자동화 도구를 이용하여 인프라의 상태를 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 돕게 되었다.

이런 자동화 도구 중 가장 대표적인 툴이 바로 앤서블(Ansible)이다.

앤서블(Ansible)이란?

https://www.redhat.com/ko/technologies/management/ansible/what-is-ansible

앤서블(Ansible)은 오픈소스 IT 자동화 툴로서, 프로비저닝, 구성 관리, 애플리케이션 배포, 오케스트레이션, 기타 여러 가지 수동 IT 프로세스를 자동화한다. 더 단순한 관리 툴과 달리 Ansible 사용자(예: 시스템 관리자, 개발자, 아키텍트)는 Ansible 자동화를 사용해 소프트웨어를 설치하고, 일상적인 태스크를 자동화하고, 인프라를 프로비저닝하고, 보안 및 컴플라이언스를 개선하고, 시스템에 패치를 적용하고, 조직 전체에 자동화를 공유할 수 있다.

앤서블(Ansible)의 작동 방식

앤서블(Ansible)은 자동화하려는 대상에 연결하고, 이전에는 수동으로 수행되었을 지침을 실행하는 프로그램을 푸시하는 방식으로 작동한다. 이 프로그램은 엔드포인트의 연결성, 인터페이스, 명령에 대한 구체적인 기대 수준을 바탕으로 작성된 Ansible 모듈을 활용한다. 그런 다음, Ansible은 이러한 모듈을 실행(기본적으로 표준 SSH 경유)하고, 완료 후에는 모듈을 제거한다(해당하는 경우).

추가 서버, 데몬 또는 데이터베이스는 필요하지 않는다. 일반적으로 사용자는 가장 선호하는 터미널 프로그램, 텍스트 편집기, 버전 관리 시스템을 이용해 콘텐츠 변경 사항을 추적한다.

앤서블의 3가지 요소

앤서블은 크게 3가지인 인벤토리, 플레이북, 모듈로 이루어져 있다.

  1. 인벤토리는 어디서 수행할 것인지?
  2. 플레이북은 무엇을 수행할 것인지?
  3. 모듈은 어떻게 수행할 것인지? 를 정의한다.

1. 인벤토리(Inventory)

인벤토리는 앤서블에 의해 제어될 대상을 정의한다. 일반적으로 hosts.ini 파일에 정의해 사용하며, 여러 서버들의 SSH 접근 IP, 포트, 리눅스 사용자와 같은 접속 정보를 아래와 같이 정의한다.

[webserver]
web1 ansible_host = aaa.app.host	# ip도 가능
web2 ansible_host = bbb.app.host

[db]
db1 ansible_host = aaa.db1.host
db2 ansible_host = bbb.db2.host

2. 플레이북(Playbook)

플레이북(각본)은 인벤토리 파일에서 정의한 대상들이 무엇을 수행할 것인지 정의하는 역할을 하며, yaml 포맷으로 설정한다. 앤서블을 사용하려면 이 playbook을 잘 다룰 줄 알아야하며, 단독으로 사용되는 것이 아닌 인벤토리와 플레이북의 조합으로 같이 사용한다. 플레이북 yaml 파일의 예시는 아래와 같다.

  • name, hosts, tasks : 기본
  • 플레이북 안에 인벤토리(hosts) 및 모듈(yum) 포함
---
- name: nginx install
  hosts: all
  become: true				# 권한 상승
  tasks:
   - name: nginx package install
     yum:					# 모듈 - package manager
      name: nginx		 	 # 패키지 이름
      state: installed		 # present(install) / absent(remove)
   - name: ~~~
     yum: ~~~
- name: ~~~  

3. 모듈(Module)

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소이다. 타켓 호스트로 실제 작업을 처리하는 단위로 이 모듈이라는 개념을 사용한다. 앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며, 실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수 있다 (yum, sysctl, systemd, copy, git, docker_container, apt, shell 등). 예를 들어 yum 명령어를 통해 패키지를 설치할 떄 yum 모듈을 사용하면 되며 위 플레이북 예시에서 yum 부분이 yum 모듈을 정의하고 이를 사용하겠다는 의미이다.

참고

0개의 댓글