앤서블 사용해보기
앤서블 사용해보기
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.