본문 바로가기
Infra

Ansible로 서로 다른 OS의 서버를 관리해보자 (1)

by MC매드 2023. 12. 5.

안녕하세요, 메가존클라우드 Mass Migration Center의 AAT에서 프론트엔드와 백엔드 개발을 담담하고 있는 MC매드(A.K.A. The master of ansible)입니다.

 

이번 포스팅에서는 Ansible을 통해 각기 다른 OS를 가진 서버를 관리하는 방법에 대해 알아보겠습니다!

 


01. Ansible이란

Ansible은 오픈소스 IT 자동화 툴로서, 프로비저닝, 구성 관리, 애플리케이션 배포, 오케스트레이션 등의 수동 IT 프로세스를 자동화할 수 있습니다. 경험해보기 전에는 와닿지 않으니 실전으로 들어가서 빠르게 설치부터 진행해보겠습니다!

 

02. Ansible 설치

Ansible 설치 방법을 OS별로 알아봅시다.

 

  • SUSE에 Ansible 설치하기
$ sudo zypper install ansible

 

  • Ubuntu에 Ansible 설치하기
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

 

  • Debian에 Ansible 설치하기
$ UBUNTU_CODENAME=jammy
$ wget -O- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | sudo gpg --dearmour -o /usr/share/keyrings/ansible-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu $UBUNTU_CODENAME main" | sudo tee /etc/apt/sources.list.d/ansible.list
$ sudo apt update && sudo apt install ansible

 

  • Linux에 Ansible 설치하기
$ sudo dnf install ansible
$ sudo dnf install ansible-core
$ sudo dnf install ansible-collection-community-general

 

03. Ansible 기본 용어

Ansible은 기본적으로 세 개의 주요한 컴포넌트를 가집니다.

  • 컨트롤 노드: 앤서블이 설치되는 노드로, ansible이나 ansible-inventory 커맨드를 통해 컨트롤 노드를 조작할 수 있습니다.
  • 매니지드 노드: 컨트롤 노드가 명령을 푸시하는 원격 제어 시스템이나 호스트 등의 노드를 의미합니다.
  • 인벤토리: 매니지드 노드 목록으로, 컨트롤 노드에서 관리됩니다.

 

04. 인벤토리 관리

인벤토리 포맷은 여러 종류로 작성될 수 있지만, 보통은 INI이나 YAML 형식으로 작성합니다. 아래는 INI 형식으로 인벤토리를 작성한 예시로, 보통 /etc/ansible/hosts 경로에 작성됩니다.

mail.mad.com

[webservers]
foo.mad.com
bar.mad.com

[dbservers]
one.mad.com
two.mad.com
three.mad.com

 

대괄호 안에 쓰여진 webservers, dbservser는 그룹명을 뜻합니다. 앤서블에서 매니지드 노드를 동작시킬 때 각각의 노드를 그룹별로 나눠 동작시킬 수가 있습니다. 좀 더 자세한 그룹 이용 방법은 예시를 좀 더 진행하며 알아보겠습니다. 아래는 위의 동일한 코드를 YAML 형식으로 작성했을 때의 예시입니다.

ungrouped:
  hosts:
    mail.mad.com:
webservers:
  hosts:
    foo.mad.com:
    bar.mad.com:
dbservers:
  hosts:
    one.mad.com:
    two.mad.com:
    three.mad.com:

 

Ansible은 기본적으로 all ungrouped라는 두 가지 그룹을 생성합니다. all에는 인벤토리의 모든 호스트가 포함됩니다. ungrouped에는 group에 포함되지 않은 모든 host를 의미합니다. 또한 한 호스트가 여러 개의 그룹에 포함될 수 있습니다.

 

05. 앤서블 실행

Ansible 실행 명령어는 다음과 같습니다.

ansible-playbook webservers main

 

ansible-playbook이라는 명령어 뒤에 해당 명령을 실행할 인벤토리 내의 그룹명이나 호스트명을 입력하면 됩니다. 여기서는 foo.mad.com과 bar.mad.com이 포함된 webservers 그룹을 선택했습니다. 다음으로는 수행할 명령이 담긴 파일을 입력하면 됩니다. 위 예시에서는 main 파일의 명령어를 수행하려는 것입니다. 명령에 대한 자세한 내용은 이어서 알아보겠습니다.

 

06. 앤서블 폴더 구조

ansible이 설치된 뒤 /etc/ansible 경로를 보면 다음과 같은 구조를 가짐을 알 수 있습니다. 아래는 sudo apt-get tree 명령어를 통해 tree 라이브러리로 폴더 구조를 파악한 내용입니다.

 

├── ansible.cfg
├── hosts
└── main.yaml

 

다음 포스팅에서는 해당 경로에 폴더 및 파일을 생성하여 구조화하고, 각 파일을 살펴보며 어떤 방식으로 configuration을 설정하고 명령을 작성할 지 알아보도록 하겠습니다.