[Ansible ] Ansible 이란?

Fabro·2021년 9월 6일
1
post-thumbnail
post-custom-banner

Ansible 이란?

기존엔 동일한 환경의 리눅스를 수정하기 위해 쉘 스크립트에 패키지 설치, 수정된 설정파일 등을 나열하고 스크립트를 실행시키는 것이 일반적이었다. 하지만, 데이터 센터 중심의 인프라 환경에서 클라우드 환경으로 변화하고 관리해야 할 서버의 숫자가 급격하게 증가하는 요즘, 동시에 많은 서버에 동일한 환경을 배포하는 상황이 발생했고 이는 쉘 스크립트로는 불가능했다.

이를 해결하기 위해 나온게 IaC(Infrastructure as a Code)이다. 이 개념은 쉽게 말해 컴퓨터의 인프라 구성을 소프트웨어를 개발하는 것처럼 코드로 작성하는 것을 의미한다. Ansible 또한 IaC 개념이 도입 되어 자동화 도구를 이용하여 인프라의 설정을 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 도와준다.

Ansible 개념

  • Ansible의 정의
    • 오픈소스 IT 자동화 도구
    • 시스템 구성 및 소프트웨어 배포 기능 제공
    • 지속적인 배포와 다운 타임 없는 롤링 업데이트 지원
    • 주요 목적은 단순성과 사용의 용이성
    • 보안과 신뢰성 중점
    • YAML 언어 사용(프로그램을 잘 모르는 사람도 확인 가능)
    • 다양한 유형의 사용자를 위한 디자인
    • 소규모 환경부터 엔터프라이즈 환경까지 지원
    • 분산 구조로 설계
    • Kerberos / LDAP 등 인증 관리 시스템에 연결이 쉬움

  • Ansible의 장점
    • SSH를 통한 구성으로 Agentless
    • YAML 언어 사용으로 높은 접근성
    • 쉽고 단순한 구조로 높은 가독성
    • 변수 기능 사용으로 재사용성 증가
    • 다른 도구보다 훨씬 간소화
    • 다양한 플랫폼 지원

  • Ansible의 단점
    • 다른 도구에 비해 덜 강력함
    • DSL을 통한 로직 수행 -> 수시로 문서 확인이 필요함
    • 변수 사용으로 인한 복잡성 증가
    • 변수 값 확인의 어려움
    • 입력/출력/구성파일 간의 형식 일관성이 없음
    • 때때로 성능 속도가 저하됨

Ansible의 특징

  • Agentless
    • 다른 자동화 도구들은 타겟 대상들에 Agent 설치를 기반으로한 PULL 방식으로 동작하지만 Ansible은 타겟 대상들에 Agent설치를 하지 않고 PUSH 방식으로 동작하기 때문에 기술적, 지리적 제한이 상대적으로 넓다.
  • Idempotency(멱등성)
    - 어떠한 연산이 여러번 수행되어도 그 결과가 달라지지 않는 성질. Ansible에서도 같은 모듈을 반복해서 실행해도 결과가 동일하게 출력됨으로써 멱등성을 일관되게 수행할 수 있다.

Ansible의 간단한 구조

  • 제어 노드(컨트롤 머신)

    • Ansible을 설치하고 실행하는 노드
    • 원격으로 관리 노드 제어
    • 프로젝트 파일의 사본 보관
    • Python v2.6 이상 필요

  • 매니지드 노드(관리 노드)

    • Ansible을 이용해 관리하고자 하는 서버
    • 매니지드 노드에는 Ansible이 설치되지 않음
    • 인벤토리에 나열된 대상
    • 단독, 그룹으로 관리 가능
    • Python v2.4 이상 및 ssh 필요

  • 인벤토리(Inventory)

    • 매니지드 노드 목록
    • 호스트 파일이라고 하기도 함
    • 매니지드 노드에 대한 IP 주소, 호스트 정보, 변수와 같은 정보를 지정
  • 모듈(Module)

    • Anible이 실행하는 코드 단위
    • 데이터베이스 처리, 사용자 관리 등 다양한 용도로 사용
    • 단일 모듈 호출 또는 플레이북에서 여러 모듈 호출도 가능
  • 태스크(Task)

    • Ansible의 작업 단위
    • ad-hoc 명령을 사용하여 단일 작업을 한번에 실행
  • 플레이북(Playbook)

    • 순서가 지정된 태스크 목록을 저장
    • 해당 작업을 순서대로 반복적으로 실행
    • 변수와 작업이 포함될 수 있음
    • YAML로 작성

References

profile
엔지니어 유망주의 곡괭이질
post-custom-banner

2개의 댓글

comment-user-thumbnail
2021년 11월 16일

안녕하세요 작성하신 문서 잘 읽었습니다. 깔끔하게 잘 정리해주셨네요 :)
감사합니다.

답글 달기

깔끔한 정리 감사합니다! 댓글 쓰려고 회원가입 했네요 ㅋㅋ

답글 달기