본문 바로가기

DevOps/Ansible

[Ansible] Ansible 정의

앞서 다루었던 IaC의 종류중 하나인 Ansible을 다뤄보겠다.

https://holywat2r.tistory.com/158

 

[Linux] IaC 개념

IaC개념 코드를 통한 인프라 환경 배포 및 관리 자동화 언어로 원하는 구성을 정의한다. 기존의 시스템 관리 방식은 편집기나 명령어를 이용해서 각각 세팅, 즉 수동관리를 해 왔었는데 한계가

holywat2r.tistory.com


Ansible 정의

  • IaC 도구이며 오픈소스이다. 거의 대부분이 무료이며 레드햇에서 제품으로 판매하고있다.
  • 시스템 구성 및 소프트웨어 배포 기능 제공
  • 지속적인 배포와 다운타임 없는 롤링 업데이트 지원
  • 복잡한 작업도 가능하지만 단순성을 위해 사용하는 경우가 많을 수 있다.
  • 보안과 신뢰성에 중점을 둔다. Ansible은 SSH를 사용한다. SSH를 이용해 원격에서 암호화를 통해 작업을 하니 신뢰성이 좋다. 또한 Kerberos, LDAP등 인증관리 시스템까지 있어 더욱 보안성이 좋다.
  • YAML이라는 언어를 공부해야한다. 다른 필터언어들에 비해 접근하기 쉽다
  • 다양한 유형의 사용자들을 위한 디자인으로 개발자, 엔지니어, 관리자 등이 사용하기 좋게 제공한다
  • 소규모 환경에서 대규모 환경까지 지원
  • 분산 구조로 설계

 

Ansible 장점

  • SSH를 이용하며 윈도우가 대상인경우도 사용이 가능하다. 또한 따로 에이전트를 설치할 필요가 없이 관리 시스템만 설치하면된다.
  • 접근성이 높은 언어 사용
  • 구조가 단순해서 가독성이 높다
  • 사용하는 대부분의 IaC 도구들이 그렇듯 변수기능을 제공하기에 변수를 이용해서 재사용성을 증가시킬 수 있다. 이 변수를 동일한 변수로 사용하는게 아닌 각 관리 대상 마다 다른 변수로도 관리를 할 수 있다.
  • 간소화
  • 리눅스 뿐만 아니라 윈도우도 설정이 가능하다. 심지어 네트워크 장비 세팅때도 사용이 가능

 

Ansible 단점

  • 다른 도구들에 비해 덜 강력하다
  • DSL 방식을 이용하기 때문에 문서를 수시로 봐야할 수 있다. 버전이 조금만 바뀌어도 내용이 많이 바뀔 수 있으며 모듈의 사용 유무가 바뀔수도 있어서 문서 확인이 필수적이다
  • 변수 등록으로 편하기는 하지만 더 복잡해질 수 있다.
  • 변수값을 확인하는게 어렵다. 위의 내용까지는 장점이자 단점일 수 있지만 이건 확실한 단점이다. 실행하는 도중에 변수값을 확인하기 어렵기 때문에 별도의 출력하는 작업을 해야만 변수값을 알 수 있다.
  • 입력값 출력값 설정파일 등이 일관적인 설정을 사용하지 않는다.
  • 때때로 성능 속도가 저하된다.

 

Ansible 구성

  • YAML 언어로 구성된 텍스트 파일 사용. 바이너리 형식이 아닌 텍스트파일이다. 설정파일을 제외하고 모든것이 YAML언어이다. 인벤토리 파일이나 변수 파일의 경우 YAML이 불편하다면 일반변수를 지정하는 형식으로도 가능
  • 플레이(작업)단위. 하나 이상의 작업을 포함하고 있다.

 

Ansible 동작

  • 작업이 작은 코드조각인 모듈을 실행. 여기서 말하는 모듈은 파이썬 모듈과 같은 개념으로 이해하자. 관리하는 컨트롤러에서 엔진을 설치하면 모듈이 같이 설치가 되는데 이걸 원격에서 실행한다.
  • 시스템들의 상태를 확인하면서 상태를 변화시키는 방식을 수행한다. 단순히 명령을 실행하는 것이 아닌 상태를 만들기위해 구성정보를 확인하고 상태를 설정한다. 예를 들면 사용자를 하나 만든다고 가정한다면 USERADD 명령어가아닌 A라는 유저의 어떠한 상태를 요구할 때 A가 존재한다면 OK. 없다면 새로 생성을 한다. 상태를 확인해서 원하는 상태로 구성하는 방식이다.
  • 치명적인 특징이다. 문제가 발생하면 모두 중단된다. 안정적일수도 있지만 치명적일수도 있다. 작업을 10개 해야하는데 1번작업에서 문제가 생기면 나머지 9개의 작업을 모두 설정하지 안흔다. 장점이 될 수도 있지만 단점으로는 1번작업 1개만 문제가 있는데 나머지 9개가 모두 실행되지 않는다면 조금 그렇다.

 

Ansible 아키텍쳐

  • 가상머신을 준비했을 때 처럼 컨트롤머신(VM)이 하나 필요하고 관리할 대상(host1,host2...)가 필요하다

Ansible 컨트롤 머신

  • 컨트롤 노드에서는 반드시 앤서블을 실행해야 하기 때문에 앤서블엔진을 설치하고 실행해야한다
  • 파이썬 기반이기 때문에 파이썬 2.6 이상버전이 필요

 

관리 대상 호스트

  • 컨트롤 머신에서 각종 모듈을 설치하거나 실행하기 때문에 따로 설치할건 없다.
  • 이 대상들은 컨트롤 머신에서 인벤토리라는 파일로 정해둔다. 이 정해진 시스템들만 관리를 한다. 대상을 지정해주는 인벤토리 파일에서 단독 혹은 그룹으로 설정을 해둘 수 있다.
  • 파이썬은 꼭 설치가 되어있어야 한다. 모듈은 컨트롤머신에서 가지고 있겠지만 이걸 원격으로 가져가서 실행하려면 코드해석은 할 수 있어야 하므로 파이썬 설치가 되어있어야 한다. 일반적으로는 리눅스나 윈도우나 파이썬이 기본으로 설치되어 있기 때문에 신경쓰지 않아도 된다. SSH (Winrm) 필요.