[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 ?

사전적 의미 : 준비, 예비, 설비
미리 정의된 정책이나 서비스를 사용자에게 지원해 주는 것
인프라 자원을 사용자 또는 비즈니스의 요구사항에 맞게 할당, 배치, 배포해서 시스템을 사용할 수 있도록 만들어 놓는 것

참조 파일

  1. /etc/ansible/ansible.cfg - 환경설정 파일
  2. /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, 스케줄링, 가시성 높인 것

환경설정, 배포를 가능하게 함. 리모트 서버에 접속해서 무언가를 시행하는 정책을 기술함.

ansible_playbook

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