티스토리 뷰

프로그래밍/Ansible

1. Ansible이란?

백오타빅 2022. 2. 22. 20:37
반응형

 

1. Ansible 이란?

Ansible Logo

Ansible은 Python으로 개발된 오픈소스 IaC 솔루션이며 IT 자동화 도구입니다.
시스템을 구성하고, 애플리케이션을 배포하는 등 IT 작업을 자동화 및 관리할 수 있습니다.
Ansible의 주요 목표 중 하나가 단순성을 추구하므로, 난이도가 낮은 YAML 또는 JSON 파일을 사용하여 IT 애플리케이션 환경을 구성하여 관리하게 되어있습니다.
Ansible은 서버의 리소스나 대수가 기하급수적으로 증가해 기존 관리 방식이 어려웠던 Shell Script 방식을 대체하게되며 소규모부터 수천 개의 서버를 관리하는 엔터프라이즈 환경에 이르기까지 모든 환경을 관리하는 데 적합합니다.


2. Ansible 장점

Ansible의 장점은 다양하지만 요약하면 아래와 같습니다.

에이전트 없이 관리가 가능하다!

Agent로 통신하는 방식이 아닌, SSH로 통신하는 방식이며 SSH로 연결한 후 Ansible을 동작시킵니다.(Windows는 WinRM이라는 도구로 통신)
에이전트의 버전을 업그레이드 해야하거나, 에이전트의 프로세스가 삭제되어 관리를 못하는 경우는 전혀 발생하지 않습니다.
또한 SSH를 사용한다는 것 부터가 엄청나게 많은 검증이 된 오픈소스이므로 애플리케이션으로 인한 보안적인 측면에서도 크게 걱정하지 않아도 됩니다.
SSH랑 다른 Kerberos나 LDAP 및 기타 중앙 집중식 인증 관리 시스템도 활용이 가능하여, Ansible의 도입 측면에선 더더욱 진입장벽이 적습니다.


다양한 플랫폼을 지원해요!

물리 서버, 가상 머신, Cloud, Container 환경에서 Linux, Windows, UNIX 등 OS 환경과 Sisco 같은 네트워크 장치에도 Ansible로 지원을 가능합니다.


진입장벽이 낮고 가독성을 중요시합니다!

관리 서버의 정보를 정의하는 파일과 시스템의 상태를 정의하는 파일은 YAML 또는 JSON 텍스트 파일로 작성되어 읽기 쉽고 모든 사람이 수행해야 할 작업을 쉽게 이해할 수 있습니다. 작성하는 데 특별한 전공 기술이 필요하지 않기 때문입니다.


애플리케이션에 대한 완벽한 설명이 가능해요!

Ansible 플레이북을 통해 모든 변경을 수행하고, 정의한 작업에 모든 측면을 설명 및 기록할 수 있습니다.
Container Orchastration인 Kubernetes와 같이 정의를 해주면 정의한 작업에 대한 작업이 가능하다는 것입니다.


여러 번 작업하더라도 변하지 않아요!

Ansible은 여러 번 작업하더라도 대상 서버의 결과는 불변합니다.
즉, 대상 서버를 건들이지 않는 한, 한 번 진행한 task를 재 실행하더라도 결과는 달라지지 않습니다.

 

3. Ansible 용어

제어 서버(Control Node)

 Ansible을 작동하는 서버를 의미합니다.
 Ansible을 사용하려면 필수로 필요한 서버입니다.

 Python은 2버전(>=2.7) 또는 3버전(>=3.5)가 구성되어있어야 합니다.

 

관리 서버(Managed Node)

 Ansible로 작동당하는 서버를 의미합니다.
 Ansible이 설치안되어 있어도 동작하며, SSH 또는 중앙 집중식 인증 시스템이 구성되어있어야 합니다.
 하지만 Ansible은 Python으로 동작하기 때문에 관리 서버에도 Python이 설치되어있어야 합니다.
 Python은 2버전(>=2.6) 또는 3버전(>=3.5)가 구성되어있어야 합니다.

 

Inventory

 Ansible이 접속하는 관리 서버를 저장하는 파일을 의미합니다.
 대상 호스트의 IP와 접속 방법에 대한 정의되어있습니다.
 기본적으론 ini Format으로 작성합니다.


Module

 Ansible이 실행하는 코드 단위를 의미합니다.
 단일 호출 또는 여러 모듈 호출도 가능합니다.
 module 문서 - https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html


Task

 Ansible의 작업 단위를 의미합니다.
 Ansible에서 하나의 모듈을 사용하는 작업을 의미합니다.


Ad-hoc

 단일 모듈 호출을 하여 실행하는 명령을 의미합니다.
 즉, 하나의 task를 호출하는 명령입니다.

Playbook

 여러 모듈 호출에 대한 정의하는 파일 및 명령입니다.
 Playbook 파일에 Task를 정의하고, playbook이라는 명령을 이용합니다.
 모듈을 호출하는 task 이외에 관리할 서버 지정, 변수 정의 등 모든 Ansible 작업에 대한 정의할 수 있습니다.
 기본적으로 YAML Format로 작성하게 됩니다.

4. Ansible 동작 방식


Ansible은 모든 기능이 Python으로 되어있습니다. 그러므로 Ansible의 모든 동작은 Python으로 동작합니다.

아래 내용은 Ansible의 동작 과정을 예시로 설명하는 것입니다.

  1. [제어서버] Playbook의 내용을 Python으로 변환
  2. 제어 서버 ->SSH-> 관리 서버
  3. [관리서버] 임시 디렉토리(추후에 설명)에 변환한 Python 파일을 보관
  4. [관리서버] 보관한 Python 파일을 실행한 후 결과값을 가져오게 됩니다.

그래서 만약 관리 서버에 Python이 설치안되어있다면 Ansible의 실행 결과 값을 가져오기 못하므로

Ansible을 사용할 수 없다고 설명 드리는 것입니다.

 

기본적인 Ansible의 정의와 동작방식을 설명드렸습니다.

이해 안되시는 부분은 댓글로 문의 부탁드립니다.

지금까지 읽어주셔서 감사합니다.

 

Ref.
https://docs.ansible.com/ansible/2.9/installation_guide/intro_installation.html
https://searchitoperations.techtarget.com/definition/Ansible
https://www.ansible.com/blog/ansible-3.0.0-qa
https://velog.io/@honghwahyeong/Ansible-Ansible-%EC%9D%B4%EB%9E%80

https://gainanov.pro/eng-blog/devops/ansible-architecture/https://gainanov.pro/eng-blog/devops/ansible-architecture/

반응형
댓글