Ansible Playbook 으로 시스템 업데이트 자동화하는 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 시스템 및 인프라 관리를 간소화하는 강력한 IT 자동화 도구입니다. 이 튜토리얼에서는 시스템 업데이트 자동화를 위한 Ansible playbook 을 만드는 방법을 살펴보며, 서버 및 애플리케이션이 항상 최신 상태로 유지되고 안전하게 보장되는 방법을 알아봅니다.

Ansible Playbook 이해

Ansible 은 간편하고 효율적인 방식으로 시스템을 관리하고 구성할 수 있는 오픈소스 자동화 도구입니다. Ansible 의 핵심 개념은 Playbook 으로, YAML 기반 파일이며 인프라의 원하는 상태를 정의합니다.

Ansible Playbook 이란 무엇인가요?

Ansible Playbook 은 인프라의 설계도입니다. YAML(YAML Ain't Markup Language) 로 작성되며, Ansible 이 대상 호스트에서 실행할 일련의 작업을 포함합니다. 이러한 작업에는 소프트웨어 설치, 서비스 구성, 파일 관리 등이 포함될 수 있습니다.

Playbook 은 계층적 구조로 구성되며, 각 Playbook 은 하나 이상의 "플레이"를 포함합니다. 각 플레이는 특정 호스트 집합에서 실행되는 작업의 모음입니다. 플레이에는 변수, 핸들러 및 기타 Ansible 구성 요소를 포함하여 인프라를 더욱 역동적이고 유연하게 만들 수 있습니다.

Ansible Playbook 의 구조

Ubuntu 22.04 서버에서 시스템 패키지를 업데이트하는 간단한 Ansible Playbook 의 예는 다음과 같습니다.

- hosts: all
  become: yes
  tasks:
    - name: Update package cache
      apt:
        update_cache: yes

    - name: Upgrade packages
      apt:
        upgrade: dist

이 예제에서 Playbook 은 모든 호스트 (hosts: all) 를 대상으로 하는 단일 플레이를 가지고 있습니다. become: yes 지시문은 Ansible 이 sudo 또는 su를 사용하여 작업을 수행할 권한을 상승시키도록 지시합니다.

작업 섹션에는 패키지 캐시를 업데이트하는 작업과 대상 호스트에서 설치된 모든 패키지를 업그레이드하는 작업이 포함되어 있습니다.

Ansible Playbook 의 장점

Ansible Playbook 은 기존의 구성 관리 접근 방식보다 여러 가지 장점을 제공합니다.

  • 선언적 구문: Playbook 은 선언적 구문을 사용하여 인프라의 원하는 상태를 정의하고, Ansible 은 해당 상태를 달성하기 위한 필요한 단계를 처리합니다.
  • 멱등성: Ansible 작업은 멱등적이므로 의도하지 않은 변경 사항을 일으키지 않고 여러 번 실행할 수 있습니다.
  • 간결성: Ansible Playbook 은 사람이 읽기 쉬운 YAML 로 작성되어 이해하고 유지 관리하기 쉽습니다.
  • 재사용성: Playbook 은 다른 프로젝트와 환경에서 공유 및 재사용할 수 있습니다.
  • 확장성: Ansible 은 많은 호스트를 동시에 관리할 수 있으므로 인프라 자동화에 대한 확장 가능한 솔루션입니다.

Ansible Playbook 의 기본 사항을 이해함으로써 시스템 업데이트 및 기타 인프라 관리 작업을 자동화하여 시간을 절약하고 수동 오류의 위험을 줄일 수 있습니다.

시스템 업데이트 Playbook 생성

Ansible Playbook 에 대한 기본적인 이해를 바탕으로 Ubuntu 22.04 호스트에서 시스템 업데이트를 처리하는 Playbook 을 만들어 보겠습니다.

Playbook 구조 정의

시스템 업데이트 Playbook 의 구조는 다음과 같습니다.

- hosts: all
  become: yes
  tasks:
    - name: Update package cache
      apt:
        update_cache: yes

    - name: Upgrade packages
      apt:
        upgrade: dist

    - name: Remove unused packages
      apt:
        autoremove: yes
        purge: yes

이 Playbook 의 구성 요소를 자세히 살펴보겠습니다.

  • hosts: all: Ansible 이 인벤토리의 모든 호스트에서 Playbook 을 실행하도록 지시합니다.
  • become: yes: Ansible 이 sudo 또는 su를 사용하여 작업을 수행할 권한을 상승시키도록 합니다.
  • tasks: Ansible 이 대상 호스트에서 실행할 개별 작업을 포함합니다.

작업 세부 설명

  1. 패키지 캐시 업데이트: 패키지 업그레이드를 시도하기 전에 로컬 패키지 캐시가 최신 상태인지 확인합니다.
  2. 패키지 업그레이드: 설치된 모든 패키지를 최신 버전으로 업데이트하는 배포 업그레이드를 수행합니다.
  3. 사용되지 않는 패키지 제거: 더 이상 필요하지 않은 패키지를 제거하여 시스템을 정리합니다.

Playbook 사용자 지정

변수, 핸들러 또는 특정 시나리오를 처리하기 위한 조건 논리를 추가하여 Playbook 을 더욱 사용자 지정할 수 있습니다. 예를 들어, 시스템이 유지보수 기간 중이면 패키지 업그레이드를 건너뛰거나 일부 호스트에서만 업데이트를 수행할 수 있습니다.

- hosts: webservers
  become: yes
  tasks:
    - name: Update package cache
      apt:
        update_cache: yes

    - name: Upgrade packages
      apt:
        upgrade: dist
      when: ansible_date_time.weekday != 6 ## 토요일에는 업그레이드를 건너뜁니다.

이 예제에서는 현재 요일이 토요일 (요일 6) 이 아닌 경우에만 패키지 업그레이드 작업이 실행됩니다.

잘 설계된 시스템 업데이트 Playbook 을 통해 Ubuntu 22.04 호스트를 최신 상태로 유지하고 안전하게 관리하는 프로세스를 간소화할 수 있습니다.

Playbook 실행 및 확인

시스템 업데이트 Playbook 을 생성했으므로 이제 실행하고 결과를 확인할 차례입니다.

Playbook 실행

Playbook 을 실행하려면 명령줄에서 ansible-playbook 명령어를 사용합니다. Playbook 이 system-update.yml로 저장되어 있다고 가정하면 다음과 같이 실행할 수 있습니다.

ansible-playbook system-update.yml

이렇게 하면 Ansible 인벤토리에 정의된 모든 호스트에서 Playbook 이 실행됩니다.

특정 호스트 그룹을 대상으로 하려면 -l 또는 --limit 옵션을 사용할 수 있습니다.

ansible-playbook system-update.yml -l webservers

이렇게 하면 webservers 그룹에 있는 호스트에서만 Playbook 이 실행됩니다.

Playbook 실행 확인

Playbook 실행 후에는 여러 가지 방법으로 결과를 확인할 수 있습니다.

  1. Playbook 출력: ansible-playbook 명령어는 실행 중에 출력을 제공하며 수행된 작업과 상태 (예: 변경됨, 확인됨, 실패) 를 표시합니다.

  2. 호스트 로그: 대상 호스트의 로그를 확인하여 패키지 업데이트 세부 정보와 발생했을 수 있는 오류를 확인할 수 있습니다.

  3. 패키지 버전: 대상 호스트에 로그인하여 apt list --upgradable와 같은 명령어를 실행하여 패키지가 최신 버전으로 업데이트되었는지 확인할 수 있습니다.

  4. Ansible 팩트: ansible 명령어를 사용하여 대상 호스트에 대한 팩트를 수집하고 패키지 버전을 검사할 수 있습니다.

    ansible all -m apt -a "name=*" -o

    이렇게 하면 모든 호스트의 현재 패키지 버전을 보여주는 표가 출력됩니다.

Playbook 실행을 확인하여 시스템 업데이트가 성공적으로 적용되었으며 호스트가 최신 상태이고 안전한지 확인할 수 있습니다.

요약

이 가이드를 마치면 시스템 업데이트를 위한 Ansible playbook 을 만드는 방법에 대한 포괄적인 이해를 얻게 됩니다. Ansible playbook 의 기본 원리부터 playbook 실행 및 확인까지의 주요 단계를 학습하게 됩니다. 이 지식을 통해 IT 운영을 간소화하고 Ansible 로 관리되는 인프라 전반에 걸쳐 일관되고 안정적인 업데이트 프로세스를 유지할 수 있습니다.