Ansible이란 무엇인가?
Ansible은 파이썬 기반으로 작성되었으며, module과 명령어를 사용하여 여러 서버에 동시에 명령을 실행할 수 있는 자동화 엔진이다. 또한 ansible playbook 이라는 스크립트를 통해 IT 어플리케이션 인프라스트럭쳐를 정확하게 묘사할 수 있는 언어이다. Ansible의 주요 목적은 IT 장비를 관리를 자동화하는 것이다. 원래 무료 오픈소스 프로젝트였으나 레드햇이 인수하였다. 그래서 RHEL에서는 서브스크립션을 구매해야 사용할 수 있다. 하지만 커뮤니티 버전도 있기 때문에 무료로 사용할수도 있다. 그 둘의 차이는 크게 없으며 기술지원을 받을 수 있느냐의 차이가 크다.
Ansible Playbook이란?
Ansible play는 ansible을 사용한 한 줄의 명령이라고 볼 수 있다. 이러한 play를 모아서 스크립트화 한 것이 ansible playbook이다. 즉, 하나이상의 play를 포함하는 일련의 명령을 모은 스크립트 파일을 playbook 라고 부른다. 이러한 스크립트는 사람이 읽을 수 있는 형식으로 애플리케이션 환경의 모든 측면을 설명/기록 가능하다.
이 Aansible playbook은 Ansible의 문법으로 만들어지며, script form은 yaml을 사용한다. 따라서 읽기/쓰기가 쉽고 일반 텍스트이므로 소스코드처럼 취급하고 git등의 버전 제어 프로그램을 사용하여 관리할 수 있다.
Ansible 작동 목표와 원리
Ansible은 시스템을 원하는 상태로 표현하여 필요한 변경만 수행하여 시스템을 원하는 상태로 만드는 것이 Ansible의 목표이다. 각 task에서는 특정 항목이 "특정 상태"에 있는지 확인한다. 예를들어 그 상태라고 하는것은 예를들어 특정 파일이 있거나, 마운트가 되어있거나, 서비스가 중단되어 있는 등등 그냥 어떤 상태이다. ansible은 이렇게 상태를 확인한 후 시스템이 그 상태가 아니면, task에서 해당 상태로 만들도록 실행한다. 만약 시스템이 이미 해당 상태라면, 아무것도 수행하지 않는다. task가 실패하는 경우 default 설정으로, 실패가 발생한 호스트에 대한 나머지 플레이북은 중단된다.
Ansible의 강력한 기능
1. 간편함 – 추가 설치가 필요 없음
관리하려는 서버에 ansible용 agent등을 설치할 필요가 없다. Ansible은 openssh또는 winrm 등을 사용하여 관리할 서버에 ansible을 실행할 수 있다. 따라서 서버에 대한 뭔가 승인절차나 추가절차가 없다. 따라서 보안적으로도 취약점이 생길 가능성이 적다. 그리고 빠르게 바로 사용할 수 있고 매우 효율적이다.
2. 명령에 집중하지 않고 상태(결과)를 집중
Ansible은 어떤 결과를 얻기 위해서 “특정 명령을 실행해라” 라고 하는 것이 아닌, 특정 "상태"로 만들도록 한다. 시스템을 "특정 상태"로 만드므로, 자동화와 유지보수에 있어 더 명확하고 편리하다.
3. 다양한 플랫폼 지원
ansible은 물리,가상,클라우드,컨테이너 환경 모두를 지원하며, OS도 Linux, Unix, Windows 모두 지원한다. 또한 네트워크장치등 특정한 하드웨어도 지원한다.
4. 다른 시스템과 쉽게 통합할 수 있음
ansible은 사용자 환경에 있는 HP SA, Puppet, Jenkins, Redhat Satellite 등의 시스템을 활용하고 ansible 워크플로우로 통합할 수 있다. 즉 다른 3rd 프로그램과 호환이 되는 것이 많다. 물론 정확히 확인해보아야 할 것이다.
5. 보안기능
ansible은 리눅스의 SELINUX를 그대로 사용하며, playbook이나 비밀번호 파일들을 암호호화하는 ansible-vault 기능을 지원한다.
Ansible 의 사용 예시
구성 관리 집중화 |
구성파일 관리, 배포 중앙집중화, 애플리케이션 라이프사이클을 중앙에서 관리할 수 있다. |
워크플로우 자동화 |
업무를 관리하고 사용하는데 있어 자동화할 수 있다. |
네트워크 자동화 |
네트워크 설정 작업을 자동화할 수 있다. |
애플리케이션 배포 |
제어 노드에서 하나의 명령으로 호스트 모두에게 한번에 프로그램이나 파일을 전달할 수 있다. |
프로비저닝 |
PXE booting + kickstart + Ansible로 간단하게 대규모 OS설치, 환경구축 작업을 수행할 수 있다. |
효과적인 협업 지원 |
한 코드를 여럿이서 작업하는 개발 등을 효과적으로 할 수 있게 할 수 있다. |
애플리케이션 |
전체 에플리케이션 라이프사이클을 오케스트레이션할 수 있다. |
Ansible architecture
API |
특정 프로그램과 연결할 수 있는 인터페이스. Ansible 사이트에서 사용할 수 있는 목록들을 확인할 수 있다. |
CMDB |
상태를 저장하는 DB이다. 서버 목록, 서버 구성정보등의 상태를 저장한다. 인벤토리에서 관리대상을 체크하고 그 관리대상의 정보를 CMDB에 저장하고 활용한다. |
제어 노드 (ansible automation engine) |
ansible 엔진이 설치되고 명령/playbook을 실행하는 서버(또는 노트북, 데스크탑 등). 단순히 명령을 전달하고 관리만 하므로 고사양을 요구하지는 않는다. |
관리 호스트 (hosts) |
맨 오른쪽에 HOSTS(서버), NETWORKING(네트워크장비)를 의미한다. 제어 노드에 의해 관리되는 장비들이다. 정적/동적 인벤토리에 해당 리스트가 나열된다. |
Plugins |
ansible에 추가할 수 있는 코드나 기능이다. 기능확장이라고 생각하면 된다. 인벤토리 관련 플러그인, 접속 관련 플러그인 등 여러가지가 있다. 이런것들을 추가하여 ansible을 새로운 용도와 플랫폼에 맞게 조정할 수 있다. |
Inventory |
ansible에서는 inventory라고 하여, ansible에서 관리할 서버 리스트를 사용한다. 이러한 inventory는 2가지 방식으로 사용할 수 있다. 정적 인벤토리는 사용자가 직접 ansible로 관리할 서버 리스트를 작성하여 ansible을 사용하는 것이다. 동적 인벤토리는 ansible로 관리할 서버 리스트가 현재 서버 상태에 따라 자동으로 변경되는 방식 사용하는 것이다. 이것을 구현하려면 여러 개발언어를 사용해야 한다. |
Modules |
ansible playbook은 각각의 작업 단위를 task로 구분한다. 각 task는 특정 인수와 함께 module을 실행한다. module은 작은 코드를 가진 소형 프로그램이며, python, powershell 또는 기타 언어로 작성된다. 일반적으로 각 모듈들은 "명령어" 라고 생각하면 편하다. 이러한 모듈은 특정 명령, 소프트웨어 설치, API호출 등 여러가지 기능이 있다. ansible play를 실행하면 이러한 module을 push 하여 사용하고, push된 module은 ansible에서 작업이 완료되면 제거된다. |
'Ansible' 카테고리의 다른 글
6장. ansible에서 모듈 사용하기 (0) | 2021.02.19 |
---|---|
5장. ad-hoc 명령 (0) | 2021.02.19 |
4장. ansible.cfg 파일 톺아보기 (0) | 2021.02.06 |
3장. Inventory 파일 (2) | 2021.02.06 |
2장. Ansible 설치하기 (0) | 2021.02.06 |