GDSC Sookmyung 활동/10 min Seminar

IT Automation Tool : Ansible(개념, 역할, 특징, 구성요소)

안녕_유지 2021. 5. 17. 00:08

Ansible이란?

“Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs.”

Ansible은 서버에 반복적인 작업을 코드 기반으로 자동화할 수 있는 툴입니다.

이렇게만 정의한다면 무슨 말인지 잘 이해가 가지 않으니 예를 들어 어떠한 상황에서 필요한 것인지 알아봅시다.

시스템을 이루기 위해 여러 서비스가 모여 하나의 시스템으로 운영이 되는데, 이때 어떠한 시스템을 구성하는데 필요한 다양한 서비스들은 각각의 서버에서 운영이 되곤합니다. (회원관리, 결제 등등) 이때 시스템의 규모가 커진다면 이러한 서비스를 구성하는 서버의 수도 증가하고 관리 또한 더욱 힘들 것입니다. 만약 매달 어떠한 서비스를 패치하고 진행할때마다 테스트를 진행한 후 배포할 것이라고 가정하면, 서버가 1대일때는 문제가 되지 않지만 규모가 점차 커진다면 서버의 수도 늘어날 것 입니다. 이때, 같은 내용을 많은 수의 서버에 반복적으로 작업해야한다면 굉장히 번거로울 일 일겁니다.

이러한 상황일때, 여러 서버에 동시에 명령을 실행할 수 있는 자동화 엔진인 Ansible을 사용하는 것이 좋습니다. 

 

IaC (Infrastructure as Code)

IaC란 시스템을 수동으로 관리하는 대신 미리 작성한 코드를 사용하여 컴퓨팅 인프라를 구성하는 방식입니다.

IaC는 유연성이 떨어지는 스크립팅이나 수동 프로세스 대신 코드를 이용해 시스템을 자동으로 구축, 관리, 프로비저닝 하는 IT 인프라 프로비저닝 프로세스의 일종입니다.  

Ansible은 IaC를 기반으로 하는 툴 중 하나입니다.

 

Ansible의 역할

  1. IT Automation : 작업의 자동화
  2. Configuration Management : Infra의 일관성 유지
  3. Automatic Deployment : 어플리케이션을 자동으로 deploy

 

Ansible의 특징

  • Provision & configuration management tool입니다.
  • Puppet, Chef, Salt와 같은 배포 자동화 관리 툴과 달리 agent 설치가 필요 없습니다.
    • Agentless
    • 작업대상이 되는 노드에 별도로 무언가를 설치할 필요없이 명령을 내리는 master에만 작업하면 됩니다. 
    • Agentless이기 때문에 방화벽 이슈, agent 데몬 관리 등과 불편한 사항이 개선되었습니다.
  • SSH 통신을 통해 빠른 provision이 가능합니다.
  • 무료이고 오픈소스입니다. (단, 기업용은 유료입니다. Ansible tower)
  • Python 언어로 구현됩니다. (다른 툴은 주로 ruby로 개발 되었습니다.)
  • 자동 배포 환경을 쉽게 제공합니다.
  • 멱등성을 제공합니다.
    • 여러번 Ansible 툴을 사용하더라도 동일한 결과값을 나올 수 있도록 제공되는 형태를 일컫습니다.

 

Ansible의 구성요소

Module : 어떻게 수행할 것인가

- 실제 Ansible에서 실행되는 단위를 정의할때 Module 개념이 사용됩니다.

- 각 노드가 정해진 Configuration이 되도록 하는 명령 프로그램입니다.

- 기본적으로 다양한 모듈을 지원합니다.

Playbook : 무엇을 수행할 것인가

- Ansible의 구현과 실행의 기반이 되는 스크립트입니다. 

- Module들을 포함한 각 노드들의 Configuration을 지휘하는 매뉴얼로서 각 노드들이 유지해야하는 Policy나 IT Process step들을 기재한 것입니다.

- Yaml 포맷으로 설정합니다.

---
- name : depoly a file
  hosts : webservers # webservers가 inventory 파일에 기재되어야함
  gather_facts : true # 호스트 정보 수집
  tasks : # 명령의 이름과 실행할 내용을 dictionary형식으로 작성 
  	- name : copy tirivial file # 현재는 master에서 node로 복사
          copy : src=/root/trivial.txt dest=/root/yap.txt

Inventory : 어디서 수행할것인가

- Ansible이 관리하는 노드들의 이름을 모아둔 파일입니다.

- 여러개의 서버를 그룹화하여 정의하거나 각각의 서버와 그룹에 대해 변수를 사용한 파라미터를 설정할 수 있습니다. (여러 서버들의 SSH접근, IP, 포트 등 접속정보를 정의합니다.)

[webservers]
Node Private IP address

 

수업 내용 및 검색을 통해 직접 작성한 내용입니다. 잘못된 부분이 있다면 댓글 달아주세요. 감사합니다. 
참조한 블로그 : https://myjamong.tistory.com/239, https://jongjineee.github.io/2020/05/10/ansible.html