본문 바로가기

DevOps

[Ansible] Ansible이란 무엇인가?

728x90
반응형

Ansible은 IT 자동화 도구로서, 서버 설정, 애플리케이션 배포, 작업 자동화 및 IT 환경의 오케스트레이션을 용이하게 합니다. Red Hat이 개발하고 관리하며, 인프라스트럭처를 코드로 관리하는 Infrastructure as Code(IaC) 도구 중 하나입니다. 

주요 특징

Ansible은 IT 자동화 도구로서 다양한 특징을 가지고 있습니다. 이러한 특징은 Ansible을 다른 구성 관리 도구들과 차별화시키고, DevOps 및 시스템 관리자들에게 매우 유용하게 만듭니다.

에이전트리스(Agentless):

  • Ansible은 관리 대상 노드에 별도의 에이전트를 설치하지 않습니다. SSH(리눅스/유닉스) 또는 WinRM(윈도우)을 통해 원격으로 명령을 실행합니다. 이는 설치와 유지 관리의 복잡성을 줄이고 보안성을 높입니다.

단순성과 사용자 친화적:

  • Ansible은 YAML 포맷의 플레이북(Playbooks)을 사용하여 작업을 정의합니다. YAML은 읽기 쉽고 쓰기 쉬운 형식으로, 비개발자도 쉽게 이해하고 작성할 수 있습니다.
- name: Install Nginx
  apt:
    name: nginx
    state: present

모듈 기반 아키텍처:

  • Ansible은 다양한 모듈을 통해 기능을 확장합니다. 모듈은 파일 관리, 패키지 설치, 서비스 관리 등 다양한 작업을 처리합니다. 사용자는 필요에 따라 모듈을 작성하거나 사용할 수 있습니다.

역할 기반 역할(Role-Based):

  • 역할(Roles)을 통해 작업을 모듈화하고 재사용할 수 있습니다. 역할은 디렉토리 구조로 조직되어 특정 기능을 독립적으로 수행합니다. 이는 코드의 재사용성을 높이고 유지 관리를 용이하게 합니다.
  •  
roles/
  └── nginx/
      ├── tasks/
      │   └── main.yml
      ├── handlers/
      │   └── main.yml
      ├── templates/
      │   └── nginx.conf.j2
      └── defaults/
          └── main.yml

확장성:

  • Ansible은 다양한 운영 체제와 클라우드 환경(AWS, Azure, GCP 등)을 지원합니다. 이를 통해 이질적인 환경에서도 일관된 관리가 가능합니다.

다양한 활용 사례:

  • Ansible은 구성 관리(Configuration Management), 애플리케이션 배포(Application Deployment), 작업 자동화(Task Automation), 클라우드 프로비저닝(Cloud Provisioning) 등 다양한 용도로 사용할 수 있습니다.

상태 드리븐(State-Driven):

  • Ansible의 플레이북은 선언형으로 작성되어, 원하는 상태를 정의합니다. Ansible은 현재 상태와 비교하여 필요한 변경만 수행합니다. 이는 작업의 예측 가능성을 높이고 불필요한 변경을 방지합니다.

다양한 인벤토리 관리:

  • Ansible은 정적 인벤토리와 동적 인벤토리 방식을 모두 지원합니다. 정적 인벤토리는 단순한 텍스트 파일로 호스트를 정의하며, 동적 인벤토리는 스크립트를 사용하여 클라우드 서비스나 다른 데이터 소스로부터 실시간으로 인벤토리를 생성합니다.
  • 정적 인벤토리 예시
[webservers]
webserver1 ansible_host=192.168.1.10
webserver2 ansible_host=192.168.1.11

커뮤니티 및 상용 지원:

  • Ansible은 활발한 오픈 소스 커뮤니티에 의해 지원되며, 다양한 모듈과 역할이 공유되고 있습니다. 또한, Red Hat의 상용 지원을 통해 엔터프라이즈급 지원과 서비스를 받을 수 있습니다.

 

Ansible은 그 단순성과 강력한 기능들 덕분에 DevOps 및 시스템 관리자들에게 인기 있는 도구입니다.

주요 구성 요소

https://velog.io/@honghwahyeong/Ansible-Ansible-%EC%9D%B4%EB%9E%80

구분 내용
컨트롤 노드(Control Node)
  • Ansible을 실행하는 머신으로, 여기서 플레이북을 작성하고 실행합니다.
관리 대상 노드(Managed Nodes)
  • Ansible이 관리하는 서버들로, 컨트롤 노드에서 SSH를 통해 명령을 실행합니다.
인벤토리(Inventory)
  • 관리 대상 노드의 목록을 정의한 파일입니다. 호스트 파일 또는 동적 인벤토리를 사용할 수 있습니다.
플레이북(Playbook)
  • YAML 포맷으로 작성된 설정 파일로, 수행할 작업과 그 순서를 정의합니다.
모듈(Modules)
  • Ansible이 수행하는 단일 작업을 정의한 코드 조각입니다. 파일 관리, 패키지 설치, 서비스 관리 등 다양한 작업을 처리합니다.
역할(Roles)
  • 관련된 작업들을 그룹화하여 재사용 가능한 단위로 만든 것입니다. 디렉터리 구조를 통해 역할을 조직하고 관리할 수 있습니다.

장점

  1. 단순성과 유연성:
    • 에이전트리스 아키텍처와 YAML 기반 구성 덕분에 설정과 유지 관리가 단순합니다.
  2. 확장성:
    • 다양한 모듈과 역할을 사용하여 복잡한 환경에서도 확장성 있게 운영할 수 있습니다.
  3. 다양한 활용:
    • 서버 프로비저닝, 애플리케이션 배포, 구성 관리, 지속적 통합/지속적 배포(CI/CD) 파이프라인 구축 등 다양한 용도로 활용할 수 있습니다.
  4. 강력한 커뮤니티와 지원:
    • Ansible 커뮤니티는 활발하며, 다양한 오픈 소스 모듈과 역할이 제공됩니다. Red Hat의 상용 지원도 받을 수 있습니다.

예제

아래는 Ansible을 사용하여 Nginx 웹 서버를 설치하고 설정하는 간단한 예제입니다.

인벤토리 파일

[webservers]
webserver1 ansible_host=192.168.1.10 ansible_user=ubuntu
webserver2 ansible_host=192.168.1.11 ansible_user=ubuntu

플레이북

플레이북(playbook.yml)은 수행할 작업을 정의합니다.

---
- name: Install and configure Nginx
  hosts: webservers
  become: yes
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Ensure Nginx is running
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Create a simple HTML file
      copy:
        dest: /var/www/html/index.html
        content: "<html><body><h1>Hello, Ansible!</h1></body></html>"

실행

플레이북을 실행하여 정의된 작업을 수행합니다.

ansible-playbook -i inventory.ini playbook.yml

 

Ansible은 사용자 친화적이며 강력한 자동화 도구로, 서버 구성 관리와 애플리케이션 배포를 효율적으로 수행할 수 있게 해줍니다. 이를 통해 DevOps 팀은 반복적인 작업을 자동화하고, 일관성을 유지하며, 신속하게 인프라를 프로비저닝하고 관리할 수 있습니다.

728x90
반응형