Index
- Docker
- Container Orchestration
- Provisioning
Ansible
Ansible은 오픈 소스 소프트웨어 프로비저닝, 구성 관리, 애플리케이션 전개 도구입니다. 수많은 유닉스 계열 시스템에서 실행되며 유닉스 계열 운영 체제 및 마이크로소프트 윈도우의 구성이 가능합니다. 시스템 구성을 기술하기 위해 자체 선언형 언어를 포함하고 있습니다.
python으로 개발되고 YAML 언어를 통해 정의하며 json으로 통신합니다. (python Github project 중 상위 6위)
IaC (Infrastructure as a Code) 라는 개념에서 나온 기술로 여러대의 서버를 효율적으로 관리하기 위해 만들어진 자동화 툴입니다.
1. Ansible 특징
- SSH 통신, 빠른 provision 이 가능합니다.
- 추후 상용 환경에서 사용할 때 agent 기반이면 방화벽 이슈, agent 데몬 관리라는 불편한 점이 존재합니다. (agent 방식의 장점도 물론 존재합니다. 확장성, 대규모 provision을 할 경우 매우 효과적입니다. 대신 서버와 통신하는 부분이 고도화되기 때문에 빠르고 간단한 provision을 할 수 없습니다.
- 자동 배포 환경이 쉽습니다.
- 개발 가능성이 높은 오픈소스 입니다.
- 멱등성을 제공합니다.
- 대상 서버에 별도 에이전트를 설치 하지 않아도 됩니다.
- 설정 파일은 YAML 형식으로 가독성이 좋습니다.
- 700개 이상 대다수의 서버와 네트워크 장비를 지원합니다.
2. Ansible 구성요소
Ansible에는 크게 3가지 요소가 있습니다. Inventory, playbook, module 입니다. 간단히 말해서 어디서(Inventory), 무엇을(playbook), 어떻게(module) 수행할 지를 정의합니다.
module은 playbook이 정의된 파일 내부에서 사용됩니다.
2.1 Inventory
배포 대상을 정리한 파일입니다. 간단히 말해 host ip와 접근방식등을 기록해 놓은 파일입니다. yaml문법을 적용하지 않았고 기본파일은 /etc/ansible/hosts 를 읽게 하거나, 따로 inventory 파일을 만들고 옵션을 주어 동작하게 할 수 있습니다.
- ex)
1
2
3
4
5master ansible_host=10.128.0.37 ansible_user=root
[workers]
worker1 ansible_host=10.128.0.38 ansible_user=root
worker2 ansible_host=10.128.0.39 ansible_user=root2.2 ad-hoc
임시적으로 수행하는 의미로 ansible의 playbook을 작성하여 수행하는 것이 아니라 임시적으로 작업을 수행하는 방법입니다.
2.3 playbook
다수의 서버에 대한 배포시스템의 기본 단위입니다. Inventory에 작성된 서버들을 대상으로 실행 스크립트를 정의한 파일입니다. YAML 문법을사용합니다.
- ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21- hosts: all
become: yes
tasks:
- name: install Docker
yum:
name: docker
state: present
update_cache: true
- name: start Docker
service:
name: docker
enabled: yes
state: started
- name: Stop and disable firewalld.
service:
name: firewalld
state: stopped
enabled: False
...
참고
https://www.ansible.com/
https://ko.wikipedia.org/wiki/Ansible
https://brownbears.tistory.com/358