메뉴 닫기

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
Rocky Linux 8 VM: 10.101.0.4

# 테스트 대상 서버 2
Rocky Linux 8 VM: 10.101.0.6

# 테스트 대상 서버 3
Rocky Linux 8 VM: 10.101.0.8

전제 조건

  • 서버 간 통신 가능
  • 관리 서버에서 대상 서버로 SSH 접속 가능
  • 대상 서버는 root 계정 접속 가능

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

관리 서버에서 실행

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

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

2단계. SSH Key 생성 및 등록

관리 서버에서 실행

# SSH Key 생성
ssh-keygen -t ed25519

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

옵션

  • ssh-keygen: SSH Key 생성
  • t ed25519: ed25519 방식의 SSH Key 생성
  • ssh-copy-id: 대상 서버의 authorized_keys에 공개키 등록

3단계. Ansible 설치

관리 서버에서 실행

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


# Ansible 설치
dnf -y install ansible

# Ansible 버전 확인
ansible --version

4단계. Inventory 파일 작성

관리 서버에서 실행

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

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

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

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


입력 내용

[test_servers]
10.101.0.4
10.101.0.6
10.101.0.8


5단계. 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 저장 디렉터리 준비

관리 서버에서 실행

AWX에서 Git을 사용하지 않을 경우 Manual Project 방식을 사용합니다.

Manual Project는 AWX가 인식하는 Project 디렉터리에 Playbook을 직접 저장하는 방식입니다. 첨부 자료에서도 SCM TYPEManual로 선택하면 AWX 설치 시 지정한 project_data_dir 경로를 사용한다고 설명합니다.

# AWX Manual Project 디렉터리 생성
mkdir -p /var/lib/awx/projects/ansible-basic

# Project 디렉터리 이동
cd /var/lib/awx/projects/ansible-basic

# 현재 위치 확인
pwd

주의사항

  • 설치 방식에 따라 Project 기본 경로는 다를 수 있습니다.
  • Docker Compose 기반 구버전 project_data_dir 설정값을 확인해야 합니다.
  • AWX Operator 기반 설치는 별도 Project PVC 또는 Persistent Projects 설정이 필요할 수 있습니다.
  • 테스트 환경에서는 AWX가 인식하는 Project 디렉터리에 ansible-basic 폴더가 보이도록 구성해야 합니다.

7단계. 기본 Playbook 작성

디렉터리 생성 Playbook

# Project 디렉터리 이동
cd /var/lib/awx/projects/ansible-basic

# 디렉터리 생성 Playbook 작성
vi create-directory.yml 
---
- name: Create test directory
  hosts: all
  become: yes

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


패키지 설치 Playbook

# Project 디렉터리 이동
cd /var/lib/awx/projects/ansible-basic

# 패키지 설치 Playbook 작성
vi install-packages.yml 
---
- name: Install basic packages
  hosts: all
  become: yes

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

파일 생성 Playbook

# Project 디렉터리 이동
cd /var/lib/awx/projects/ansible-basic

# 파일 생성 Playbook 작성
vi create-file.yml 
---
- name: Create test file
  hosts: all
  become: yes

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

# 생성된 Playbook 확인
ls -lh

8단계. Playbook 문법 확인

관리 서버에서 실행

# Project 디렉터리 이동
cd /var/lib/awx/projects/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

옵션

  • ansible-playbook: Ansible Playbook 실행 명령어
  • -syntax-check: Playbook 실행 없이 문법만 검사

9단계. CLI에서 먼저 테스트 실행

관리 서버에서 실행

# 디렉터리 생성 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

옵션

  • i: Inventory 파일 경로 지정
  • /etc/ansible/hosts: 테스트 대상 서버 목록 파일

     

10단계. 실행 결과 확인

관리 서버에서 실행

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

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


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

참고 문서

답글 남기기

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