본문 바로가기
Dev/DevOps

ansible

by 갓연쥬 2017. 7. 18.



ansible이란?

테스트 환경을 구축하는데 사용되는 툴이다. Provision & configuration management tool.

python으로 개발되고 YAML이라는 언어를 통해 정의할 수 있고 json으로 통신한다.


ansible은 빠른 SSH통신, 빠른 provision이 가능하다.

대부분이 멱등성을 제공한다.


멱등성(Idempotency)

여러 번 적용해도 결과는 바뀌지 않는다. 바뀌는 것이 없으면 당연히 배포되어도 바뀌지 않는다. 바뀌는 부분이 있으면 그 부분만 반영된다.


ansible 설치

SSH 기반이라서 Server에 ansible을 설치하면 완료

앤서블을 구동하여 원격지에 접속하는 서버를 Control Machine이라고 부른다.

brew로 설치할 경우 brew install ansible


YAML이란?

사람이 쉽게 읽을 수 있는 데이터 직렬화 양식(serialization format)

YAML ain't Markup Language(YAML은 마크업 언어가 아니다)라는 재귀적인 이름에서 유래되었으나 Yet Another Markup Language(또 다른 마크업 언어)가 현재 공식적인 약자.

YAML은 마크업보다는 데이터 중심이라는 의미를 강조하고 있다.


inventory file

inventory 파일은 리모트 서버에 대한 meta데이터를 기술하는 파일

remote host를 grouping 할 수 있다.

기본 파일은 /etc/ansible/hosts


playbook

playbook은 ansible의 환경설정, 배포를 가능하게 한다.

yaml 문법으로 정책기술

conditional(when), variables, loops(with_items), include, 결과 저장(register) 지원

하나의 playbook은 하나 또는 하나 이상의 'play'를 두며, play의 목적은 여러 호스트들에 잘 정의된 'role'과 'task'를 매핑하는 역할을 맡는다.

linux 기반 권한 관리(user, group) 지원


task

ansible module을 호출하는 단위(필수)


role

structure 기본 단위로서 설치, 사용이 가능

-apache

-redis

-java

-jenkins

-tomcat


playbook 작성시 팁

-${role}단위로 해야 편하다.

-${role}/tasks/main.yml

-role 단위로 정의할 때는 복수형으로 작성

-최대한 멱등성이 지원되게(Continuous Delivery). register/when를 잘 활용하면 좋다.

-하나의 yml파일에 넣지 말고 역할에 맞게 나누어 최대한 심플하게 (role과 include를 활용할 필요)

-디버그는 syntax-check, verbose, register, debug를 최대한 활용



참고 Ansible의 이해와 활용(https://www.slideshare.net/deview/1a7ansible)


'Dev > DevOps' 카테고리의 다른 글

CI 구축연습 (scala, sbt) -1-  (0) 2017.07.18
DevOps와 CI  (0) 2017.07.18
jenkins 이용해 gradle프로젝트 패키징하기  (0) 2017.07.13
jenkins 사용법  (0) 2017.07.13
Docker  (0) 2017.07.12

댓글