이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Ansible

01. Ansible 개념

이쿠우우 2021. 12. 12. 11:03
반응형

 

 

Ansible

 

목표

Ansible 개념정리 및 사용법 숙달
 
 

 
 

Ansible 이란?

최초의 서버 인프라 관리는 수동으로 서버마다 접속해서 직접 명령어 한줄 한줄 입력해서 인프라를 구성했었음.
이와 같이 작업하면 시간이 매우 많이 소요되고 작업자가 처리할 수 있는 시간적 한계도 존재했음.
그리고 작업자의 실수가 있을 수도 있었음.
이를 해결하기 위해 인프라를 script로 작성하여 인프라가 자동으로 구성되도록 관리했었음.
예) [linux : shell script], [windows : batch script]
이러한 shell script는 한 서버에 접속하여 환경 구성을 자동화 하기에 아주 편리했음.
하지만 최근에는 클라우드 환경으로 변화하면서 
host기반에서 container화 되고 관리해야하는 host 자체의 수도 매우 많아짐.
그에 따라 동시에 많은 서버에 동일한 환경을 배포해야하는 경우가 발생함.
이런 경우 shell script로 작업하기에는 한계가 있었음.
이를 해결하기 위해 나온 개념이 바로 IaC 즉 (Infrastructure as Code) 임.
IaC는 컴퓨터의 인프라 구성을 소프트웨어를 개발 하는 것 처럼 코드로 작성하는 것을 의미함.
다수의 server에 동일한 application을 배포 및 실행하는 등 모든 서버가 동일한 환경을 구성할 수 있도록 해줌.
Iac의 대표적인 솔루션이 바로 Ansible임.
 
 

 

Ansible 특징

1 ) 구현 언어 : python
2 ) open source
3 ) open source license : GPL(GNU - General Public License)
자유소프트웨어재단(FSS)에서 만든 라이센스로 자유소프트웨어재단 설립자인 리처드 스톨만에 의해서 만들어졌습니다. 
가장 많이 알려진 카피레프트에 속한 라이센스이며, 
GPL 라이센스를 따르는 프로그램은 목적이나 형태의 제한없이 사용이 가능하며 
카피레프트가 추구하는 방향성처럼 프로그램을 이후 수정하고 배포하는 모든 경우에 
무조건 GPL로 공개를 해야 합니다.
(GPL을 따른 프로그램을 사용해서 2차 저작물을 만들면 2차 저작물도 반드시 GPL 라이센스를 명시해야 함.)
GPL 라이센스 적용 예: 리눅스 커널, Git, 마리아 DB, 워드프레스, 파이어폭스(v2.0) 등
4 ) 멱등성
어떤 연산이 여러번 수행되더라도 결과가 달라지지 않는 성질을 의미합니다.
Ansible 또한 동일한 모듈을 반복 실행해도 결과가 동일하게 출력시켜, 
결과가 달라지지 않도록 구성되어 멱등성을 일관되게 수행할 수 있습니다.
- 여러 번 적용해도 결과는 바뀌지 않음.
- 변경 사항이 없으면 배포되어도 바뀌지 않음.
- 변경 사항이 있으면 해당 부분만 반영.
- sheel, command, file module은 보장안됨.
5 ) Agentless 방식으로 동작함.
6 ) ssh 접속으로 제어
7 ) 자동화 단계에서 YAML 문법 사용
8 ) 병렬 provisioning 지원 - 여러 서버를 병렬적으로 prosivsioning 가능
 

 

Ansible 구성 요소

 

Ansible Control Node

Ansible이 실행되고 있는 Server로 해당 control node를 통해
원격으로 다수의 managed node를 관리할 수 있음.
 

Managed Node

Ansible을 통해 관리하고자 하는 Server.
해당 Managed node에는 Ansible이 설치되지 않음 (Ansible은 agentless로 동작하기 때문.)
Inventory에 작성되어있는 대상임.
 

Inventory (host file)

자동화 관리 대상인 Managed Node 즉 Server 목록이 작성되어 있음.
Managed Node의 IP address, host 정보, 변수와 같은 정보 저장.
Managed Nodes는 그룹화 하여 관리할 수 있음. 
그룹은 하위 그룹을 포함할 수 있으며 한 호스트는 여러 그룹에 포함될 수 있음.
 

Playbook

Inventory 파일에서 정의된 Server에서 무엇을 해야할지를 정의한 것이 Playbook임.
즉 자동화 절차를 기술한 코드 파일 코드 Set을 의미함. 
YAML 포맷으로 표현되며 프로그래밍 언어나 스크립트가 아닌 
설정이나 프로세스에 대한 모델에 대한 정의를 표현한 최소한의 문법으로 구성되어있음.
 

Module

Ansible이 실행하는 코드 단위.
자동화 기능 내장 패키지로 하나의 완전한 단위 기능 제공함.
ansible 은 멱등성이 보장되는 다양한 기능의 모듈을 제공하며 
운영자는 모듈을 직접 실행하거나 또는 playbook 을 통해서 체계적으로 실행할 수 있음.
즉 module은 playbook에서 task가 어떻게 수행될지를 나타내는 요소임.
예) yum 명령어를 통해 패키지를 설치할 떄에는 yum 모듈을 사용할 수 있음.
특이점으로는 해당 mdule을 직접 개발해서 추가할 수도 있음.
 
[내장되어있는 Ansible module 목록 참고] 
Ansible version 2.9 기준
 

API

Ansible python API를 사용하여 managed node를 제어하고, 
Ansible을 확장하여 다양한 Python 이벤트에 응답하고, 
다양한 플러그인을 작성할 수 있음.
 

Plugin

사용자가 직접 작성한 module로 Ansible의 핵심 기능을 보강하는 역할임.
Ansible 은 plugin 아키텍처를 사용하여 
풍부하고 유연하며 확장 가능한 기능 세트를 활성화함.
Action Plugins
Become Plugins
Cache Plugins
Callback Plugins
Cliconf Plugins
Connection Plugins
Httpapi Plugins
Inventory Plugins
Lookup Plugins
Netconf Plugins
Shell Plugins
Strategy Plugins
Vars Plugins
Using filters to manipulate data
Tests
Rejecting modules
[공식적으로 지원하고 있는 ansible plugin 목록 참고]
 

 
 

참고

 

Ansible tower 란?

 
Ansible GUI라고 보면 됨.
Ansible의 불만 사항 중 하나는 적절한 GUI가 제공되지 않다는 것이였음.
Ansible Tower는 Ansible을 위한 web기반 UI이자 REST API로 
실시간 노드 모니터링를 그래픽 기반으로 보여주는 tool임.
기존 command로 하던 작업을 UI로 진행할 수 있음.

 

 

 

반응형

'클라우드 > Ansible' 카테고리의 다른 글

06. Ansible lookup  (0) 2022.01.09
05. Ansible Role  (0) 2021.12.13
04. Ansible Playbook  (0) 2021.12.13
03. Ansible inventory  (0) 2021.12.13
02. Ansible 설치  (0) 2021.12.12