본문으로 바로가기

[DevOps] Ansible이란?(앤서블)

category IT/DevOps 2019. 10. 23. 09:26
반응형

 

안녕하세요 Ansible(앤서블)은 최근에 public cloud가 화두가되면서 주목받고 있는 DevOps 툴 중에 하나입니다. 

가상화기술과 public cloud 분야에 종사하고 있는 입장에서 앤서블을 모르면 안되겠다 싶었습니다. 그래서 오늘은 앤서블에 대해서 한번 알아보도록 하겠습니다.

 

 

 

앤서블 이란?? 

Ansible (앤서블)은 여러 개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구입니다.

2012년에 마이클 데한 이라는 개발자가 만들어 소스코드를 공개한 오픈소스 소프트웨어 입니다. 2015에 오픈소스 업계의 큰 손인 레드헷이 인수 했습니다.

앤서블은 플레이북 이라는 곳에 실행할 구성을 선언해 놓으면, 필요할 때 마다 자동으로 실행 시킬 수 있는 것이 가장 큰 특징입니다. 

웹서버의 구성과, DB서버의 구성을 선언해 놓으면 관리자들은 필요할 때마다 그 구성대로 서버의 설정을 베포 할 수 있게 해주는 것이죠.

 

앤서블의 역할??

기존 리눅스에서 동일한 환경을 구성하기 위해 Bash 쉘 스크립트에 패키지의 설치, 설정파일 수정등을 나열하여 이를 실행하는 것이 일반적이었습니다.

IT의 기술력이 진보함에 따라 인프라 환경도 기존 Data center에서 cloud 환경으로 변화되고 있으며, 한명의 관리자(Admin)가 관리해야하는 서버의 숫자가 증가하게 되었습니다.

따라서 클러스터에 존재하는 많은 서버들에 동시에, 동일한 화경을 배포해야하는 상황이 발생하게 되었고, Bash 쉘 스크립트의 한계점을 갖게 되었습니다.

이를 위해 고안된 Infrastructure as a code 개념입니다. 이것은 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것을 의미합니다. 

Infrastructure as a code가 가능한 자동화도구를 이용하여 인프라의 상태를 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 돕게 되었습니다.

이러한 자동화도구 중 가장 대표적인 툴이 바로 앤서블(ANSIBLE)인 것이죠.

 

앤서블의 3가지 요소

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

인벤토리는 어디서 수행 할 것인지?

플레이북은 무엇을 수행 할 것인지?

모듈은 어떻게 수행할 것 인지? 를 정의합니다.

 

인벤토리(inventory)

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

[webserver]

web1 ansible_host = aaa.app.host

web2 ansible_host = bbb.app.host

[db]

db1 ansible_host = aaa.db1.host

db2 ansible_host = bbb.db2.host

 

플레이북(Playbook)

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

- name: ngins install
  hosts: all
  become: true
  tasks:
    - name: ngix package install
    yum:
       name: nginx
       state: installed

 

모듈(Module)

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소입니다. 

타겟 호스트로 실제 작업을 처리하는 단위로 이 Module이라는 개념을 사용합니다. 앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며, 실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수가 있습니다. 

yum sysctl systemd copy git docker_container ... 등. 예를 들어 yum 명령어를 통해 패키지를 설치할때 yum 모듈을 사용하면 되며 위 플레이북 예시에서 yum 부분이 yum 모듈을 정의하고 이를 사용하겠다는 의미 입니다.

앤서블의 모듈정보는 다음 URL에서 확인할 수 있습니다. https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

 

All modules — Ansible Documentation

 

docs.ansible.com

 

앤서블의 멱등성

앤서블은 멱등성(Idempotency)이란 특징을 가집니다. 이게 무슨말이냐면 여러 번 적용해도 결과가 동일하며, 수정된 부분이 있다면 그 부분만 새롭게 반영 된다는 것입니다.

여기까지 앤서블에 대해서 간략히 알아보았는데요, 다음 포스팅에는 실제로 앤서블을 어떻게 사용하는지 간단한 예시로 테스트 하는 포스팅을 하도록 하겠습니다.

 

앤서블 설치부터 사용까지 

https://kim-dragon.tistory.com/53

 

[DevOps] Ansible 설치부터 사용까지

Intro Ansible설치부터 간단한 데모를 통해 어떻게 사용하는지 까지 진행해보도록 하겠습니다. 앤서블(Ansible)이 무엇인지는 아래 경로를 참고 바랍니다 [https://kim-dragon.tistory.com/13?category=839107\]..

kim-dragon.tistory.com

 

 

반응형