Ansible 을 활용한 Yum 패키지 관리 방법

AnsibleBeginner
지금 연습하기

소개

이 튜토리얼에서는 강력한 IT 자동화 도구인 Ansible 을 사용하여 Linux 시스템에서 Yum 패키지를 관리하는 방법을 안내합니다. Ansible 의 내장 Yum 모듈을 사용하여 패키지를 설치, 제거 및 업데이트하는 방법을 배우면 인프라 관리를 더욱 효율적이고 일관되게 만들 수 있습니다.

Ansible 소개

Ansible 은 IT 인프라 관리 및 구성 프로세스를 단순화하는 강력한 오픈소스 자동화 도구입니다. 사용하기 쉽고 에이전트리스 (agentless) 이며 확장성이 뛰어나 시스템 관리자, DevOps 엔지니어 및 IT 전문가들에게 인기 있는 선택입니다.

Ansible 이란 무엇인가요?

Ansible 은 YAML(YAML Ain't Markup Language) 이라는 간단하고 사람이 읽기 쉬운 언어를 사용하여 인프라의 원하는 상태를 정의하는 구성 관리 및 배포 도구입니다. 소프트웨어 설치, 시스템 구성, 애플리케이션 배포 등 다양한 작업을 여러 대의 머신에서 동시에 자동화할 수 있습니다.

Ansible 의 주요 기능

  • 에이전트리스 아키텍처: Ansible 은 관리 대상 노드에 추가적인 소프트웨어나 에이전트를 설치할 필요가 없습니다. SSH 를 통해 노드와 통신하기 때문에 설정 및 사용이 용이합니다.
  • 선언적 접근 방식: Ansible 은 인프라의 원하는 상태를 정의하면 Ansible 이 해당 상태를 달성하기 위한 필요한 단계를 처리하는 선언적 접근 방식을 사용합니다.
  • 모듈식 설계: Ansible 은 모듈식 아키텍처로 설계되어 커뮤니티에서 기여하거나 사용자 정의된 모듈을 사용하여 기능을 확장할 수 있습니다.
  • 아이데 mpotency: Ansible 의 작업은 idempotent 하며, 동일한 playbook 을 여러 번 실행해도 이미 원하는 상태에 있는 시스템의 상태는 변경되지 않습니다.
  • 간결성: Ansible 의 구문은 간결하고 이해하기 쉽기 때문에 경험이 풍부한 사용자와 초보 사용자 모두에게 접근 가능합니다.

Ansible 시작하기

Ansible 을 시작하려면 컨트롤 노드 (Ansible 명령을 실행할 머신) 와 관리 대상 노드 (Ansible 이 구성할 머신) 가 필요합니다. Ubuntu 22.04 시스템에 Ansible 을 설치하는 기본적인 예는 다음과 같습니다.

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible

Ansible 설치 후 인프라의 원하는 상태를 정의하는 YAML 파일인 첫 번째 playbook 을 작성할 수 있습니다.

---
- hosts: all
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

이 playbook 은 모든 관리 대상 노드에 Apache 웹 서버를 설치합니다.

Ansible 을 이용한 Yum 패키지 관리

Ansible 은 인프라 전반에 걸쳐 패키지 설치 및 업데이트를 강력하고 유연하게 관리하는 방법을 제공합니다. 이 섹션에서는 CentOS/RHEL 기반 시스템에서 Ansible 을 사용하여 Yum 패키지 관리 방법을 살펴봅니다.

Ansible 의 Yum 모듈

Ansible 의 내장 yum 모듈은 패키지 설치, 업데이트 또는 제거와 같은 다양한 패키지 관리 작업을 수행할 수 있습니다. 다음은 httpd 패키지를 설치하는 예시 playbook 입니다.

---
- hosts: webservers
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present

이 playbook 에서 yum 모듈은 webservers 그룹의 모든 호스트에 httpd 패키지가 설치되었는지 확인합니다.

패키지 업데이트

패키지를 업데이트하려면 yum 모듈의 state: latest 옵션을 사용할 수 있습니다.

---
- hosts: all
  tasks:
    - name: Update all packages
      yum:
        name: "*"
        state: latest

이 playbook 은 관리 대상 노드의 모든 설치된 패키지를 최신 버전으로 업데이트합니다.

패키지 제거

패키지를 제거하려면 yum 모듈의 state: absent 옵션을 사용할 수 있습니다.

---
- hosts: webservers
  tasks:
    - name: Remove Apache
      yum:
        name: httpd
        state: absent

이 playbook 은 webservers 그룹의 모든 호스트에서 httpd 패키지를 제거합니다.

패키지 그룹 관리

Ansible 은 yum 모듈을 사용하여 패키지 그룹을 관리할 수도 있습니다. 다음은 "Development Tools" 패키지 그룹을 설치하는 예시입니다.

---
- hosts: all
  tasks:
    - name: Install Development Tools
      yum:
        name: "@Development Tools"
        state: present

이 playbook 에서 @ 기호는 패키지 이름이 패키지 그룹을 참조함을 나타냅니다.

패키지 종속성 처리

Ansible 의 yum 모듈은 패키지 종속성을 자동으로 처리하여 패키지를 설치할 때 필요한 모든 종속성이 설치되도록 합니다.

---
- hosts: webservers
  tasks:
    - name: Install WordPress
      yum:
        name:
          - httpd
          - php
          - mysql
        state: present

이 playbook 은 webservers 그룹의 모든 호스트에 httpd, php, mysql 패키지와 해당 종속성을 설치합니다.

실제 사용 사례

Ansible 의 Yum 패키지 관리 기능은 다양한 실제 사용 사례에 적용될 수 있습니다. 몇 가지 예를 살펴보겠습니다.

표준 소프트웨어 스택 유지 관리

웹 서버 그룹이 동일한 소프트웨어 패키지 세트를 실행해야 하는 경우 Ansible 을 사용하여 모든 서버에 필요한 패키지가 설치되고 최신 상태를 유지하도록 할 수 있습니다. 이는 인프라 전반에 걸쳐 일관성과 안정성을 높입니다.

---
- hosts: webservers
  tasks:
    - name: Install common web packages
      yum:
        name:
          - httpd
          - php
          - mysql
          - wordpress
        state: present

이 playbook 은 webservers 그룹의 모든 호스트에 httpd, php, mysql, wordpress 패키지를 설치하여 표준화된 소프트웨어 스택을 보장합니다.

보안 패치 자동화

시스템을 최신 보안 패치로 업데이트하는 것은 안전한 인프라를 유지하는 데 필수적입니다. Ansible 을 사용하여 서버 그룹 전반의 패키지 업데이트를 자동화할 수 있습니다.

---
- hosts: all
  tasks:
    - name: Update all packages
      yum:
        name: "*"
        state: latest

이 playbook 은 모든 관리 대상 노드의 모든 설치된 패키지를 최신 버전으로 업데이트하여 시스템이 알려진 취약점으로부터 보호되도록 합니다.

애플리케이션 배포

Ansible 은 Yum 패키지에 의존하는 애플리케이션을 배포하는 데에도 사용될 수 있습니다. 예를 들어, Ansible 을 사용하여 httpd, php, mysql과 같은 패키지에 의존하는 WordPress 와 같은 콘텐츠 관리 시스템을 설치하고 구성할 수 있습니다.

---
- hosts: webservers
  tasks:
    - name: Install WordPress dependencies
      yum:
        name:
          - httpd
          - php
          - mysql
        state: present

    - name: Download and extract WordPress
      unarchive:
        src: https://wordpress.org/latest.tar.gz
        dest: /var/www/html
        remote_src: yes

이 playbook 은 먼저 WordPress 에 필요한 Yum 패키지를 설치한 다음, 웹 서버의 문서 루트에 최신 버전의 WordPress 를 다운로드하고 추출합니다.

이러한 예는 Ansible 의 Yum 패키지 관리 기능을 사용하여 인프라 관리 작업을 간소화하고 자동화하는 방법의 일부일 뿐입니다. Ansible 의 유연성과 강력함은 Yum 기반 시스템을 관리하는 데 귀중한 도구입니다.

요약

이 튜토리얼을 마치면 Ansible 을 사용하여 Yum 패키지 관리를 효과적으로 활용하는 방법에 대한 확실한 이해를 얻게 될 것입니다. 패키지 관련 작업을 자동화하여 Linux 시스템이 최신 상태로 유지되고 안전하게 관리될 수 있도록 할 것입니다. 이 지식은 시스템 관리 워크플로우를 간소화하고 인프라의 전반적인 안정성을 향상시키는 데 도움이 될 것입니다.