리그캣의 개발놀이터

[Ansible] Ansible 이란? Ansible 소개 본문

인프라/Ansible

[Ansible] Ansible 이란? Ansible 소개

리그캣 2020. 1. 23. 18:39

 

ansible의 용도

 회사에서 서버를 관리하다 보면 여러가지로 어려운 점이 생긴다. 인프라 관리를 하면서 종종 같은 작업을 반복할 일이 생겼고, 그것을 기존의 shell script를 통해서 작업을 진행하였다.(물론 shell도 기초적인 수준) 신설 조직에서 일하다 보니 기존 레거시 스크립트들이 없었고 신입인 내가 새로 script를 짜야만 하는 환경에 놓이기도 하였다.

 게다가 데이터 관련 인프라는 대부분 클러스터링 (노드 or 서버가 여러개)이 되어있었다(운좋게도 기존 환경이 안잡혀있어서 처음부터 구축 인력에 투입될 수 있었다.). 이러한 특수한 환경에서는 각각 서버에 접속하여 java를 설치, 데이터 인프라를 구성하기에는 노가다성 작업이 많았다. (대학생활에서는 대부분 ubuntu에서 작업을 했지만, 우리나라의 큰 엔터프라이즈 업계에선 centos를 쓴다는 것도 처음알게 되었다.) 나와 같은 환경에서 필요한 것이 ansible이라는 provisioning & configuration management tool 이다. 여러대의 서버에 같은 작업을 하는 것은 번거로운 일이다. ansible을 사용하게 되면 여러대의 서버 설정과 애플리케이션 배포를 자동화 할 수 있었다. 

ansible의 장점

 ansible의 장점으로는 대표적이라고 생각하는 것은 ssh 통신으로 빠르게 작업이 가능하다는 점과 멱등성이 유지된다는 것이다. 멱등성? 이라고 생각할 수 있겠지만 멱등성은 ‘한번 했던 작업을 또 하지 않는 것’ 이라고 생각하면 이해하기 빠를 것 같다.

그 외에도 여러 장점이 있다.(ref : 불곰님)

  • 자동 배포 환경이 쉬움

  • 활발한 오픈소스

  • play book을 통한 Infrastructure as Code(작업시 노동시간 감소, 코드화에 의한 고도의 품질 보증)

  • ad-hoc 지원 - 임시적으로 수행하는 의미, 작업중에 별도의 일을 하기 위해 명령어를 날리는 것 정도로 이해

  • 병렬 provisioning 지원 - 여러 서버를 병렬적으로 provisioning 한다는 말 같음

  • vagrant

  • jinja2 - jinja2 template을 사용해서 변수를 넣어 사용할 수 있었다

 

멱등성 이란?
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

 

ansible에서 멱등성이란?

여러번 ansible 툴을 사용하더라도 동일한 결과 값이 나올 수 있도록 제공되는 형태여야 한다. 즉 매번 다른 결과가 나오거나 에러가 나온다면 비멱등성(non-idempot) 하다고 할 수 있다.

 

자세히 : https://knight76.tistory.com/entry/ansible-%EB%A9%B1%EB%93%B1%EC%84%B1idempotent-%EC%9A%A9%EC%96%B4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

[ansible] 멱등성(idempotent) 용어 이해하기

ansible 글 내용을 작성하면서 멱등성(idempotent)이란 용어를 쉽게 표현한 곳이 없어서 서술해보았다. * 멱등성(idempotence) 이란? 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성(idempotenc..

knight76.tistory.com

ansible의 지원

 ansible은 미국 레드햇(Red Hat)사가 제공하고 있으며, 파이썬으로 개발되었다. “Automation for Everyone”을 지향하는 도구이다.

필자는 레드햇 ansible 세미나에 참여하여 재미있게 hands-on 교육을 받고온 기회가 있었다. 기회가 있다면 참여하시는 것도 좋은 선택일 것 같다.

https://www.ansible.com/

 

ansible 구성

앤서블은 아래의 내용으로 구성되어 있다.

  • ansible core

  • Inventory

  • module

  • playbook

ref : https://youngmind.tistory.com/entry/Ansible-%EA%B5%AC%EC%A1%B0%EC%9D%98-%EC%9D%B4%ED%95%B4

 

ansible core

ansible 자체 프로그램으로 위에서는 [python, ansible config] 로 보면 될것 같다. ansible 을 처음 설치하고 시작하게 되면 command line상에서 앤서블을 실행하게 될 것이다. 이것을 ansible core로 보면 된다.

 

inventory
inventory는 ‘목록’이라는 의미를 가지고 있으며. 작업할 노드or서버 들의 접속 정보를 가지고 있는 파일을 말한다.

예를 들면 linux의 /etc/hosts 를 보게되면 접속 가능한 list up해놓을 것인데 이런것들이 inventory가 된다. 앤서블에서는 작업할 디렉토리에 따로 inventroy를 만들어서 서버에 대한 접속 정보를 넣어 놓고 작업하게 된다.(여러 서버를 그룹화해 정의하거나 각각의 서버와 그룹에 대해 변수를 사용할 수 있다.)

 

module

모듈(Module)은 앤서블에서 실행되면서 작업하는 하나하나의 단위라고 생각하면 된다. 코드로 치면 하나의 function()이라고 이해하면 될 듯 하다.(필자의 개인 생각임으로 다를 수 있음) 예를 들면 다음과 같은 작업을 간단히 수행 할 수 있게 도와준다.

  • 패키지, 서비스 설치

  • 파일에 대한 권한 설정

  • 데이터베이스 작업

  • 클라우드 작업

  • 네트워크 작업

 

나는 개인적으로 hands-on을 좋아한다. 실제 해보지 않으면 이해하기 어렵기 때문이다. 다음 시간에는 이러한 내용을 바탕으로 ansible에 대해 이해할 수 있는 시간을 갖도록 하자.





'인프라 > Ansible' 카테고리의 다른 글

[ansible / 앤서블] 설치하기 , install, 시작하기  (0) 2020.02.03
Comments