IaC란 : Infrastructure as Code의 약자로, 인프라를 코드로 관리하고 자동화하는 방식을 의미한다.
Ansible이란?
기본 개념
앤서블(Ansible)은 오픈 소스 기반의 IT 인프라를 자동화하고 관리하는 도구로,
주로 설정 관리, 애플리케이션 배포, 작업 자동화 및 오케스트레이션 등을 위해 사용된다.
- Agentless
별도의 소프트웨어 에이전트를 관리 대상 시스템에 설치할 필요가 없다.
(SSH 프로토콜을 통해 원격으로 시스템에 접근하여 작업을 수행하기 때문) - Declarative 방식
'무엇을'해야 하는지를 명확히 기술하는 선언형 방식으로 동작한다.
ex) 서버에 특정 패키지를 설치하거나 특정 파일의 내용이 어떻게 되어야 하는지를 정의하면,
앤서블은 해당 상태에 도달하기 위해 필요한 작업을 수행함 - Playbook
플레이북은 YAML 형식으로 작성되고,
이 플레이북을 기반으로 앤서블은 정의된 작업을 순차적으로 실행한다.
Ansible의 주요 구성 요소
- 플레이북(Playbook): 작업의 정의가 들어 있는 파일로, 여러 태스크(tasks)를 포함한 일련의 자동화 단계를 기록한다.
하나의 플레이북은 여러 개의 "플레이(plays)"로 구성되며, 각 플레이는 하나 이상의 호스트 그룹에 적용된다. - 모듈(Modules): 앤서블은 다양한 모듈을 통해 구체적인 작업을 실행함.
모듈은 파일 복사, 패키지 설치, 서비스 관리 등의 작업을 수행하는 작은 스크립트로,
대표적인 모듈로는 yum, apt, service, command, copy 등이 있다. - 인벤토리(Inventory): 앤서블이 관리하는 호스트 목록을 정의하는 파일.
기본적으로 /etc/ansible/hosts 파일에 관리 대상 호스트들을 정의할 수 있으며, 그룹을 나누어 관리할 수도 있다.
호스트는 IP 주소 또는 DNS 이름으로 정의되며, 다양한 그룹으로 분류 가능합니다. - 롤(Roles): 롤은 플레이북을 보다 효율적으로 관리하기 위한 방식으로, 태스크, 핸들러, 변수, 템플릿, 파일 등을 구조적으로 조직화하여 재사용할 수 있게 한다. (큰 규모의 자동화 작업에서 특히 유용)
- 핸들러(Handlers): 특정 이벤트가 발생했을 때 실행되는 태스크로, 보통 조건부로 실행된다.
ex) 설정 파일을 변경한 후 서비스를 재시작해야 할 경우 핸들러를 사용할 수 있다. - 템플릿(Templates): 앤서블에서 템플릿은 Jinja2 템플릿 엔진을 사용하여 구성 파일을 동적으로 생성하는 데 사용된다.
플레이북에서 변수 값을 사용해 템플릿 파일의 내용을 생성하고 대상 시스템에 배포할 수 있다.
Ansible의 작동 원리
Control Node와 Managed Node로 구성된다.
Control Node : 앤서블 명령을 실행하는 시스템. 플레이북을 작성하고 실행, SSH를 통해 매니지드 노드와 통신한다.
Managed Node : 컨트롤 노드가 관리하는 대상 시스템. SSH 연결을 통해 Managed Node에 접속하여 작업을 수행한다.
Ansible 환경 설정
Ansible 명령을 수행할 Ansible 서버에만 패키지를 설치하면 되고, 작업을 수행할 서버에는 별도 설정을 하지 않아도 된다.
(=모든 명령은 Ansible 서버에서만 실행한다)
Ansible은 SSH를 기반으로 명령을 수행하기 때문에 sshpass 패키지까지 설치해줘야 하고,
Python으로 제작되었기 때문에 설치 시 Python도 같이 설치해야 한다.
Ansible 설치
# 순서대로 실행
sudo apt -y update
sudo apt -y upgrade
sudo apt -y install ansible sshpass
ansible --version
# 순서대로 실행
sudo apt -y update
sudo apt -y upgrade
sudo apt -y install ansible sshpass
ansible --version
# 출력 확인
ansible 2.10.8
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
작업 대상 인스턴스 등록
sudo mkdir /etc/ansible
sudo nano /etc/ansible/hosts
# 파일에 작성
[target]
192.168.0.51
추가 아이피가 있다면 줄로 구분해서 계속 적기
[그룹명]
대상 IP들 ...
Ansible의 작업 대상이 될 인스턴스를 호스트로 등록해보자.
대괄호 안에 그룹명을 작성하고, 타겟이 될 IP들을 Enter키로 구분한다.
[target]
192.168.0.51 # target 그룹에 속하는 서버
[webservers]
192.168.0.10 # web 서버
192.168.0.11
[dbservers]
192.168.0.20 # DB 서버
공개키 / 비밀키 세팅
# Ansible 인스턴스 측
ssh-keygen
# 타깃 인스턴스 측에 공개키 내용 추가
sudo nano ~/.ssh/authorized_keys
원격지에서 Ansible 서버가 보낸 스크립트를 실행해야 하기 때문에 공개키/비밀키를 세팅해주자.
'🌥️Cloud Study🌥️ > IaC' 카테고리의 다른 글
[ Ansible ] Jenkins와 Ansible 연동 후 플레이북 실행 (0) | 2024.08.23 |
---|---|
[ Ansible ] Ansible Galaxy로 원하는 롤, 콜렉션 찾기 (1) | 2024.08.23 |
[ Ansible ] 플레이북(Playbook) 사용해보기 (0) | 2024.08.22 |
[ Ansible ] Ansible 모듈 사용해보기 (1) | 2024.08.22 |