Ansible은
효율적인 IT 자동화 도구로, 서버 관리부터 구성, 배포까지 다양한 작업을 자동화할 수 있습니다.
특히 여러 서버를 동시에 관리해야 하는 환경에서 큰 힘을 발휘합니다.
Ansible이란?
Ansible은 Python으로 구현된 오픈소스 IT 자동화 도구로, 서버의 프로비저닝, 소프트웨어 배포, 인프라 구성 및 관리 등을 자동화할 수 있는 IaC(Infrastructure as Code) 도구입니다. 기존에는 동일한 환경의 서버를 구성하기 위해 쉘 스크립트를 사용했지만, 클라우드 환경으로 변화하고 관리 서버 수가 급격히 증가하면서 이러한 방식의 한계가 드러났습니다. Ansible은 이런 문제를 해결하기 위해 개발되었습니다.
Ansible의 주요 특징
- Agentless(에이전트리스): 타겟 서버에 별도의 에이전트를 설치할 필요 없이 SSH를 이용한 PUSH 방식으로 동작합니다. 이는 다른 자동화 도구들(Puppet, Chef 등)과의 큰 차별점입니다.
- 멱등성(Idempotency): 어떠한 연산이 여러 번 수행되어도 결과가 달라지지 않는 성질을 말합니다. Ansible에서는 같은 모듈을 반복 실행해도 결과가 동일하게 출력되며, 변경이 필요한 부분만 반영합니다.
- 쉬운 사용법: YAML 형식을 사용하여 프로그래밍 언어보다 구성이 쉽고, 사람이 읽기 편한 형태로 작성됩니다.
- 다양한 모듈 제공: 리눅스 기본 명령어부터 퍼블릭 클라우드, 쿠버네티스 등 수많은 모듈과 컬렉션을 제공합니다.
- OpenSSH 표준화된 통신 방식: 안전하고 표준화된 통신 방식을 사용하여 보안성을 강화합니다.
Ansible의 구성 요소
Ansible은 다음과 같은 주요 구성 요소로 이루어져 있습니다.
1. 제어 노드(Control Node)
- Ansible 엔진이 설치된 시스템으로, 제어 노드에서 Ansible 명령어를 실행하여 관리 노드를 제어합니다.
- Unix 계열 시스템만 제어 노드가 될 수 있으며, Windows 자체는 제어 노드로 직접 사용할 수 없지만, WSL(Windows Subsystem for Linux)을 사용하면 Windows 환경에서도 Ansible을 실행할 수 있습니다.
- Python이 설치되어 있어야 합니다(Python은 Ansible이 파이썬으로 구현되었기 때문).
2. 관리 노드(Managed Node)
- Ansible로 관리되는 서버 또는 시스템을 말합니다.
- 관리 노드에는 별도의 에이전트 설치가 필요 없으나, Python은 설치되어 있어야 합니다.
- SSH를 통해 통신하므로 SSH 접속만 가능하면 제어 가능합니다.
3. 인벤토리(Inventory)
- Ansible에 의해 제어되는 대상이 정의된 파일입니다.
- 기본적으로
/etc/ansible/hosts
경로에 위치하지만,-i
옵션으로 커스텀 파일을 지정할 수도 있습니다. - 서버를 그룹화하여 관리할 수 있습니다.
[web]
192.168.10.157
192.168.10.158
[db]
192.168.10.162
4. 플레이북(Playbook)
- 인벤토리에 정의한 대상에서 무엇을 수행할지 정의하는 YAML 형식의 파일입니다.
- 여러 작업(tasks)을 순서대로 실행할 수 있으며, 재사용 가능합니다.
- 플레이북은 하나 이상의 플레이로 구성되며, 플레이는 작업 세트로 구성됩니다.
5. 모듈(Module)
- 플레이북에서 작업이 어떻게 수행될지 나타내는 요소로, 다양한 모듈을 지원합니다.
- 주요 모듈에는 ping, command, shell, copy, template, service, apt/yum, user 등이 있습니다.
- 모듈은 멱등성을 일관적으로 수행할 수 있게 해주며, 바뀌는 부분이 있으면 그 부분만 반영합니다.
Ansible 설치 및 환경 조건
설치 요구 사항
- 제어 노드 요구 사항:
- Unix 계열 시스템 (Linux, macOS 등)
- Python 2.6 이상 또는 Python 3.5 이상
- SSH 클라이언트
- 관리 노드 요구 사항:
- SSH 서버
- Python 2.6 이상 또는 Python 3.5 이상
설치 방법
Ubuntu/Debian 계열
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
CentOS/RHEL 계열
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install ansible
macOS (Homebrew 사용)
brew install ansible
설치 확인
Ansible이 제대로 설치되었는지 확인하려면 다음 명령어를 실행합니다:
ansible --version
Ansible 설정
Ansible의 기본 설정은 /etc/ansible/ansible.cfg
파일에 있으며, 홈 디렉토리에 .ansible.cfg
파일을 생성하여 개인 설정을 할 수도 있습니다.
주요 설정 옵션:
host_key_checking = False
: SSH 호스트 키 체크를 비활성화[defaults]
섹션: 인벤토리 위치, 원격 사용자 등 기본 설정[privilege_escalation]
섹션: 권한 상승 방법 설정(sudo 등)
Ansible 사용 방법
1. 인벤토리 파일 설정
관리할 서버 목록을 정의하는 인벤토리 파일을 설정합니다. 예시:
[webservers]
192.168.0.1
192.168.0.2
[dbservers]
192.168.0.3
2. Ad-hoc 명령어 사용
간단한 작업을 실행할 때는 Ad-hoc 명령어를 사용할 수 있습니다.
# 연결 테스트
ansible all -i inventory.ini -m ping
# 패키지 설치
ansible web -m apt -a "name=nginx state=present" --become
# 서비스 시작
ansible web -m service -a "name=nginx state=started" --become
# 파일 복사
ansible web -m copy -a "src=./index.html dest=/var/www/html/index.html" --become
3. 플레이북 작성 및 실행
여러 작업을 순서대로 실행해야 할 때는 플레이북을 작성하여 사용합니다.
예시 플레이북 (nginx-install.yml):
---
- name: NGINX 설치 예제
hosts: webservers
become: yes
tasks:
- name: Install NGINX
apt:
name: nginx
state: present
- name: Start NGINX service
service:
name: nginx
state: started
enabled: yes
플레이북 실행:
ansible-playbook -i inventory.ini nginx-install.yml
4. 자주 사용되는 모듈
Ansible에는 다양한 모듈이 있습니다. 자주 사용되는 모듈은 다음과 같습니다:
모듈명 | 설명 |
---|---|
ping | 연결 테스트 |
command | 임의 명령 실행 |
shell | 셸 명령 실행 (파이프 허용) |
copy | 파일 복사 |
template | Jinja2 템플릿 복사 |
service | 서비스 시작/중지/재시작 |
apt/yum | 패키지 설치/삭제 |
user | 사용자 추가/삭제 |
사용 시 주의사항
- 멱등성이 보장되지 않는 모듈: shell, command, file 모듈은 멱등성이 보장되지 않으니 주의해서 사용해야 합니다.
- 패스워드 기반 접속: SSH 키 대신 패스워드 인증을 사용할 경우, 컨트롤러 서버에 sshpass 설치가 필요합니다.
apt install sshpass
- ssh 설정: Ansible을 원활하게 사용하기 위해 SSH 키 교환이나 적절한 SSH 설정이 필요합니다.
Terraform과의 차이점
Ansible과 Terraform 모두 인프라 자동화 도구이지만, 몇 가지 중요한 차이점이 있습니다:
- 상태 관리:
- Ansible은 상태를 관리하지 않습니다(stateless).
- Terraform은 상태를 관리하여(stateful) 코드가 이미 반영된 경우 실행하지 않습니다.
- 코드 실행 구조:
- Ansible은 SSH 프로토콜을 사용하여 코드를 실행합니다.
- Terraform은 provider가 제공하는 API를 사용합니다.
- 사용 목적:
- Ansible은 여러 시스템에 동일한 작업을 수행할 때 주로 사용합니다.
- Terraform은 주로 한 시스템(예: 클라우드 서비스)의 설정 또는 리소스 관리에 사용합니다.
결론
Ansible은 에이전트 설치가 필요 없는 간편한 자동화 도구로, YAML 기반의 쉬운 문법과 다양한 모듈을 통해 여러 서버의 구성 및 관리를 효율적으로 자동화할 수 있습니다. 특히 멱등성을 보장하여 같은 작업을 여러 번 실행해도 결과가 일관되게 유지되는 특징이 있습니다.
'Dev > DevOps' 카테고리의 다른 글
Terraform (0) | 2025.04.24 |
---|---|
Ansible 실습 (0) | 2025.04.23 |
Kaniko (0) | 2025.03.10 |
ArgoCD - gitea 연동 (0) | 2025.02.27 |
ArgoCD (0) | 2025.02.26 |