메뉴 닫기

Ansible를 활용한 서버 자동화 입문

서버 자동화를 위한 Ansible

Ansible

여러 대의 서버를 운영하다 보면 패키지 설치, 설정 파일 배포, 디렉터리 생성처럼 같은 작업을 반복해야 하는 경우가 많습니다.

서버가 1대일 때는 직접 접속해 명령어를 실행해도 큰 부담이 없습니다. 하지만 관리 대상 서버가 늘어나면 동일한 작업을 서버마다 반복해야 하고, 작업 누락이나 설정 차이가 발생할 수 있습니다.

Ansible은 이러한 서버 관리 작업을 자동화하기 위한 오픈소스 IT 자동화 도구입니다. 작업 내용을 YAML 형식의 Playbook으로 작성해두면 여러 서버에 동일한 작업을 한 번에 실행할 수 있습니다.

Ansible의 가장 큰 특징은 대상 서버에 별도의 Agent를 설치하지 않는다는 점입니다. 관리 서버에서 SSH를 통해 대상 서버에 접속하고, 필요한 작업을 원격으로 실행하는 방식이기 때문에 초기 구성이 비교적 단순합니다.

예를 들어 디렉터리 생성, 패키지 설치, 설정 파일 배포 같은 작업을 Playbook으로 작성해두면 관리자가 각 서버에 직접 접속하지 않아도 동일한 작업을 일괄 적용할 수 있습니다.

이번 테스트에서는 Ansible을 사용해 여러 Rocky Linux 서버에 반복 작업을 한 번에 실행하는 과정을 확인합니다.

주요 특징

  • SSH 기반으로 동작

  • 대상 서버에 Agent 설치 불필요

  • YAML 형식의 Playbook 사용

  • 여러 서버를 그룹 단위로 관리 가능

  • 패키지 설치, 파일 복사, 디렉터리 생성, 서비스 관리 가능

테스트 환경

구성

대상 서버는 OS만 설치된 초기 상태이며, 별도 웹 서버, DB, 애플리케이션은 설치되어 있지 않습니다.

# 관리 서버
10.101.0.3

# 테스트 대상 서버 1
10.101.0.4

# 테스트 대상 서버 2
10.101.0.6

# 테스트 대상 서버 3
10.101.0.8

전제 조건

  • 서버 간 통신 가능

  • 관리 서버에서 대상 서버로 SSH 접속 가능

  • 대상 서버는 root 계정 접속 가능

  • 관리 서버에 Ansible 설치 가능

1단계. 대상 서버 1 ~ 대상 서버통신 확인

관리 서버에서 실행

Ansible을 사용하기 전에 관리 서버에서 대상 서버로 SSH 접속이 가능한지 먼저 확인합니다.

# 대상 서버 1 ~ 대상 서버 3의 SSH 접속 확인
ssh root@10.101.0.4 

# 대상 서버 OS 정보 확인
ssh root@10.101.0.4 "cat /etc/os-release"

2단계. SSH Key 생성 및 등록

관리 서버에서 실행

Ansible은 SSH를 통해 대상 서버에 접속하므로 비밀번호 없이 접속할 수 있도록 SSH Key를 등록합니다.

# SSH Key 생성
ssh-keygen -t ed25519

# 대상 서버 1 ~ 대상 서버 3 공개키 등록
ssh-copy-id root@10.101.0.4

 

# 대상 서버 1 ~ 대상 서버 3 비밀번호 없이 접속 확인
ssh root@10.101.0.4

3단계. Ansible 설치

관리 서버에서 실행

관리 서버에 Ansible을 설치합니다.

# EPEL 저장소 설치
dnf -y install epel-release

# Ansible 설치
dnf -y install ansible

# Ansible 버전 확인
ansible --version

4단계. Inventory 파일 작성

관리 서버에서 실행

Inventory는 Ansible이 작업을 실행할 대상 서버 목록을 정의하는 파일입니다.

이번 테스트에서는 대상 서버 3대를 test_servers 그룹으로 묶어 등록합니다. 이렇게 그룹으로 관리하면 이후 Ansible 명령어나 Playbook 실행 시 서버 IP를 하나씩 지정하지 않고, test_servers 그룹만 지정해 여러 서버에 동일한 작업을 한 번에 실행할 수 있습니다.

# Ansible 설정 디렉터리 생성
mkdir -p /etc/ansible

# Inventory 파일 생성
vi /etc/ansible/hosts

입력 내용

[test_servers]
10.101.0.4
10.101.0.6
10.101.0.8

Inventory 파일 확인

cat /etc/ansible/hosts

