오픈소스 IT 자동화 툴 Ansible과 Rundeck

이선재·2023년 1월 4일
0

Ansible과 Rundeck

목록 보기
1/3

이번 포스팅을 통하여 AnsibleRundeck에 대하여 알아보고 두 자동배포 툴의 기능, 특징, 사용법 등을 정리하며 둘의 차이점까지 정리를 해보려고 한다.


Ansible

개요

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)에 버전에 따른 파이썬 설치를 먼저 진행해 주어야 한다.

필요 용어

  1. 제어노드와 관리노드 - 순서대로 server 와 client를 뜻한다.
  2. Playbook - client에 보낼 명령어 모음집으로 스크립트 파일이 이에 속한다.
  3. Inventory - /etc/ansible/hosts/hosts.ini 파일에 원격으로 연결될 client들의 목록이 저장되어있다.

사용법

  1. Ansible Server용 가상머신 구축(제어 노드)
  • ansible 설치
  • ansible 필요 버전에 맞는 python 설치
  • hosts.ini 파일에 관리 대상 IP 기술
  • playbook 속 yaml 파일 요청에 맞게 수정
    • 관리 노드 패스워드 일괄 수정
  • 공개키 설정(/.ssh/authorized_keys)
  1. Ansible Client용 가상머신 구축(관리 노드)
  • ansible 필요 버전에 맞는 python 설치
  • 공개키 설정(/.ssh/authorized_keys)
  1. Ansible을 사용한 제어노드에서 Push

Rundeck

개요

Rundeck은 ansible과 비슷한 Configuration Management Tool 이다. Rundeck은 사고를 줄이고 에스컬레이션을 줄이며 팀의 시간을 많이 소모하는, 시간 소모적이고 반복적인 작업을 완화해주는 Runbook Automation 기술이다.

Rundeck은 큰 조직의 이기종 인프라 및 도구들을 수용할 수 있게 설계되어, 사용되고있는 도구들을 대체하는 것이 아닌 이미 가지고 있던 기존 자동화 기술, 도구들을 재사용하고 필요에 따라 새 기술을 추가하는 형식으로 워크플로를 진행시킨다.

기능

Rundeck의 액세스 제어 기능을 사용하면 전통적으로 작업 외부에 있는 사람들에게 작업 제어를 안전하게 위임할 수 있습니다.

  • 작업 스케쥴러 유지관리 자동화
    • 일일 보고서 등 파일 전송 및 기타 주기적 작업
  • 워크플로 설계 가능
    • 여러 작업을 함께 연결하여 복잡한 워크플로 생성 가능
    • 플러그인 시스템(Ansible, Jenkins)으로 인해 사용자 정의 스크립트 및 다른 도구 기능 확장 가능
  • 프로비저닝
    • 여러 도구들을 조합한 프로비저닝
  • 오케스트레이션
    • 운영자가 및 CI 서버가 배포를 자동으로 트리거 가능
  • 보안 개선
    • 역할 기반 엑세스 제어를 제공하여 사용자, 그룹 단위로 액세스 정의가 가능
  • GUI를 통한 감사 및 로깅
    • 자세한 log로 인하여 문제 해결 및 변경 사항 추적 가능

특징

  • Web GUI(웹 콘솔), CLI 도구 및 웹 API 제공
  • 운영 품질 개선
  • 작업 및 job 스케쥴링 자동화
  • GUI 및 다양한 언어 사용으로 쉬운 설정 가능
  • Java로 작성됨

사용법

Web GUI, API, CLI를 사용하여 Rundeck 작업을 Trigger 할 수 있다.

Project - 하나의 서비스이며, 작업 및 리소스 모음으로 보안 정책 혹은 리소스 모델 등에 대한 access를 제공

Job - Rundeck이 실행할 수 있는 개별 작업으로, 정의하고 실행하는 주체

Step - 플러그인을 추가 가능

Node - Rundeck에서 관리하는 인프라 리소스

  1. 설치
    Rundeck 홈페이지 접속하여 java -jar rundeck-launcher-x.x.x.jar 다운로드 및 실행

  2. 배포 설정

    • 프로젝트 생성
    • job 등록
    • resources.xml 파일에 대상 서버 추가
  3. 동작

    • job 실행
    • ssh 를 통한 대상 서버 접속 및 순차적 shell script 생성 및 호출
    • 배포 시작
    • 지정한 대상 서버를 돌며 반복 작업

Ansible과 Rundeck의 차이점

결론, Rundeck과 Ansible은 사용점이 다르다.
Ansible은 구성관리 즉, 원하는 시스템 상태를 정의하고 적용하는 데 중점을 두게 설계되었다. 이를 통해 시스템의 원하는 스크립트를 정의할 수 있으며 해당 상태에 도달하기 위해 필요한 변경을 자동으로 수행합니다.

Rundeck은 기본적으로 플러그인을 통한 워크플로 자동화 도구이며 기본 구성 관리 기능을 포함하지 않는다. 그러나 Rundeck을 Ansible과 같은 다른 도구와 함께 사용하여 구성 관리를 수행할 수 있다.

profile
지적을 환영하는 인프라 냠냠을 시도하는 취준생

0개의 댓글