본문 바로가기
DevOps/IaC 자동화

[Ansible] gather_facts 성능향상 방법

by 마이자몽 🌻♚ 2021. 5. 23.

Ansible gather_facts 성능 향상

Ansible에서 default로 Node의 Fact 정보를 수집합니다. Fact는 Anisible Node의 OS, Resource, IP 등  호스트의 다양한 정보를 변수로 저장합니다. 이런한 Fact의 정보를 Provisioning하는 과정에서 사용하지 않는다면... 노드의 수에 비례해서 성능이 저하 될 수 있습니다. 예를 들어.... 단순하게 모든 노드에 파일을 하나 생성하는데 굳이 Node의 정보들을 수집할 필요가 없습니다. 3대의 노드에만 Provisioning한다면 크게 문제가 없겠지만... 100대, 1000대가 넘어가는 노드들을 관리하다면 성능에 대한 차이를 확연하게 느낄 수 있을 것 입니다.

 

---
- hosts: all
  # facts를 수집하지 않는다.
  gather_facts: no 
  tasks:
  - name: Create an empty file
    file:
      path: "/root/test.txt"
      state: touch
  • gather_facts 필드를 no로 설정하여 fact를 수집하지 않게 한다.

 

 

Ansible Facts를 사용하는 경우?

위의 내용을 인용해보면... Facts의 정보는 노드의 기본 정보들을 사용해야하는 경우 gather_facts 필드를 yes로 설정하고 해야한다. 예를들어... 각 운영체제에 따라 다르게 설정해줘야하는 경우가 있거나... 리소스 상태에 따라 변경사항을 반영하는 등, 호스트의 상태에 따라 변경이 있는 경우 사용합니다. 변수를 사용하는 것이기 때문에 주로 when을 사용해서 조건을 걸어 줍니다.

 

Ansible Facts 확인

$ ansible all -m setup
  • setup module을 사용해서 Fact정보를 확인할 수 있다.

 

위의 이미지와 같이 노드의 다양한 정보를 확인할 수 있다.

 

Memory 여유 공간에 따른 Provisioning

---
- hosts: all
  # facts를 수집한다. default가 yes이기때문에 명시하지 않아도 된다.
  gather_facts: yes
  tasks:
    - name: debug when node has sufficient memory
      debug:
        msg:
          - "{{ ansible_memfree_mb }}"
          - "{{ ansible_memory_mb }}"
      when: "ansible_memfree_mb | int >= 2048"
  • gather_facts 필드를 yes로 설정하여 fact정보를 수집할 수 있도록 한다.
  • when 필드를 사용하여 호스트의 여유 메모리가 2GB 이상인 노드의 메모리 상태를 출력하도록 한다.

 

여유 메모리가 2GB 이상인 master01.centos.test 노드만 실행하고 나머지는 skip한 것을 확인할 수 있다.

태그

댓글0