IaC/Configuration Management

Ansible 개념과 설치 / 사용법(CentOS 7.9)

Somaz 2022. 2. 7. 17:01
728x90
반응형

Overview

이 글에서는 Ansible이란 무엇이며, 이를 활용하여 서버를 자동화하고 인프라를 관리하는 방법을 다룬다.
Ansible은 Infrastructure as Code (IaC)를 지원하는 오픈소스 기반의 자동화 도구로, 서버 관리 및 설정을 간편하게 수행할 수 있도록 도와준다.

 

이제 Ansible 설치부터 실습까지 차근차근 진행해보자.

 

 

 

📅 관련 글

2023.12.25 - [IaC/Configuration Management] - Ansible 활용 - ansible-galaxy에 Role/Collection 업로드

2024.02.29 - [Open Source Software] - Cephadm-ansible이란?

 

 

 

 

 


 

 

 

Ansible이란?

Ansible서버 인프라를 코드 기반으로 자동 설치 및 구축/관리/프로비저닝하는 자동화 도구이다.
전통적인 방식에서는 관리자가 직접 서버에 접속하여 수동으로 설정해야 했지만,
Ansible을 활용하면 자동화된 인프라 구축이 가능하다.

 

 

 

 

Ansible의 특징

 

 

1️⃣ Agentless

  • 별도의 에이전트 설치 없이 SSH 프로토콜을 이용하여 원격 서버를 관리한다.

 

2️⃣ 접근 용이성

  • YAML 형식의 Playbook을 사용하여 쉽게 서버 자동화 가능
  • 가독성이 뛰어나 초보자도 쉽게 학습 가능

 

3️⃣ 멱등성 (Idempotence)

  • 같은 명령을 여러 번 실행해도 동일한 결과를 보장
  • 서버 설정 시 중복 실행으로 인한 문제 발생 방지

 

 

 

 

 

Ansible 기본 개념 및 용어

용어 설명
Controller 서버 Ansible이 설치된 서버, 명령을 실행하는 주체
Inventory (호스트 목록) 관리할 원격 서버 목록을 저장하는 파일 (/etc/ansible/hosts)
Playbook YAML 형식으로 정의된 자동화 스크립트
Module Ansible이 제공하는 다양한 기능 (ex: 파일 복사, 패키지 설치)
Task Playbook에서 실행되는 개별 작업

 

 

 

 

 


 

 

 

 

 

 

Ansible 설치 및 초기 설정

 

1️⃣ Ansible 설치 (CentOS 7.9 기준)

 

Ansible은 Controller 서버에서만 설치하면 된다.
먼저 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가한 후 설치한다.

# EPEL 저장소 추가
sudo yum install -y epel-release

# 저장소 목록 확인
sudo yum repolist

# Ansible 설치
sudo yum install -y ansible

# 설치 확인
ansible --version

 

Ansible이 정상적으로 설치되었는지 버전을 확인한다.

 

 

 

2️⃣ SSH Key 설정 (Controller ↔ 원격 서버 간 인증)

 

Ansible은 SSH 기반으로 원격 서버에 명령을 실행한다.
따라서 Controller 서버와 원격 서버 간 SSH Key 기반 인증을 설정해야 한다.

# SSH 키 생성
ssh-keygen

# 원격 서버에 SSH Key 복사 (계정 비밀번호 입력 필요)
ssh-copy-id [원격서버계정ID]@[원격서버IP]

# SSH 접속 확인 (비밀번호 없이 로그인 가능해야 함)
ssh [원격서버계정ID]@[원격서버IP]

 

SSH 비밀번호 없이 원격 서버에 접속되면 성공!

 

 

 

3️⃣ Inventory 파일 설정

 

관리할 원격 서버 목록을 `/etc/ansible/hosts` 파일에 추가한다.

sudo vi /etc/ansible/hosts
...
[web]
192.168.1.10
192.168.1.11

