이번 포스팅을 통하여 Ansible과 Rundeck에 대하여 알아보고 두 자동배포 툴의 기능, 특징, 사용법 등을 정리하며 둘의 차이점까지 정리를 해보려고 한다.
Ansible은 Configuration Management 오픈소스 IT 자동화 툴로서, 서버를 효율적으로 관리하기 위해 고안된 환경 구성 자동화 도구이다. ansible은 레드헷에 인수되어 개발 중이다. 환경 자동화 툴 중 사용이 많이 된다고 한다.
이 전에 IaC의 개념을 알면 좋다. 이는, Infrastructure as Code
의 약어로 기존에는 엔지니어들이 수동으로 접속하여 진행했던 인프라 환경 설치, 관리, 구축, 프로비저닝을 스크립트 기반 자동으로 진행해주는 프로세스이다.
애플리케이션을 설치하고 구성하기 위해서는 먼저 인프라를 준비해야한다. 수백, 수천대의 서버를 수동으로 프로비저닝 하는 것은 불가능하기 때문에 Ansible
을 사용하면 확장성과 정확성을 모두 잡을 수 있는 것이다.
Ansible은 이런 IaC을 지향하는 오픈소스 기반의 자동화 관리 도구 이다. Server/Client 구조로 작동을 하며 Ansible Server 에서 자동 구축 및 관리 하려는 Client로 명령(스크립트)을 Push를 하는 형식으로 작동한다.
프로비저닝, 구성관리, 애플리케이션 배포, 오케스트레이션, 기타 여러 수동 IT 프로세스를 자동화 해준다. 다음과 같은 기능을 가진다.
1. agentless
명령을 하달하는 주체가 agent가 아닌 ssh
이기 때문에 agent를 설치할 필요가 없어졌다. 이렇듯 agent 설치 단계를 제거함으로서 인프라 구축 자동화에 큰 이점을 주었다고.
2. 접근 용이성
Playbook을 사용하여 자동화 스크립트를 PUSH를 한다. 이때 Playbook에 스크립트가 YAML 파일
형식으로 작성되어 있기 때문에 접근이 용이하다.
3. 멱등성
멱등성이란 행동을 반복하여도 결과의 변화가 없음을 말하게 되는데, ansible이 ssh를 통한 명령 하달을 반복적으로 진행해도 같은 결과물을 가지므로 멱등성을 가지고 있다.
+이후 테스트 해볼 점) 실제로 첫 번째 명령을 통한 설치가 완료되었을 때 한번 더 진행하게 되면 client가 모든 것을 삭제하고 다시 설치를 하는지 아니면 중복되는 것을 체크하여 변경 혹은 같다면 응당하는 메시지를 보내게 될지.
4. Node 별 python version
제어노드(ansible server)와 관리노드(ansible client)에 버전에 따른 파이썬 설치를 먼저 진행해 주어야 한다.
Rundeck은 ansible과 비슷한 Configuration Management Tool 이다. Rundeck은 사고를 줄이고 에스컬레이션을 줄이며 팀의 시간을 많이 소모하는, 시간 소모적이고 반복적인 작업을 완화해주는 Runbook Automation 기술이다.
Rundeck은 큰 조직의 이기종 인프라 및 도구들을 수용할 수 있게 설계되어, 사용되고있는 도구들을 대체하는 것이 아닌 이미 가지고 있던 기존 자동화 기술, 도구들을 재사용하고 필요에 따라 새 기술을 추가하는 형식으로 워크플로를 진행시킨다.
Rundeck의 액세스 제어 기능을 사용하면 전통적으로 작업 외부에 있는 사람들에게 작업 제어를 안전하게 위임할 수 있습니다.
Web GUI, API, CLI를 사용하여 Rundeck 작업을 Trigger 할 수 있다.
Project - 하나의 서비스이며, 작업 및 리소스 모음으로 보안 정책 혹은 리소스 모델 등에 대한 access를 제공
Job - Rundeck이 실행할 수 있는 개별 작업으로, 정의하고 실행하는 주체
Step - 플러그인을 추가 가능
Node - Rundeck에서 관리하는 인프라 리소스
설치
Rundeck 홈페이지 접속하여 java -jar rundeck-launcher-x.x.x.jar 다운로드 및 실행
배포 설정
동작
결론, Rundeck과 Ansible은 사용점이 다르다.
Ansible은 구성관리 즉, 원하는 시스템 상태를 정의하고 적용하는 데 중점을 두게 설계되었다. 이를 통해 시스템의 원하는 스크립트를 정의할 수 있으며 해당 상태에 도달하기 위해 필요한 변경을 자동으로 수행합니다.
Rundeck은 기본적으로 플러그인을 통한 워크플로 자동화 도구이며 기본 구성 관리 기능을 포함하지 않는다. 그러나 Rundeck을 Ansible과 같은 다른 도구와 함께 사용하여 구성 관리를 수행할 수 있다.