[Ansible] What is Ansible ?
Ansible 이란?
Provisioning, Configuration Management, Continuous Delivery, Orchestration 등의 작업들을 위한 자동화 도구. - 구성관리 툴
테스트 환경을 구축하는데 사용되는 도구
Python으로 개발됬으며 YAML로 정의할 수 있고 json으로 통신한다.
수많은 유닉스 계열 시스템에서 실행되며 유닉스 계열 운영 체제 및 마이크로소프트 윈도우의 구성이 가능
* Ansible과 관련된 비슷한 도구 Puppet, Chef, Salt
Ansible의 장점 - agent 설치 불필요 -> 기술적 복잡도 낮아짐, YAML로 사용
개요
지원 운영체제
현존하는 OS 대부분 사용가능함. * Window는 앤서블 Node가 될 수 있지만 Server는 될 수 없다.
what is provision ?
사전적 의미 : 준비, 예비, 설비
미리 정의된 정책이나 서비스를 사용자에게 지원해 주는 것
인프라 자원을 사용자 또는 비즈니스의 요구사항에 맞게 할당, 배치, 배포해서 시스템을 사용할 수 있도록 만들어 놓는 것
참조 파일
- /etc/ansible/ansible.cfg - 환경설정 파일
- /etc/ansible/hosts - 앤서블이 접속하는 호스트
[nginx]
명령어
-i (–inventory-file) 적용될 호스트들에 대한 파일 -m (–module-name) 모듈을 선택할 수 있도록 -k (–ask-pass) 패스워드를 물어보도록 설정 -K (–ask-become-pass) 관리자로 권한 상승 –list-hosts 적용되는 호스트들을 확인
ansible all -i <파일위치> -m -ping -k
* 특정 호스트를 컨트롤 하기 위해 인벤토리를 조합함.
호스트안에 [그룹명]
ex) ansible nginx -m ping -k
ansible nginx -m ping -k -K
장점
상용 환경 시 agent 기반이면 방화벽 이슈, agent 데몬 관리라는 불편한 점이 존재.
(agent방식은 확장성, 대규모 provision을 할 경우 매우 효과적이지만 서버와 통신하는 부분이 고도화되기 때문에 빠르고 간단한 provision을 할 수 없음.)빠른 SSH 통신, provision이 가능
자동 배포 환경이 쉬움
오픈 소스
대부분이 멱등성을 제공
ad-hoc 지원
병렬 프로비저닝 지원
vargrant
jinja2
what is Idempotency(멱등성) ?
여러 번 적용해도 결과는 바뀌지 않음
바뀌는 부분이 있으면 그 부분만 반영
바뀌는 것이 없으면 당연히 배포되어도 바뀌지 않음
shell, command, file module은 보장 안됨
한계
Push방식이라 마스터가 타겟 서버들을 하나씩 돌면서 처리해야함.
시스템의 초기 설치 수행은 불가능 (kickstart, pxe 등 사용해야함)
시스템 모니터링은 지원하지 않음시스템 변경사항은 추적하지 않음
기본 개념
앤서블 코어 동작에 필요한 최소한의 것을 포함하고 있는 패키지
앤서블 타워 GUI, 스케줄링, 가시성 높인 것
환경설정, 배포를 가능하게 함. 리모트 서버에 접속해서 무언가를 시행하는 정책을 기술함.
playbook
간단하게 설정을 관리하고 다수의 머신에 대한 배포 시스템에 대한 기본적인 단위이다.
기존에 존재해왔던 것과 달리 복잡한 어플리케이션 형태의 배포에 매우 적합함.
플레이북은 설정을 정의할 수 있으며, 특정 머신의 집합을 오가며 다른 작업을 수행하도록 수동으로 작업 순서를 설정하는 것도 가능함. (동기/비동기 수행)
소스 컨트롤을 통해 보관하거나 사용자의 설정을 내보내거나 원격 시스템을 구성, 보장되는데 적합함.
각 playbook은 하나/하나 이상의 play을 둠.
play
play는 여러 호스트들에 잘 정의된 ‘Role’과 ‘Task’를 매핑하는 역할
task
ansible 모듈의 호출을 의미
Role을 좀 더 편리하게 관리하기 위해 미리 정의된 yaml파일을 include할 수 있음.
host inventory 파일에 정의한 서버 그룹별로 각각 나누어 provision 할 수 있도록 할 수 있음.
서버당 디렉토리를 나눠서 각각의 설정 정보가 정의된 파일을 읽어 설치하게 함.
ad-hoc
임시적으로 수행하는 의미
playbook을 작성하여 수행하는 것이 아니라 임시적으로 또는 특별하게 어떤 작업을 수행하기 위해서 사용할 수 있는 실행방법
Inventory
리모트 서버에 대한 meta데이터를 기술하는 파일
inventory파일에는 yaml을 적용하지 않음.
기본 파일은 /etc/ansible/hosts를 읽게 하거나, 따로 inventory파일을 만들어 동작하게 할 수 있다.
참고 자료
https://www.javatpoint.com/ansible
https://brownbears.tistory.com/358
https://ashon.github.io/2016/08/10/ansible-vagrant-openstack-jenkins-cicd.html