Ansible

냐하호후·2022년 7월 4일
0

Ansible이란

앤서블은 여러개의 서버를 효율적으로 관리하기 위해 고안된 환경 구성 자동화 도구이다.
앤서블은 플레이 북이라는 곳에 실행할 구성을 선언해 놓으면, 필요할 때마다 자동으로 실행시킬 수 있는 것이 가장 큰 특징이다.
SHH를 기반으로 원격 서버에 명령을 전달하기 때문에 agent가 필요 없다.

환경 구성 자동화 도구의 역할

리눅스에서 동일한 환경을 구성하기 위해 사용하는 가장 기초적인 방법은 Bash 쉘 스크립트이다.
많은 개발자들은 각종 패키지의 설치, 설정 파일의 수정 등을 위해 일괄 처리 목록을 쉘 스크립트에 나열하고 실행한다. 기술력이 진보함에 따라 인프라 환경도 기존 data center에서 클라우드 환경으로 변화하며 한명의 관리자가 관리해야 하는 거버의 숫자가 증가하게 되었다. 따라서 클러스터에 존재하는 많은 서버들에 동시에, 동일한 환경을 배포해야 하는 상황이 발생했고 Bash 쉘 스크립트의 한계점을 갖게 되었다.

이를 위해 고안된 것이 Infrastructure as a Code이다.
이는 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것을 의미한다. 즉, Infrastructure as a Code의 개념을 내포하는 각종 환경 자동화 도구는 인프라의 상태를 코드로 선언하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 돕는다. 그러한 환경 자동화 도구의 대표적인 예시가 앤서블이며, 앤서블은 환경의 배포뿐만 아니라 서버 클러스터의 체계적인 관리, 확장 가능한 모듈의 사용 등 다양한 측면에서 사용될 수 있다.

Ansible의 장점

  • SSH를 통한 구성으로 에이전트의 설치가 필요 없다
  • 많은 모듈을 보유하고 있다
  • YAML 언어 사용으로 접근성이 높다
  • 멱등성을 일관되게 수행할 수 있다
  • Configuration management: OS,device 혹은 application의 설정을 변경하게 해준다
  • Provisioning: 다양한 서버를 셋업할 수 있게 해준다

Ansible의 단점

  • 시스템 초기 설치 수행은 불가능하다
  • DSL을 통해 로직을 수행해 수시로 문서를 확인해야 한다
  • 변수 사용으로 인해 복잡성이 증가할 수 있다
  • 변수의 값을 확인하기 어렵다
  • 입력/출력/구성 파일간의 형식 일관성이 없다

Ansible의 주요 개념

인벤토리,플레이북,모듈은 어디서 무엇을 어떻게 수행할 지 정의한다.

인벤토리(inventory) - 어디서 수행할 것인가?

inventory는 앤서블에 의해 제어되어 infrastructure as a Code의 대상이 될 서버들의 목록을 정의하는 파일이다. 일반적으로 hosts.ini 파일에 정의해 사용하며, 여러 서버들의 SSH접근, ip포트, 리눅스 사용자 같은 접속 정보를 정의한다.

플레이북(playbook) - 무엇을 수행할 것인가?

플레이북은 yaml 포맷으로 되어있는 파일로서 인벤터리 파일에서 정의된 서버들에서 무엇을 해야할지를 정의한다.

모듈(module) - 어떻게 수행할 것인가?

모듈은 플레이북에서 task가 어떻게 수행될지를 나타내는 요소이다.

티켓 호스트로 실제 작업을 처리하는 단위로 이 모듈이라는 개념을 사용한다. 앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며, 실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수 있다.

그 외의 개념

제어 노드(Control node)

앤서블을 실행하는 노드이다. /usr/bin/ansible이나 /usr/bin/ansible-playbook 명령을 이용하여 제어 노드에서 관리 노드들을 관리합니다. 앤서블이 설치되어 있으면 노트북이나, 서버급 컴퓨터를 제어 노드로 이용할 수 있다.

매니지드 노드(Managed node)

앤서블로 관리하는 서버를 매니지드 노드라고 한다. 매니지드 노드는 호스트라고도 합니다. 매니지드 노드에는 앤서블이 설치 되지 않는다.

태스크(Task)

앤서블의 작업 단위다. 애드훅(ad-hoc)명령을 사용하여 단일 작업을 한 번 실행할 수 있다.

ansible에서의 멱등성이란?

여러번 ansible 툴을 사용하더라도 동일한 결과 값을 나올 수 있도록 제공되는 형태여야 한다.

Ansible 툴의 거의 모든 모듈은 멱등성을 제공한다.

실행 전 ssh 연결 확인

앤서블은 ssh로 제어 노드와 매니지드 노드가 연결된다. 앤서블을 이용해 작업을 진행하기 전에 authorized_keys에 키를 추가하는 것이 좋다.

profile
DONE is better than PERFECT

0개의 댓글