[Ansible] Ansible의 기본 개념과 구성 요소DevOps/Ansible2022. 4. 14. 21:29
Table of Contents
728x90
✔️ Ansible이란 ?
- Python으로 구현된 오픈소스로써 서버의 프로비저닝, SW 배포 등 인프라를 구성하고 관리하는 것을 자동화할 수 있는 IaC 도구이다.
IaC란 ?
기존 인프라의 쉘 스크립트, 수동의 CLI기반 프로비저닝 방식에서 탈피하여, 시스템을 코드 기반으로 자동 설치 및 구축, 관리, 프로비저닝을 구현하는 IT 인프라 구성 프로세스를 말한다.
기존에는 동일한 환경의 리눅스를 구성하기 위한 방식은 쉘 스크립트에 패키지 설치, 설정파일 수정, 서비스 활성화 등의 내용을 나열하고 스크립트를 실행하는 것이 일반적이었다.
하지만, 데이터 센터 중심의 인프라 환경에서 클라우드 환경으로 변화하고 관리해야 할 서버의 숫자가 급격하게 증가하는 요즘 동시에 많이 서버에 동일한 환경을 배포하는 상황이 발생했고 이는 쉘 스크립트로는 불가능했다.
이를 해결하기 위해 나온 것이 IaC(Infrastructure as Code)이다.
이 개념은 쉽게 말해 컴퓨터의 인프라 구성을 소프트웨어를 개발하는 것처럼 코드로 작성하는 것을 의미한다.
Ansible 또한 IaC 개념이 도입되어 자동화 도구를 이용해 인프라의 설정을 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 도와준다.
✔️ Ansible 특징
- Agentless
- 다른 자동화 도구들은(ex. Puppet, Chef) 타겟 대상들에 Agent 설치를 기반으로 한 PULL 방식으로 동작하여 agent 설치 및 관리라는 별도의 복잡한 추가 작업이 있다.
이러한 도구들은 특히 별도의 DSL(Domain Specific Language)를 갖고 있으며 DSL이 Ruby (or Go)로 되어있어 Ruby 설치 및 모듈 관리같은 작업이 필요하다.
ansible은 타겟 대상들에 Agent 설치를 하지 않고 SSH를 이용한 PUSH 방식으로 동작하기 때문에 기술적, 지리적 제한이 상대적으로 넓다.
- 다른 자동화 도구들은(ex. Puppet, Chef) 타겟 대상들에 Agent 설치를 기반으로 한 PULL 방식으로 동작하여 agent 설치 및 관리라는 별도의 복잡한 추가 작업이 있다.
- Idempotency (멱등성)
- 어떠한 연산이 여러번 수행되어도 그 결과가 달라지지 않는 성질
- Ansible에서 같은 모듈을 반복해 실행해도 결과가 동일하게 출력됨으로써 멱등성을 일관적으로 수행할 수 있다.
- 바뀌는 부분이 있으면 그 부분만을 반영한다.
- shell, command, file module은 멱등성이 보장되지 않는다.
- Ansible 장점
- OpenSSH라는 표준화된 통신 방식을 사용한다.
- YAML 형식을 사용하여 프로그래밍 언어보다 구성이 쉽다.
- 변수 기능을 사용하여 재사용성 증가
- 다양한 플랫폼 지원
- Ansible 단점
- 변수 값 확인이 어렵다.
- 입력/출력/구성 파일 간의 형식에 일관성이 없다.
- 다른 도구에 비해 덜 강력하다.
- 시스템 변경사항은 추적하지 않는다.
- 시스템 모니터링은 지원하지 않는다.
✔️ 용어
✔️ 제어 노드
- Control Node, Controller, Ansible Engine라고 혼용되며 Ansible engine이 설치된 시스템이다.
- ansible 명령어(ad-hoc 방식), ansible-playbook 명령어를 이용해 작업한다.
- 제어 노드가 되기 위한 조건
- Unix 계열만 가능
→ 윈도우 시스템이 제어 노드(controller)가 될 수는 없다.
WHY? ansible은 일반적으로 ssh를 사용하나 윈도우는 ssh를 사용하지 않기 때문 - ansible이 파이썬으로 구현되었기 때문에 파이썬이 설치되어 있어야 한다. (정확히는 파이썬 인터프리터가 필요)
- Unix 계열만 가능
✔️ 관리 노드
- Managed Node, Target Node/Host 라고 혼용되며 관리 대상이 되는 시스템을 말한다.
- BM, VM, Instance, Network Device 그 어떤 것도 될 수 있다.
- 관리 노드가 되기 위한 조건 :
- SSH가 가능한 모든 시스템에서 가능
- Python 설치
- Windows : WinRM (Window Remote Management)
Windows는 ssh를 사용하지 않고 이 방식을 사용한다. 윈도우 서버끼리 관리하는 것
✔️ 인벤토리
- ansible로 관리할 host들의 정보를 가지는 파일로 호스트는 그룹에 포함시켜 관리할 수 있다.
- 정적 인벤토리 : 관리 노드의 목록 파일
- 동적 인벤토리 : 클라우드, CMDB에서 관리 노드 목록을 가져온다.
- CMDB(Configuration Management Database)
기업의 IT 환경을 구성하는 모든 하드웨어와 소프트웨어 자산에 대한 정보를 저장하는 '데이터 저장소'
Docker나 k8s의 경우 생명 주기가 짧아 관리 노드의 목록을 text로만 관리하는 것이 쉽지 않다.
대규모 환경에서는 특히나 쉽지 않기 때문에 CMDB에서 가져와 동적으로 관리한다.
- CMDB(Configuration Management Database)
[a]
server0 ansible_host=127.0.0.1 ip=182.162.176.170
server1 ansible_host=172.18.0.1 ansible_port=20101
[b]
server3 ansible_host=172.22.233.1 ansible_port=20101
[c:children]
a
b
✔️ 플러그인
- Ansible 기능을 확장시키기 위해 여러가지 플러그인을 제공한다.
- Action, Become, Cache, Callback, Cliconf, Connection, Httpapi, Inventory, Netconf, Lookup, Shell, Strategy, Vars
✔️ 모듈
- Ansible에서 작업을 실행할 수 있는 기본 단위이며 Python 코드로 짜여 있다.
- ansible을 설치하면 같이 설치되는 디렉토리에 수많은 모듈들이 있다.
- parameter(변수)를 넣으면 해당되는 변수의 값이 모듈들에게 전송 되어서 원격 시스템에서 실행된다.
- cloud, db(mysql db, mysql user)등 다양한 3307개의 모듈이 있다. (2022년 4월 기준)
✔️ 작업
✔️ Ad-hoc
- Ansible을 임시로 실행한다.
- 한번에 하나의 모듈만 실행할 수 있고 하나의 모듈은 하나의 작업을 실행할 수 있다.
✔️ 플레이북
- YAML 파일이며 하나 이상의 플레이의 모음이다.
- 순서가 지정된 태스크 목록을 저장한다.
- 플레이북을 작성 후 ansible-playbook 명령어를 사용하여 실행한다.
✔️ 플레이북 구조
각 플레이북은 하나 이상의 플레이의 모음이다.
플레이에는 하나 이상의 테스크가 존재한다.
✔️ 테스크(Task)
- Ansible의 작업 단위
✔️ 플레이
- 하나 이상의 테스크의 모음
- 특정 호스트에 대해 정의된 명령어 세트를 매핑한다.
✔️ 모듈
- Ansible이 실행하는 코드 단위
- ansible은 멱등성이 보장되는 다양한 기능의 모듈을 제공한다.
- 데이터베이스 처리, 사용자 관리 등 다양한 용도로 사용한다.
- 단일 모듈 호출 또는 플레이북에서 여러 모듈 호출도 가능
참고
728x90
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] module, ad-hoc, playbook, yaml 포맷 (0) | 2022.04.15 |
---|---|
[Ansible] 정적 인벤토리 (0) | 2022.04.15 |
[Ansible] 관리 노드 접속 방법, 권한 상승과 관리 구성 파일 (0) | 2022.04.14 |
Ansible을 이용해 AWS ec2 인스턴스에 Apache 설치하기 (0) | 2022.04.13 |
Ansible 기본 사용법 (0) | 2022.04.13 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!