본문 바로가기
INFRA/Operation

Ansible 개념

by BTC_지수 2022. 4. 14.

베하~~! 안녕하세요!

 

하 씨 가문의 영광 팀입니다! :)
이번에는 저번 주에 예.고! 한 것처럼 Ansible의 개념을 다뤄보도록 하겠습니다!
그럼 출발합니다~부릉부릉

※ 목차

Ansible

  1. 주요 특징
  2. 구성 요소
  3. Ansible 목록
  4. Ansible Tower

Ansible은 IaC(Infrastructure Code)를 지향하는 자동화 관리 도구로 오픈 소스 기반으로 제작되었습니다.
Python을 기반으로 하며, YAML 포맷을 기반으로 Playbook을 실행시켜 원하는 자동화를 구현하거나, Ad hoc 모드로 모듈을 실행시켜 상태를 조회해 볼 수 있습니다.
*IaC는 앞에 내용에서 다뤄본것처럼 프로그래밍 코드로 Infra 구조를 관리하는 개념입니다.

<참고>

무선랜에는 Ad-hoc Mode와 Infrastructure Mode로 2가지 모드가 존재합니다.

💡 Ad-hoc Mode

  • 독립된 device가 다른 device의 도움 없이 네트워크 망을 구성하는 것
  • device의 LAN Card가 다른 device LAN Card로 직접 데이터 전송 가능
  • Peer-to-Peer (P2P) Network
  • 노트북을 무선 공유기로 만들기로 노트북과 휴대폰을 연결하여 노트북의 네트워크를 휴대폰에서 사용할 수 있습니다.

💡 Infrastructure Mode

  • Access Point(AP) 중계기를 통하여 무선 LAN Card와 데이터 통신
  • device들은 모든 데이터를 AP에게 보내고, AP가 전달하고자 하는 device나 다른 AP로 데이터를 보냅니다.
  • 아래의 두 가지 모드의 서비스 방식이 존재합니다.
    • Basic Service Set(BSS) : AP 1대를 이용하여 네트워크 구성. 소규모 지역에서 사용
    • Extend Service Set(ESS) : 최소 2개의 BSS가 만나서 네트워크 구성. BSS로 구성하기엔 너무 범위가 넓은 경우 사용

Ansible 주요 특징

이제는 Ansible이 자랑하는 주요 특징에 대해 한번 알아보도록 하겠습니다.

Agentless
  • 기존 Chef/Puppet처럼 기존에 알려진 IaC 솔루션들은 Target Host들에 Agent를 반드시 설치해줘야합니다.
  • 하지만, Ansible은 SSH를 기반으로 원격 서버에 명령을 전달하기 때문에, 각 원격 서버에 접속해서 Agent를 설치해줄 필요가 없습니다.
  • Agent 설치 단계를 제거함으로써 인프라 구축을 더 자동화에 가깝게 만들어줍니다.

 

접근 용이성
  • 진정한 의미의 자동화를 위해서는 쉘 스크립트 파일을 실행만 시키면 쉘 스크립트 파일내에 있는 모든 명령이 주르륵 실해되듯이, 명령어들을 모아서 한번에 처리할 수 있어야합니다.
  • 이러한 면에서 Ansible은 명령 모음집(Playbook)을 YAML형식의 파일로 관리합니다
  • YAML파일의 휼룡한! 가독성 덕분에 사용자들이 느끼는 Ansible의 진입장벽이 낮습니다.

 

다양한 모듈 지원
  • 버전이 지속적으로 패치되고, 넓은 사용자 층을 확보하게 되면서 많은 모듈들을 지원하고 있습니다.
  • IaC 도구들 가운데, Ansible보다 훨씬 오래된 역사를 가지고 있는 툴들 보다도 많은 커뮤니티, 지원 모듈과 플러그 인을 가지고 있습니다.

 

