앤서블 사용해보기
Ansible은 에이전트가 필요 없는(Agentless) 오픈소스 자동화 도구이다 SSH 프로토콜을 통해 원격 서버에 접속하여 소프트웨어 설치, 설정 변경, 서비스 관리 등 다양한 작업을 수행 YAML 형식의 플레이북(Playbook)을 사용하여 복잡한 작업들을 순서대로 쉽게 정의하고...
앤서블 사용해보기
Ansible이란?
Ansible은 에이전트가 필요 없는(Agentless) 오픈소스 자동화 도구이다 SSH 프로토콜을 통해 원격 서버에 접속하여 소프트웨어 설치, 설정 변경, 서비스 관리 등 다양한 작업을 수행 YAML 형식의 플레이북(Playbook)을 사용하여 복잡한 작업들을 순서대로 쉽게 정의하고 실행할 수 있다
1. 기본 프로젝트 구조
1
2
3
4
5
6
7
8
ansible_project/
├── inventory/
│ └── hosts.ini # 관리할 서버(호스트) 목록 정의
├── roles/
│ └── docker/ # 도커 설치 역할
│ └── tasks/
│ └── main.yml # 도커 설치 작업 정의
└── playbook.yml # 전체 작업을 지시하는 메인 플레이북
inventory/: 어떤 서버를 관리할 것인지 정의하는 인벤토리 파일이 위치roles/: 관련된 작업들의 묶음인 ‘역할(Role)’을 정의하는 곳 역할 단위로 작업을 분리하면 재사용성이 높아지고 관리가 편해짐playbook.yml: 어떤 호스트 그룹에 어떤 역할을 적용할지 정의하는 최상위 실행 파일
2. 핵심 파일 작성 방법
1) 인벤토리 (Inventory)
inventory/hosts.ini 파일은 Ansible이 접속하고 관리할 서버들의 목록을 정의한다
- 목적: 관리 대상 서버를 그룹으로 묶고, 그룹별 또는 호스트별 변수를 설정
- 작성법:
[그룹이름]형식으로 서버 그룹을 정의- 그룹 아래에 서버의 IP 주소나 도메인 이름을 나열
[그룹이름:vars]형식으로 해당 그룹에만 적용될 변수를 정의할 수 있다
예시: inventory/hosts.ini
1
2
3
4
5
6
7
8
9
10
# 도커를 설치할 서버 그룹
[docker_hosts]
192.168.1.10
192.168.1.11
# 모든 호스트에 공통으로 적용될 변수
[all:vars]
ansible_user=adminuser # SSH 접속 시 사용할 사용자 이름
ansible_ssh_private_key_file=~/.ssh/id_rsa # SSH 개인 키 경로
ansible_python_interpreter=/usr/bin/python3
2) 역할 (Roles)
roles/ 디렉터리 안에는 각 기능별로 독립된 하위 디렉터리가 있다
- 목적: 특정 기능(예: 도커 설치)과 관련된 모든 작업을 하나의 단위로 묶어 재사용성을 높인다
- 주요 하위 디렉터리:
tasks/main.yml: (필수) 해당 역할이 수행할 실제 작업 목록을 정의handlers/main.yml: (선택) 특정 조건에서만 실행될 작업을 정의 (예: 서비스 재시작)templates/: (선택) 설정 파일의 원본 템플릿(.j2확장자)을 저장vars/main.yml: (선택) 해당 역할에서만 사용할 변수를 정의defaults/main.yml: (선택) 역할의 기본 변수 값을 정의
예시: roles/docker/tasks/main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 이 파일은 도커를 설치하고 실행하는 작업을 정의합니다.
- name: Install prerequisite packages for Docker
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
state: present
update_cache: yes
- name: Add Docker's official GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker repository
apt_repository:
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu stable
state: present
- name: Install Docker Engine
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: present
update_cache: yes
- name: Ensure Docker service is started and enabled
service:
name: docker
state: started
enabled: yes
3) 플레이북 (Playbook)
playbook.yml 파일은 프로젝트의 최상위에서 모든 것을 조립하고 실행 순서를 결정하는 지휘자 역할
- 목적: 어떤 호스트 그룹에 어떤 역할을 적용할지 매핑
- 작성법:
hosts: 인벤토리에 정의된 호스트 그룹 이름을 지정become: yes: 작업을 일반 사용자로 접속한 뒤sudo와 같은 권한 상승을 통해 root 권한으로 실행하도록 설정roles: 해당 호스트 그룹에 적용할 역할 목록을 나열
예시: playbook.yml
1
2
3
4
5
6
# docker_hosts 그룹에 도커 설치 역할을 적용
- name: Install Docker on servers
hosts: docker_hosts
become: yes
roles:
- docker # docker 역할을 적용
3. 실행 방법
모든 파일 작성이 완료되면, 터미널에서 ansible-playbook 명령어를 사용하여 플레이북을 실행
프로젝트의 최상위 디렉터리로 이동합니다.
아래 명령어를 실행합니다.
1
ansible-playbook -i inventory/hosts.ini playbook.yml-i inventory/hosts.ini: 사용할 인벤토리 파일을 명시적으로 지정playbook.yml: 실행할 메인 플레이북 파일을 지정
실행 결과 확인: Ansible은 플레이북에 정의된 작업들을 순서대로 실행하며, 각 작업의 성공, 실패, 변경 여부를 색상으로 표시해 준다
This post is licensed under CC BY 4.0 by the author.