티스토리 뷰




1. Ansible 이란?

Ansible은 IaC (Infrastructure as Code)를 지향하는 자동화 관리 도구로 오픈 소스 기반으로 제작되었다.
Ansible을 구동하는 모듈 및 라이브러리는 Python을 기반으로 하며, YAML 포맷을 기반으로 플레이북을 실행시켜서 원하는 자동화를 구현하거나, Ad hoc 모드로 모듈을 실행시켜 상태를 조회해 볼 수 있다.
또한 기존 Chef/Puppet 처럼 기존에 알려진 IaC 솔루션들이 Target Host들에 Agent를 반드시 설치해야 하는 것과 비교해서, Ansible은 SSH를 기반으로 Target Host에 Agentless방식으로 자동화를 구성 관리한다.
이러한 동작방식은 기존의 Pull방식에서 , Agentless 기반의 Push 방식으로 동작하기 때문에 설치와 구성관리가 편리한 장점을 가지고 있다.
이러한 장점에 기반으로 다양한 서버, 네트워크 ,스토리지 , 가상화 솔루션들을 코드 기반으로 관리하기 편의성을 가지고 있다.
현재 Ansible version 2.7 (2019-05 기준)을 지원하고 있다.

IaC (Infrastructure as Code)
기존 인프라의 유연성이 떨어지는 스크립트 또는 수동의 CLI기반의 시스템 프로비저닝 방식에서 탈피하여, 시스템을 프로그래밍 코드 기반으로 자동 설치 및 구축, 관리, 프로비저닝을 구현하는 IT 인프라 구성 프로세스를 말한다. 이러한 이유로 IaC를 프로그래밍이 가능한 인프라로 정의하기도 한다.IaC를 기반으로 하는 도구들은 매우 다양하며, 동작방식도 다양한 형태를 띄고 있다.Chef,Puppet, SaltStack, Ansible, Terraform 등이 IaC도구로 널리 알려져 있으며, 이러한 도구들은 IT 인프라를 프로비져닝 하는 데 널리 사용되고 있다.


2.Ansible 주요 특징

  • Agentless
일반적으로 대부분의 IaC 도구들이 자동화 대상 장비들에 Agent를 기반으로 구성하는 Pull 방식에 대비하여, Ansible은 자동화 대상 장비들에 Agentless 기반의 Push 동작 방식으로 동작한다.
대상 장비에 Agent를 설치하지 않기 때문에, 데이터센터 또는 IT인프라 담당자들이 상대적으로 거부감이 덜하게 되고, SSH기반으로 대부분 동작하기 때문에 기술적 접근성도 용이하다. 이러한 특징 때문에 기존 IaC 도구들이 주로 한정된 서버 영역에서 국한적으로 제공되었던 반면에, Ansible은 매우 폭넓은 영역에서 사용되는 중요한 계기가 되었다.

  • 접근 용이성
Ansible은 Python기반으로 제작되었지만, Python에 대한 전문지식이 없어도 사용할 수 있을 만큼 기술 진입장벽이 낮은 편이다.
실제 Playbook을 실행하기 위해, YAML을 사용하지만 가독성에서 큰 어려움이 없기 때문에 DevOps 진입도 쉬운점이 넓게 사용되는데 큰 역할을 하게 되었다.

  • 다양한 모듈 지원
버전이 지속적으로 패치되고 , 넓은 사용자 층을 확보하게 되면서 많은 모듈들을 지원하고 있다.
앞서 소개한 IaC 도구들 가운데 ,Ansible 보다 훨씬 오래된 역사를 가지고 있는 툴들 보다도 많은 커뮤니티와 많은 지원 모듈과 플러그 인을 가지고 있는 것도 굉장히 큰 장점이다.
다양한 클라우드 인프라, 가상화, 서버 운영체제, 플랫폼 및 네트워크 장비와 스토리지 장비까지 매우 폭넓은 모듈들을 버전이 업그레이드 될 때 마다 확장하고 있다.


  • 멱등성
멱등성 ( idempotence )은 연산을 여러번 수행하더라도 결과가 달라지지 않는 성질을 말한다.
Ansible에서는 YAML 스크립트 파일로 작성된 Playbook을 여러 차례 반복을 해도 결과를 동일하게 출력시켜, 결과가 달라지지 않도록 구성되어, 멱등성을 일관되게 수행할 수 있다.
이것은 실제 IT담당자가 자동화 도구를 실행할 때 오동작이나 설정 오류등으로 문제가 발생하는 것에 대해 우려할 수 있는 부분들을 해소할 수 있도록 도와 준다.
Ansible을 실행하게 되면 Task를 수행하기 전에 모듈의 상태를 먼저 체크하고, Task를 수행 할 때도 추가된 것과 변화된 부분에 대한 정보들을 제공하여 일관성있는 결과를 제공할 수 있다.


3.설치

Ansible Control Node 요구 사항

  • Ansible
  • Python 2.6 이상
  • 하드웨어 제약 조건 없음.
  • 운영체제 : 리눅스/유닉스 (현재 윈도우는 컨트롤 노드로 지원하지 않음)

Ansible 관리대상 노드 요구 사항

운영체제 - 리눅스
  • Python 2.4이상
  • Python-simplejson (RHEL 5버전일 경우 해당)
  • libselinux=python (SELinux 활성화 되어 있을 경우)

운영체제 - 윈도우
  • Remote Powershell 지원
설치는 다양한 환경에서 대부분 제공하며, python 만 사전 설치되어 있으면 간단하게 구동이 가능하다.

CentOS
sudo yum install ansible

Ubuntu
sudo apt-get install ansible

Mac OS
brew install ansible

설치 이후 버전확인
~ $ ansible --version
ansible 2.7.10
  config file = None
  configured module search path = [u'/Users/woohyungchoi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.10 (default, Feb 22 2019, 21:17:52) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]

설치 참조 URL



'DevOps_Programming > Ansible' 카테고리의 다른 글

Cisco NXOS Ansible 활용 - 유용한 Adhoc 명령  (0) 2019.06.15
Ansible 구조의 이해  (0) 2019.06.14
Vagrant기반 Ansible 구성  (0) 2019.05.10
공지사항