멱등성
  • Ansible하면 가장 먼저 떠오르는 주요특징인 멱등성은 연산을 여러번 수행하더라도 결과가 달라지지 않는 성질을 말합니다.
  • Ansible에서는 YAML 스크립트 파일로 작성된 Playbook을 여러 차례 반복을 해도 결과를 동일하게 출력시켜, 결과가 달라지지 않도록 구성되어 있습니다.
  • 또한, Task를 수행하기 전에 모듈의 상태를 먼저 체크하고, Task를 수행할 때도 추가된 것과 변화된 부분에 대한 정보들을 제공하여 일관성 있는 결과를 제공할 수 있습니다.
  • 이러한 특징 덕분에 오동작이나 설정 오류 등으로 문제가 발생하는 것에 대해 우려할 수 있는 부분들을 해소하도록 도와줍니다.
Ansible 구성요소

마지막으로 Ansible이 어떻게 구성이 되어있는지 알아보겠습니다!

Ansible Control Node

"Ansible이 실행되고 있는 Server" 입니다.

Control Node를 통해 원격으로 다수의 Managed Node로 관리할 수 있습니다.

 

Managed Node

"Ansible을 통해 관리하고자 하는 Server" 입니다.

앤서블은 Agentless로 동작하기 때문에, Managed Node에는 Ansible이 설치되지 않습니다.

또한, Inventory에 작성되어 있는 대상입니다!

 

Inventory (host file)
  • 자동화 관리 대상인 Managed Node 즉, Server목록이 작성되어 있습니다.
  • /etc/ansible/hosts 파일에 이 원격 서버들 목록이 저장되어 있으며, 이 파일을 인벤토리라고 합니다.
  • 여기에는 Managed Node의 IP Address, host 정보, 변수와 같은 정보들이 저장되어있습니다.
  • 또한, Managed Nodes는 그룹화하여 관리할 수 있습니다. 그룹은 하위 그룹을 포함할 수 있으며, 한 호스트는 여러 그룹에 포함될 수 있습니다.

 

Module
  • Ansible이 실행하는 코드 단위로써, 자동화 기능 내장 패키지로 하나의 완전한 단위 기능을 제공합니다.
  • Ansible은 멱등성이 보장되는 다양한 기능의 모듈을 제공하며, 운영자는 모듈을 직접 실행하거나, 또는 Playbook을 통해서 체계적으로 실행할 수 있습니다.

 

💡 내장되어있는 Ansible 목록 참고

- Ansible version 2.9 기준

공식문서 : https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html
API

Ansible Python API를 사용하여 Managed Node를 제외하고, Ansible을 확장하여 다양한 Python 이벤트에 응답하고, 다양한 플러그인을 작성할 수 있습니다.

 

Plugin
  • 사용자가 직접 작성한 Module로 Ansible의 핵심 기능을 보강하는 역할 입니다
  • Ansible은 Plugin 아키텍처를 사용하여 풍부하고 유연하며 확장 가능한 기능 세트를 활성화 합니다.

💡 공식적으로 지원하고 있는 Ansible Plugin 목록 참고

 

추가적인 부분
Ansible tower
  • 한마디로! Ansible GUI라고 보시면 됩니다
  • Ansible의 불만 사항 중 하나는 적절한 GUI가 제공되지 않다는 것이였습니다.
  • Ansible Tower는 Ansible을 위한 Web기반 UI이자 REST API로 실시간 노드 모니터링을 그래픽 기반으로 보여주는 Tool입니다.
  • 기존 Command로 하던 작업을 UI로도 진행을 할 수 있음으로써 접근하기 쉬워졌습니다.

 

 

이로써 오늘은 Ansible 개념, 특징, 구성요소에 대한 내용을 한번 다루어보았습니다!
긴글을 읽어주셔서 감사하고 도움이 되셨으면 좋겠습니다~ >,<
다음시간에는 Terraform 과 Ansible의 관계에 대한 내용으로 찾아뵙겠습니다~ 뿅!

 

Animated Rainbow Nyan Cat

댓글