Anyway

[Ansible] Ansible이란? 본문

Ansible

[Ansible] Ansible이란?

dyana 2024. 8. 23. 09:53

Ansible이란?

Ansible은 프로비저닝, 구성 관리, 애플리케이션 배포, 오케스트레이션 및 기타 여러 IT 프로세스를 자동화하는 오픈 소스 IT 자동화 엔진이다. Ansible은 Agentless 아키텍처를 사용하며, YAML을 사용해 Playbook이라는 이름의 간단한 구성 파일로 정의된다.

주요 특징 및 장점

  1. Agentless
    • Ansible은 관리 대상 시스템에 별도의 에이전트 소프트웨어를 설치할 필요가 없다. ssh를 통해 원격으로 시스템을 제어한다. 이는 유지보수를 단순화하고 보안 취약점을 줄인다.
  2. 간단한 YAML 구문
    • Ansible의 Playbook은 사람이 읽기 쉬운 YAML 형식으로 작성된다. 이를 통해 복잡한 작업도 간단하게 자동화 할 수 있다.
  3. 모듈 기반 아키텍처
    • Ansible은 수백 개의 모듈을 제공하여 다양한 작업을 수행할 수 있다. 필요한 작업에 맞는 모듈을 사용하여 Playbook을 작성할 수 있으며 커스텀 모듈을 제작하여 사용할 수도 있다.
  4. Idempotency(멱등성)
    • Ansible은 작업이 반복 실행되더라도 시스템 상태를 변경하지 않도록 설계되었다. 예를 들어 이미 설치된 패키지를 재설치하려 하지 않고 시스템의 상태를 확인한 후 필요한 변경만 수행한다.
  5. 확장성 및 커뮤니티 지원
    • Ansible은 다양한 규모의 환경에서 쉽게 확장할 수 있다. 또한 광범위한 오픈 소스 커뮤니티와 기업 지원을 받으며 다양한 모듈과 플러그인을 통해 기능을 확장할 수 있다.
  6. 광범위한 지원 환경
    • 다양한 운영 체제 및 클라우드 환경에서 동작하며, 서버 구성, 네트워크 자동화, 애플리케이션 배포 등 다양한 작업을 지원한다.

Ansible의 주요 구성 요소

[구조]

ansible/
├── ansible.cfg # 앤서블의 기본 설정 파일. SSH 설정, 기본 인벤토리 파일 위치 등을 지정. -
├── hosts       # 인벤토리 파일. 관리할 호스트의 주소나 그룹 정보가 들어 있음. -
├── main.yml    # 메인 플레이북 파일. 어떤 역할이 어느 호스트에 적용될지 정의.
├── roles       # 재사용 가능한 태스크 모음인 '역할'을 포함하는 디렉토리.
│   └── nginx  # 모든 서버에 공통적으로 적용될 설정을 담당하는 역할.
│       ├── handlers 
│       │   └── main.yml  # 태스크 수행 후 특정 이벤트에 의해 트리거되는 핸들러들을 정의함 (예: 서비스 재시작).
│       ├── tasks
│       │   └── main.yml  # 이 역할에 필요한 실제 작업을 담고 있는 태스크 리스트.
│       ├── templates
│       │   └── nginx.conf.j2  # 설정 파일의 템플릿. Jinja2 형식으로 변수를 포함해 동적으로 파일 생성 가능.
│       └── vars
│           └── main.yml  # 역할에 필요한 변수들을 정의. 이 변수들은 해당 역할의 태스크와 템플릿에서 참조 가능.
└── vars
    └── main.yaml # 플레이북 전역에서 사용할 변수를 정의하는 파일. 이 변수들은 모든 역할, 태스크에 걸쳐 사용됨. -
  1. Inventory
    • 관리 대상 호스트(서버, 네트워크 장비) 리스트이다. 호스트 이름, 그룹, IP 주소 등을 정의한다.
    • example
    • [local]
      127.0.0.1

      [local:vars]
      ansible_connection=local
      ansible_user=local_user


      #nginx
      [nginx_server]
      77.88.140.23
      77.88.140.24

      [nginx_server:vars]
      ansible_connection=ssh
      ansible_user=nginx_user

      #tomcat
      [tomcat_server]
      77.88.140.25
      77.88.140.26

      [tomcat_server:vars]
      ansible_connection=ssh
      ansible_user=tomcat_user

      #mysql
      [mysql_server]
      77.88.140.27
      77.88.140.28

      [mysql_server:vars]
      ansible_connection=ssh
      ansible_user=mysql_user
      master=77.88.140.27
  1. Playbook
    • 자동화 작업을 정의한 YAML 파일이다. 여러 작업들을 순차적으로 실행할 수 있도록 구성할 수 있다.
    • example
    • ---
      - hosts: webservers
      become: yes

      tasks:
        - name: Ensure Apache is installed
          apt:
            name: apache2
            state: present

        - name: Start Apache service
          service:
            name: apache2
            state: started
  1. Modules
    • 특정 작업을 수행하는 작은 코드 단위이다. 예를 들어 패키지 설치, 파일 복사 등이 있다.
    • example
    • ---

      #nginx 설치
      - name: Install Nginx
      apt:
        name: nginx
        state: present
         
      #파일 복사
      - name: Copy "cert" to html directory
      copy:
        src: templates/cert
        dest: /etc/ssl/
  2. Roles
    • 관련된 Playbook, 변수, 파일, 템플릿 등을 구조화하여 재사용 가능한 단위로 만든 것이다. 큰 규모의 프로젝트에서 구성을 간단하게 관리할 수 있다.
  3. Tasks
    • Playbook 내에서 실제로 수행되는 작업을 정의한 부분이다.
    • example
    • ---
      - name : Install mysql
      hosts: mysql_server
      become: yes

      tasks:
      - import_tasks: roles/common/tasks/update.yml
      - import_tasks: roles/mysql/tasks/db3.yml
  4. Handlers
    • 특정 조건이 충족될 때만 실행되는 작업이다. 예를 들어 특정 파일이 변경되었을 때 서비스를 재시작하는 작업을 정의할 수 있다.

참조

https://www.ansible.com/

'Ansible' 카테고리의 다른 글

[Ansible] Ansible Install & SSH 연결(원격 접속)  (0) 2024.08.24