내 잡다한 노트

Ansible 정리 본문

Infra/Ansible

Ansible 정리

peanutwalnut 2024. 8. 26. 21:34

Ansible

수십개의 서버에 같은 동작의 작업을 한 번에 편하게 하기 위해서 사용.

IaC ( Infrastructure as Code ) 로 자주 쓰이는 도구. 또한 프로비저닝 도구 중 하나이다.

프로비저닝 도구는 서버나 클라우드 인프라를 설정, 배포, 관리하는 데 사용된다.

프로비저닝 도구는 다음과 같은 작업을 자동화한다.

  • 서버 설정: 운영 체제 설치, 네트워크 설정, 패키지 설치 등 초기 서버 설정 작업.
  • 소프트웨어 배포: 애플리케이션 배포, 구성 파일 배포 및 업데이트.
  • 구성 관리: 시스템 구성 상태를 관리하고 유지.
  • 오케스트레이션: 여러 서버와 서비스 간의 상호작용을 관리.

 

Ansible의 작업은 제어 노드(Control Node)에서 수행된다. 이 제어 노드는 playbook을 실행하는 서버라고 생각하면 된다.

인벤토리 파일에서 연결될 서버들을 정의하는데 이때 연결은 ssh를 통해 한다.

ansible의 서버는 dj_ds1로 정하였다. 또한, ssh 연결을 하기 위한 계정은 monitoring 계정이다.

ansible 디렉토리에서 playbooks 에 들어가면 다양한 작업들이 작성돼있다.

명령어

인벤토리 목록 확인 : ansible-inventory --list 또는 ansible-inventory -i ./inventory --graph

Ping 모듈 사용 (연결 테스트):

ansible all -m ping -i inventory.yaml

플레이북 실행 :

ansible-playbook -i hosts.yaml deploy_monitoring.yml

플레이블 validation check :

ansible-playbook —syntax-check deploy_monitoring.yml

모듈

Ansible의 shell 모듈이나 command 모듈을 사용하고, 그 결과를 중앙에서 볼 수 있도록 register와 debug 모듈을 활용할 수 있다.

tasks:
    - name: Run loginctl list-sessions
      command: loginctl list-sessions
      register: loginctl_output

    - name: Print the output of loginctl list-sessions
      debug:
        var: loginctl_output.stdout_lines

결과를 파일로 저장하려면 local_action과 copy 모듈을 사용할 수 있다.

 - name: Save output to file on remote host
      copy:
        content: "{{ loginctl_output.stdout }}"
        dest: "/tmp/loginctl_sessions_{{ inventory_hostname }}.txt"

    - name: Fetch the output files to control node
      fetch:
        src: "/tmp/loginctl_sessions_{{ inventory_hostname }}.txt"
        dest: "/tmp/"
        flat: yes

Facts

Managed Node들에 대한 다양한 정보를 자동으로 수집하고 제공하는 메커니즘이다.

즉, playbook을 실행하면 자동으로 실행된다. 이걸 하기 싫다면 playbook에 gather_facts: no 라고 설정해주면 된다.

관리되는 호스트에 접속할 때, setup 모듈을 사용하여 호스트의 하드웨어, 운영체제, 네트워크 설정 등 다양한 시스템 정보를 수집하며, 이 정보를 facts 라고 부른다.

수집된 facts는 playbook 내에서 변수처럼 사용될 수 있다.

ansible_facts

: 모든 facts를 하나의 딕셔너리로 보여줍니다. 각 facts는 ansible_facts

라는 변수 아래에 속하며, Playbook에서 쉽게 참조할 수 있습니다.

  • ansible_distribution: 운영 체제의 이름을 나타냅니다 (예: Ubuntu, CentOS).
  • ansible_distribution_version: 운영 체제의 버전을 나타냅니다 (예: 20.04, 7).
  • ansible_default_ipv4['address']: 기본 IPv4 주소를 나타냅니다.

Ansible galaxy

Ansible 커뮤니티에서 공유하는 수천 개의 Roles와 Collections을 찾아보고 사용할 수 있는 공식 플랫폼이다.

Role 설치 :

ansible-galaxy install geerlingguy.postgresql

설치된 Role 사용 :

'Infra > Ansible' 카테고리의 다른 글

ansible 에서 자주 쓰이는 모듈 정리  (3) 2024.11.12
ansible playbook 기본 구조  (0) 2024.08.27
Ansible 특징  (0) 2024.06.02
Ansible 사용 후기  (1) 2024.06.02