Ansible Overview
Overview
이번 포스팅은 Provision & Configuration Management Tool 중의 하나인 Ansible에 대해서 공유합니다.
Ansible은 DevOps의 용도로 서버 환경 구축, WAS 배포 등에 사용되는 Python 기반의 툴 입니다.
최근 업무 중 10대 이상의 vm에 nginx 설치와 ssl 환경 구축, java, monitor tool 설치, demonize 툴을 설치해야 하는 일이 있었습니다.
처음에는 10대이지만 추후 같은 설정으로 더 많은 서버를 구축해야하는 상황이었습니다.
기존 회사에서 지원해주는 DevOps 툴에서는 ssl과 같은 세세한 설정에 대한 부분에 대해 설정할 수 없었기 때문에, Ansible을 통해 약간의 등록만으로 쉽게 해결하였습니다.
또한 설정을 git에 저장하여 언제든 다시 세팅할 수 있도록 준비해 두었습니다.
그럼 이런 Ansible의 동작과 구성에대해 정리해 보겠습니다.
Install
설치는 매우 간단합니다. python 기반이기 때문에 python -> easy_intall -> pip -> ansible 순으로 brew를 통해 설치하면 됩니다.
Component
출처:IBM
Ansible을 도식화 하면 위 이미지와 같습니다. Ansible은 기본적으로 YAML 파일을 이용하여 정보를 저장하는데,
대상 서버에 정보를 Hosts Inventory.yml, 어떠한 Provision을 할지에 대한 명세를 Playbook.yml 에 작성하여 사용합니다.
Hosts의 예시는 아래와 같습니다.
all:
children:
example_hosts:
hosts:
test.host.ip1:
test.host.ip2:
host 그룹의 이름을 children 하위에 작성하고 hosts: 아래에 실제 host ip를 입력합니다.
Playbook의 예시는 아래와 같습니다
example_server_alpha.xml
---
- hosts: example_hosts
remote_user: test
vars:
sever_name: hosts-alpha
roles:
- initialize
- nginx
- nginx-conf-simple
- java
tasks:
- include: tasks/example_hosts/supervisored.yml
...
접근할 host, 유저명, 사용할 변수 이름과 동작에대한 정의가 기록되어 있습니다.
Group_Vars, Role, Task, Template…
각각의 설정들은 디렉토리 기반으로 관리됩니다.
/ /hosts /ALPHA /BETA - inventory.xml /group_vars
- example_service.xml /roles /java /task /template … /task
- example_service.xml /templates
- test.j2 example_service_alpha.xml
#groups_var
groups_var는 실행되는 playbook에 사용되는 변수를 저장 됩니다. group_var는 phase와 관계없이 모든 hosts에 적용됩니다.
각각의 변수는 when: 등의 조건문이나 후에 설명되는 template에 사용 될 수 있습니다.
아래는 예시입니다. yml 형태로 저장됩니다.
jar_prefix: "test"
service_code: "test"
is_API: True
#role & task
task는 playbook에 기록하기에 조금 크거나 묶어서 재사용하기 위한 목록입니다.
role은 task의 묶음입니다.
#template
jinja2를 이용하여 sh 파일등을 서버 환경에따라 다르게 설치할 수 있습니다. 또한 if, for 등 간단한 로직도 적용할 수 있습니다.
예시는 아래와 같습니다.
#!/bin/sh
PORT=
MANAGEMENT_PORT=20080
JAR_PATH=/module//.jar
LOG_PATH=//${PORT}
Vault
pem과 같은 보안 파일에 대한 정보를 ansible에서 제공하는 vault를 통해 암호화 할 수 있습니다.
암호화 된 파일은 playbook 실행시 복호화 되어 사용됩니다.
암호화는 아래와 같이 간단한 커맨드를 통해 실행 할 수 있습니다.
ansible-vault encrypt ${fileaname}
#plan text
example text …
#encrypted text
$ANSIBLE_VAULT;1.2;AES256;dev 37636561366636643464376336303466613062633537323632306566653533383833366462366662 65653530633030653038313…
##excute
설정이 완료되었다면 아래와 같이 간단한 커멘드로 서버구축을 할 수 있게 됩니다.
ansible-playbook example_hosts_alpha.yml
Adventage
ssh를 이용한 간단하면서 빠른 다수의 서버접근, gruop_vars, roles, tasks등의 명확한 동작에 대한 개념, jinja2를 이용한 template 파일 생성 기능이 주된 장점입니다.
여러번 실행을 해도 공통된 결과인 멱등성을 가집니다.
Disadventage
os 설치와 같은 아주 기본적인 서버세팅은 불가능합니다.
Comments