Ansible Study 내용 정리

Ryan Kim
5 min readFeb 19, 2023

--

Ansible과 같은 인스턴스 또는 하드웨어 레벨의 IaC 등장 배경 정리

1) 과거의 인프라 관리 방식

  • 과거의 시스템 관리자는 자신이 관리하는 시스템과 해당 시스템에서 상호 작용하는 개발자 및 사용자로부터 격리되어 있었고, 수동으로 서버를 관리하면서, 소프트웨어를 설치하고, 구성을 변경하고, 개별 서버에서 서비스를 관리했음.
  • 사실 PoC를 진행하거나 적은 수의 인스턴스를 관리하면, 여전히 이러한 수동적인 인프라 관리 방식은 많은 스타트업들이 사용하고 있는 중일 것임.
  • 하지만 데이터 센터가 성장하고 호스팅되는 애플리케이션이 복잡해지면서 관리자는 애플리케이션을 지원하는 속도만큼 빠르게 수동 시스템 관리를 확장할 수 없다는 것을 인지.

→ 이것이 서버 프로비저닝 및 구성 관리 도구가 번창하게 된 이유

2) 현대의 인프라 관리 방식

  • 서버 가상화의 등장 → 대규모 인프라 관리를 전면에 내세웠고, 한 명의 관리자(또는 소수의 관리자 팀)가 관리하는 서버의 수는 몇 배로 증가하면서 효율성 증대.
  • 이제 관리자는 모든 서버를 수작업으로 구축, 패치 적용 및 파괴하는 대신 자동으로 또는 최소한의 개입으로 새로운 서버를 가동해줄 필요성 제기.
  • 대규모 IT 구현에는 수백 또는 수천 대의 서버가 필요한 것이 현실 → 현대의 인프라 관리는 대부분의 대규모 환경에서 서버 프로비저닝, 구성 및 해제가 완전히 자동화.
  • 애플리케이션을 실행하는 시스템이 그들이 실행하는 소프트웨어에서 점점 더 복잡하고 필수적인 부분이 됨에 따라, 애플리케이션 개발자들은 자신들의 작업을 운영 인력과 더욱 완벽하게 통합하기 시작함 (CI).

→ 클라우드의 등장: 시스템 관리자의 작업을 클라우드 기업에서 대신함.

  • 많은 기업에서 개발 및 운영 작업이 통합되어 있음.

→ 실제로, 이러한 통합은 현대의 테스트 중심 응용프로그램 (test-driven application) 설계에 대한 요구사항.

3) IaC를 도입하기 위해 구성한 디자인 패턴

  • 많은 개발자들과 시스템 관리자들은 SSH를 통해 서버에 로그인하고, 변경하고, 로그아웃함으로써 서버를 관리
  • 이러한 변경사항 중 일부는 문서화되고 일부는 문서화되지 않음
  • 관리자가 여러 서버를 동일하게 변경해야 하는 경우(예: 구성 파일에서 하나의 값 변경), 관리자는 수동으로 각 서버에 로그인하고 이 변경을 반복
  • 서버 생애 주기 (lifecycle) 중에 변경사항이 한 두 개만 있고 서버가 매우 단순한 경우(하나의 구성과 매우 간단한 방화벽으로 하나의 프로세스만 실행) 모든 변경사항을 철저히 문서화하면 이 프로세스는 문제가 되지 않습니다.
  • 그러나 현존하는 거의 모든 회사의 경우 서버가 훨씬 더 복잡
  • 대부분은 수십, 때로는 수백 개의 서로 다른 애플리케이션 또는 애플리케이션 컨테이너를 실행
  • 대부분의 서버에는 복잡한 방화벽과 수십 개의 조작된 구성 파일 존재
  • 또한 변경 문서를 사용하더라도 수동 프로세스를 수행하면 일반적으로 일부 서버 또는 일부 단계가 잊혀짐
  • 이러한 회사의 관리자가 현재 실행 중인 서버와 동일한 새 서버를 설치하려면 설치된 모든 패키지를 검토하고 구성, 버전 및 설정을 문서화하는 데 많은 시간을 소비해야 하며, 모든 작업을 수동으로 다시 설치하고 업데이트하고 조정하는 데 많은 시간을 할애해야 하고, 새 서버가 이전 서버와 비슷한 방식으로 실행되도록 수행함.
  • 일부 관리자는 셸 스크립트를 사용하여 일정 수준의 본래 상태로 돌릴 수 있지만, 여러 서버의 구성을 동기화하고 새 코드를 배포하는 동안 모든 수정 사항을 올바르게 처리하는 복잡한 셸 스크립트를 아직 보지 못했습니다.
  • 모든 수정 사항을 올바르게 처리하는 셸 스크립트라면, 분명 무척 로직이 복잡할 수 있음.

4) Ansible 소개

  • Ansible은 Command를 잘 알고 있는 개발자와 시스템 관리자가 구축(계속 개선)하여 서버를 과거와 동일하게 반복 가능하고 중앙에서 관리할 수 있는 방식으로 관리할 수 있는 툴을 만드는 것 → 즉, 멱등성(영어로는 Idempotence)을 유지하면서 배포를 관리하는 것이 가능함.
  • Ansible의 가장 큰 강점 중 하나는 shell command를 정확하게 실행할 수 있는 능력으로, 기존 스크립트와 명령어를 가져와 시간이 허락하는 대로 멱등성을 유지하는 playbook으로 변환하는 작업을 할 수 있음
  • CLI에는 익숙하지만 Puppet이나 Chef와 같은 복잡한 도구에는 능숙하지 못한 사람에게 Ansible은 처음 시작할 때 루비 및/또는 사용자 지정 언어 에 대한 약간의 이해가 필요함 (즉, Puppet or Chef 같은 소프트웨어는 별도의 DSL을 갖고 있음.)
  • Ansible은 기본적으로 모든 서버에 변경 사항을 적용함으로써 작동하며, 대부분의 다른 구성 관리 도구와 달리 서버에 추가 소프트웨어를 설치할 필요가 없음(따라서 추가 메모리 설치 공간 및 관리할 데몬이 없음)

5) Reference

  • (참고) Ansible의 SF 소설의 개념 정의: [Noun] (science fiction) A hypothetical device that enables users to communicate instantaneously across great distances; that is, a faster-than-light communication device. → 광학 통신보다도 더 빠르게 먼거리의 사람들이 통신하게 해주는 가상의 장치.

Ryan

--

--

Ryan Kim
Ryan Kim

Responses (1)