[db]
192.168.1.20

 

이제 Ansible이 이 서버들을 관리할 수 있다.

 

 

 

4️⃣ 원격 서버 연결 테스트 (Ping 확인)

 

ansible all -m ping

 

모든 서버에서 "SUCCESS" 메시지가 출력되면 정상적으로 설정 완료!

 

 

 

 

 

 


 

 

 

 

 

 

Ansible 명령어 사용법

 

1️⃣ 기본 명령어 구조

ansible [host 또는 host그룹] -m [모듈] -a [옵션]
  • `all`: 인벤토리에 등록된 모든 서버
  • `-m`: 실행할 모듈
  • `-a`: 모듈에 전달할 인자

 

 

 

2️⃣ 원격 서버에서 명령 실행 (Shell 모듈)

 

# 원격 서버의 uptime 확인
ansible all -m shell -a "uptime"

# 디스크 사용량 확인
ansible all -m shell -a "df -h"

# 메모리 사용량 확인
ansible all -m shell -a "free -h"

 

모든 원격 서버에서 해당 명령어가 실행된다.
 
 
 
 
 

3️⃣ 원격 서버에 파일 전송 (Copy 모듈)

 

# Controller 서버의 test.txt를 원격 서버로 복사
ansible all -m copy -a "src=~/test.txt dest=~/test.txt"

 

모든 원격 서버에 `test.txt` 파일이 복사됨

 
 
 

4️⃣ 사용자 생성 (User 모듈)

 
# 원격 서버에 사용자 'somaz' 생성
ansible all -m user -a "name=somaz password=1 shell=/bin/bash"

 

모든 원격 서버에 somaz 계정이 생성됨

 
 
 
 

5️⃣ 패키지 설치 (Yum/Apt 모듈)

 
# CentOS (Yum 모듈 사용)
ansible all -m yum -a "name=httpd state=present"

# Ubuntu (Apt 모듈 사용)
ansible all -m apt -a "name=apache2 state=present"
 

모든 원격 서버에 웹서버 패키지가 설치됨

 
 
 
 
 

 

 

 

 

 

Ansible 구성 파일

파일 설명
/etc/ansible/ansible.cfg Ansible 환경 설정 파일
/etc/ansible/hosts 관리할 원격 서버 목록 (Inventory)
Playbook 파일 (.yml) 자동화 스크립트 저장

 

 

 

Ansible 실습

 

1️⃣ 원격 서버 작업 자동화 (Shell 모듈 활용)

# 시스템 정보 확인
ansible all -m shell -a "uptime"
ansible all -m shell -a "df -h"
ansible all -m shell -a "free -h"
 
 
 
 

2️⃣ 사용자 및 파일 관리

# 사용자 생성
ansible all -m user -a "name=somaz password=1 shell=/bin/bash"

# 파일 복사
ansible all -m copy -a "src=/etc/resolv.conf dest=/etc/resolv.conf"
 
 
 
 
 

3️⃣ 패키지 설치 및 관리

# Apache 웹 서버 설치 (CentOS)
ansible all -m yum -a "name=httpd state=present"

# Apache 웹 서버 설치 (Ubuntu)
ansible all -m apt -a "name=apache2 state=present"
 
 
 
 
 

 

 

 

 

마무리

Ansible이 무엇인지 개념을 익혔다.
Ansible 설치 및 SSH 설정을 완료하였다.
기본적인 Ansible 명령어를 활용하여 원격 서버를 자동화하였다.
Playbook을 활용한 자동화 작업을 배울 준비가 되었다.

 

 

이제 Ansible Playbook을 활용하여 더욱 강력한 자동화 작업을 진행해보자!

 

 

 

 

 

 

 


Reference

🔗 Ansible 공식 문서
🔗 Ansible GitHub Repository
🔗 Ansible Playbooks 예제

 

 

 

 

 

 

728x90
반응형