본문 바로가기
프로그래밍/Ansible

Ansible(앤서블)에 대하여.... (간단한 설명)

by Hwan2 2021. 4. 1.
728x90
반응형

 

 

 

 

 

 

 

 

 

서버를 운용하다보면 셋팅이 필요한 경우가 있습니다.

 

예를들면 패키지 설치, 응용프로그램 설치 등...

설치가 끝나면 해당 프로그램에 맞게 셋팅도 해줘야 합니다.

 

apache라면 '/var/www/html/' 에 위치해 있어야 겠죠.

nginx 라면 '/usr/share/nginx/html' 에 위치하겠죠.

 

클러스터를 구축한다고 가정해보겠습니다.

즉, 동일한 기능을 하는 웹 서버를 5대 셋팅한다는 뜻입니다.

 

5대라면 충분히 서버 하나하나에 접속해서 셋팅할 수 있습니다.

시간이 좀 걸리더라도요...

 

그럼 100대, 200대 라고 생각해봅시다.

또한 위 서버들의 셋팅은 전부 다 다릅니다.

한 그룹은 웹서버, 다른 그룹은 DB, 다른 그룹은 다른 웹서버 등....

 

거의 하루 이틀 날잡아서 될 양이 아니죠??

 

특히 요즘 Micromicro service architecture 시대에 와서 저런 서버양은 가설이 아니라 진짜입니다.

이것들을 좀 자동화 시켜 사용자의 편의성을 제공해주는 소프트웨어가 존재합니다.

 

Ansible, Chef, Puppet, SaltStack 이 대표적이죠.

 

저는 여기서 Ansible에 대해 좀 알아볼까 합니다.

 

 

1. Ansible

Ansible은 Python으로 만들어진 오픈소스 프로젝트입니다. 현재는 RedHat에서 인수하여 관리하고 있습니다.

 

Ansible은 Playbook이라는 정의된 스크립트나 Ad-Hoc이라는 커맨드 명령을 통해 원격지 노드들을 관리하게 됩니다.

또한 RedHat에서 관리하고 있다는 측면에서 큰 메리트가 있는데, 버그 패치같은 것들을 신경써서 해준다는 점입니다.

 

또 다른 장점은 SSH를 이용한 원격 통신 및 권한접근입니다.

 

Chef나 Puppet같은 경우 원격 노드들에게 접근하기 위해서 클라이언트 에이전트를 깔아줘야 합니다.

즉, 각 노드들에 설치에 따른 불편함이 있죠.

 

Ansible은 SSH통신으로 각 노드들에게 접근할 수 있습니다.

그러므로 클라이언트 에이전트같은 프로그램을 설치할 필요가 없죠.

 

단, 이를 위해 셋팅해줘야하는 것들이 있는데,

 

1. Master node의 public-key를 각 노드들에게 전달해줘야 한다.

2. public-key로 접근하는 유저가 "Hwan"이라면 각 노드들의 계정도 "Hwan"으로 통일해줘야 한다.

(그래야 동일한 이름의 계정으로 자동 접속되기 때문입니다.)

3. Hwan 유저의 그룹은 wheel 그룹으로 지정해 줘야 한다.

(wheel 그룹은 관리자 권한을 대행해 주는 그룹으로 설정되어 있습니다. 때문에 sudo 같은 root권한이 필요한 작업을 할 때 root권한을 가져와 사용할 수 있습니다.)

 

이렇게 셋팅해 줘야 합니다.....(클라이언트 에이전트 설치하는 것이 좀 더 편한가?....)

 

 

2. Inventory

Ansible에서는 Inventory라고 하는 파일에 자동화를 위한 타겟을 정의하게 됩니다.

 

예를 들자면 hosta = 192.168.0.10, hostb = 192.168.0.11 ....

이런 식으로 말이죠.

 

또한 이런 호스트들을 그룹으로 묶어서 관리할 수 있습니다.

 

그외 전역변수를 통해서 변수 설정도 가능합니다.

 

해당 Inventory를 가져와서 Ansible이 해당 정보를 토대로 명령어 실행을 처리하게 됩니다.

 

3.  Playbook

쉽게 말해서 쉘 스크립트 같은 파일 입니다.

 

Inventory에서의 정보를 가져와 원하는 호스트들에게 원격으로 명령을 실행할 수 있도록 정의하게 됩니다.

 

명령어 실행 순서는 위에서 아래로 진행하게 됩니다.

 

또한 모듈이라고 하는 명령어들이 정의된 하나의 모듈을 읽어와 실행해주기도 합니다.

 

Playbook은 task라고 하는 명령어를 기반으로 사용자가 정의한 명령어가 실행됩니다.

 

또한 파일들은 .yml 파일로 저장되지요.

 

4. Module

Ansible은 Playbook에서 사용할 수 있는 독립 실행형 스크립트 입니다.

 

즉, 일련의 명령어를 실행하는 기능의 집합체라고 볼 수 있습니다.

 

모듈에서 하는 내용들을 Playbook에 정의해도 돌아갑니다.

 

하지만 저희가 프로그래밍을 할 때 클래스를 기능별로 나눠서 가독성과, 유지보수 관리를 용이하게 하듯이

 

Ansible도 마찬가지로 Playbook이라는 컨트롤러를 기준으로 각 기능 기능들을 모듈이라는 하나의 파일로 정의해

 

불러서 사용하는 것입니다.

 

 

5. 멱등성

멱등성이라는 단어가 굉장히 생소합니다. 이는 영어로 idempotent를 한국어로 변역한 것으로

 

뜻을 풀이하자면, 연산을 여러 번  적용해도 결과값이 바뀌지 않는다는 뜻을 의미합니다.

 

Ansible은 이 멱등성이 되도록 설계되어 있습니다. 

 

즉, Playbook을 통해 여러번 실행을 하더라도 안전하게 반복할 수 있다는 뜻입니다.

 

 

 

6. 마치며....

그냥 대략적인 앤서블에 구조? 에 대한 설명인 글입니다.

 

앤서블이 무엇인지 모르시는 분들, 아니면 공부하기 시작하시는 분들에게

 

조금의 개념 설명이 되었으면 합니다.

 

이후에 좀 더 상세히 다뤄보도록 하겠습니다.

 

감사합니다. :)

 

 

 

 

 

 

반응형

'프로그래밍 > Ansible' 카테고리의 다른 글

Ansible로 CentOS 7 wordpress, mysql 설치하기  (0) 2021.04.07
Ansible Inventory 작성방법  (0) 2021.04.01

댓글


스킨편집 -> html 편집에서