5단계. Ansible 기본 명령 실행

관리 서버에서 실행

Inventory에 등록한 대상 서버로 Ansible 명령이 정상 실행되는지 확인합니다.

# 대상 서버 전체 접속 확인
ansible test_servers -m ping

# 대상 서버 전체 hostname 확인
ansible test_servers -m command -a "hostname"

# 대상 서버 전체 OS 정보 확인
ansible test_servers -m command -a "cat /etc/os-release"

# 대상 서버 전체 디스크 용량 확인
ansible test_servers -m command -a "df -h"

6단계. Playbook 저장 디렉터리 준비

관리 서버에서 실행

Playbook은 Ansible에서 실행할 작업 내용을 YAML 형식으로 작성한 파일입니다.

이번 테스트에서는 디렉터리 생성, 패키지 설치, 파일 생성 작업을 Playbook으로 작성합니다.

# Playbook 저장 디렉터리 생성
mkdir -p /root/ansible-basic

# Playbook 디렉터리 이동
cd /root/ansible-basic

# 현재 위치 확인
pwd

7단계. 기본 Playbook 작성

디렉터리 생성 Playbook

대상 서버에 /opt/ansible-test 디렉터리를 생성하는 Playbook입니다.

# Playbook 디렉터리 이동
cd /root/ansible-basic

# 디렉터리 생성 Playbook 작성
vi create-directory.yml

입력 내용

---
- name: Create test directory
  hosts: test_servers
  become: yes

  tasks:
    - name: Create /opt/ansible-test directory
      file:
        path: /opt/ansible-test
        state: directory
        mode: '0755'

패키지 설치 Playbook

대상 서버에 기본 패키지를 설치하는 Playbook입니다.

# 패키지 설치 Playbook 작성
vi install-packages.yml

입력 내용

---
- name: Install basic packages
  hosts: test_servers
  become: yes

  tasks:
    - name: Install basic tools
      dnf:
        name:
          - vim
          - wget
          - curl
        state: present

파일 생성 Playbook

대상 서버에 테스트 파일을 생성하는 Playbook입니다.

# 파일 생성 Playbook 작성
vi create-file.yml

입력 내용

---
- name: Create test file
  hosts: test_servers
  become: yes

  tasks:
    - name: Create test file
      copy:
        dest: /opt/ansible-test/test.txt
        content: "Ansible basic test completed\n"
        mode: '0644'

생성된 Playbook 확인

# 생성된 Playbook 확인
ls -lh

8단계. Playbook 문법 확인

관리 서버에서 실행

Playbook을 실행하기 전에 문법 오류가 없는지 먼저 확인합니다.

# Playbook 디렉터리 이동
cd /root/ansible-basic

# 디렉터리 생성 Playbook 문법 검사
ansible-playbook --syntax-check create-directory.yml

# 패키지 설치 Playbook 문법 검사
ansible-playbook --syntax-check install-packages.yml

# 파일 생성 Playbook 문법 검사
ansible-playbook --syntax-check create-file.yml

9단계. Playbook 실행

관리 서버에서 실행

작성한 Playbook을 실행하여 대상 서버 3대에 동일한 작업을 적용합니다.

# Playbook 디렉터리 이동
cd /root/ansible-basic

# 디렉터리 생성 Playbook 실행
ansible-playbook -i /etc/ansible/hosts create-directory.yml

# 패키지 설치 Playbook 실행
ansible-playbook -i /etc/ansible/hosts install-packages.yml

# 파일 생성 Playbook 실행
ansible-playbook -i /etc/ansible/hosts create-file.yml

10단계. 실행 결과 확인

관리 서버에서 실행

Playbook 실행 후 대상 서버에 작업 결과가 정상 반영되었는지 확인합니다.

# 생성된 디렉터리 확인
ansible test_servers -m command -a "ls -ld /opt/ansible-test"

# 생성된 파일 내용 확인
ansible test_servers -m command -a "cat /opt/ansible-test/test.txt"

# 설치된 패키지 확인
ansible test_servers -m command -a "rpm -q vim wget curl"

마무리

이번 테스트에서는 Ansible을 이용해 여러 Rocky Linux 서버에 동일한 작업을 한 번에 실행했습니다.

직접 각 서버에 접속해 명령어를 반복 실행하는 방식보다 Inventory와 Playbook을 활용하면 작업 대상과 작업 내용을 명확하게 관리할 수 있습니다.

특히 서버 수가 늘어날수록 Ansible을 사용하면 반복 작업을 줄이고, 작업 누락이나 서버별 설정 차이를 줄이는 데 도움이 됩니다.

참고 문서

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다