포스트

[K8S Deploy Study by Gasida] - Ansible 기초 - 핸들러

[K8S Deploy Study by Gasida] - Ansible 기초 - 핸들러

핸들러

앤서블의 핵심: 멱등성 (Idempotency)

앤서블 모듈의 가장 큰 특징은 현재 상태를 체크하고 원하는 상태로 만든다는 점이다.

  • 동일한 결과: 플레이북을 한 번 실행하든 백 번 실행하든, 시스템의 최종 상태는 항상 동일합니다.
  • 지능적 변경: 시스템이 이미 원하는 상태(예: 패키지가 이미 설치됨)라면, 앤서블은 아무런 작업을 수행하지 않고 넘어간다.
  • 최소한의 변경: 오직 변경이 필요한 경우에만 작업을 수행하여 시스템 자원 낭비를 줄이고 예기치 못한 오류를 방지한다

핸들러 (Handlers)의 역할: “조건부 사후 작업”

멱등성에 의해 시스템에 실제 변화(changed)가 발생했을 때만 추가로 호출되는 특수한 작업이다.

  1. 트리거(Trigger): 일반 태스크가 실행되어 시스템 설정이 실제로 바뀌면, notify 구문을 통해 핸들러에게 알림을 보낸다.

  2. 응답(Response): 핸들러는 알림을 받았을 때만 실행 대기열에 들어간다.

  3. 지연 실행: 알림을 받은 핸들러는 즉시 실행되지 않고, 플레이북의 모든 일반 태스크가 성공적으로 끝난 후 맨 마지막에 한 번만 실행된다.


3. 왜 핸들러를 사용해야 할까요?

단순히 태스크 뒤에 서비스 재시작 태스크를 넣는 것과 핸들러를 사용하는 것의 차이는 효율성에 있다.

  • 불필요한 작업 방지: 설정 파일에 아무런 수정이 없었다면(ok), 서비스를 재시작할 필요가 없다. 핸들러는 이때 동작하지 않아 서비스 가용성을 높인다.

  • 중복 실행 방지: 만약 5개의 서로 다른 설정 파일을 수정했더라도, 핸들러는 마지막에 딱 한 번만 서비스를 재시작한다. (재시작 남발 방지)

rsyslog 재시작 태스크가 실행되면 notify 키워드를 통해 print msg라는 핸들러를 호출하는 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
- hosts: tnode2
  tasks:
    - name: restart rsyslog
      ansible.builtin.service:
        name: "rsyslog"
        state: restarted
      notify:
        - print msg

  handlers:
    - name: print msg
      ansible.builtin.debug:
        msg: "rsyslog is restarted"
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.