클라우드 아카이브

[구성관리] Ansible(앤서블) 개념, 배경 그리고 활용 사례 정리 본문

Cloud Native Solution/[IaC] ansible

[구성관리] Ansible(앤서블) 개념, 배경 그리고 활용 사례 정리

Cloud Engineer 2021. 9. 19. 20:32
반응형

개요

시스템 엔지니어로 근무하면서 느낀 점은 서버 및 스토리지 등의 IT 자산 현황을 관리하는 것과 동일한 성격을 가진 서버의 구성이 일관되도록 유지하는게 중요하다는 것입니다. 실제 매달 IT 자산의 변경사항을 최신화하고 관리하고 있으며 특정 보안 취약점 발견 및 hotfix 적용 작업을 진행할 때 작업 대상 서버에 동일한 구성 변경을 진행해야하는게 중요하다는 것을 느꼈습니다.
본 포스팅에서는 앤서블이 생겨난 배경과 정의 그리고 해당 도구를 사용하면 어떤 부분에 도움이 되는지 알아보는 시간을 갖겠습니다.

앤서블이 생긴 배경

과거와 달리 현재에서는 시스템 엔지니어 한 명이 관리해야할 서버가 수백대가 될 정도로 기업의 인프라 규모가 점점 확대되고 있습니다. 관리 대상이 많아지다보니 수백대의 서버에 일괄 구성 또는 패치 적용을 수행할 때 엄청난 시간이 소요되게 되었는데요. 이러한 문제를 해결하기 위해 생겨난 개념이 IaC(Infrastructure as Code)입니다. 해당 개념이 생겨나며 리소스 프로비저닝, 구성 관리, 빌드/배포 자동화 등의 신개념이 생겨났으며 이는 궁극적으로 DevOps나 컨테이너 시스템 등이 발전하는데 큰 공헌을 하게 됩니다. 이 중 구성 관리 역할을 수행하는 앤서블이 생겨나며 시스템 엔지니어는 서버 구성 관리 등의 작업을 코드로 작업하는 동시에 모든 현황까지 자동으로 관리되는 이점을 누리게 됩니다.

앤서블의 정의와 장점 및 특성

앤서블 : 구성 관리를 자동화하는 도구

앤서블은 IaC의 수많은 도구 중 구성 관리의 한 축을 담당하는 프로비저닝 및 구성 관리 도구입니다. 물론 프로비저닝에 앤서블을 주로 사용하지는 않지만, 수많은 서버에 일관성을 유지하며 구성 관리를 하는데는 이상적인 선택지로 여겨지고 있습니다.
앤서블과 동일한 역할을 가지는 도구는 Puppet, Chef 등이 있습니다. 하지만 Puppet이나 Chef는 높은 학습 난이도와 에이전트 기반의 통신 방식 등의 한계로 앤서블보다 인기가 떨어지게 됩니다. 반면에 앤서블은 SSH 통신을 통한 Agentless 방식으로 앤서블 관리 대상 서버에 별도의 에이전트 설치 등의 작업을 할 필요 없이 통신에 필요한 데이터만 저장하면 됩니다. 또한 멱등성(Idempotence)에 의하여 동일한 명령을 여러번 반복 수행하더라도 대상 서버가 같은 상태를 유지하도록 합니다.

앤서블의 장점

앤서블은 중앙 관리 서버와 작업 대상 서버가 SSH 통신을 수행하기 때문에 Agentless한 구성을 할 수 있으며, 이러한 편의성에 따라 중앙 관리 서버에만 앤서블을 설치하면 구성 관리에 필요한 명령어를 쉽게 전달할 수 있다는 접근 용이성의 장점을 가집니다. 또한, 멱등성의 특성으로 동일한 명령어를 여러번 반복해도 대상 서버의 상태는 동일하게 유지합니다.


앤서블은 아래와 같이 작동을 하는데요. 앤서블은 크게 3개의 주요 구성으로 이루어져 있습니다.

인벤토리 : Who (어떤 대상의 서버에)
플레이북 : What (무엇을 수행할 것인지)
모듈 : How (어떻게 수행할 것인지)

앤서블은 인벤토리(Who)에 작업 대상 서버의 IP/DNS 정보 등을 저장하고 플레이북(What)에 명시된 모듈(How)들을 중앙에서 SSH 통신으로 작업을 대신하여 이행합니다.
앤서블을 구성하는 주요 요소

뿐만 아니라 앤서블의 구조화하여 프레임워크 형태로 작업할 수 있도록 도와주는 앤서블 겔럭시(Ansible Galaxy)라는 발전된 도구도 생기게 되었습니다. 해당 도구는 Role 기반의 구성 관리 자동화를 하는데 사용되며 덕분에 앤서블 코드 작성자는 원하는 모듈을 Role 형태로 생성하고 생성된 Role을 중앙 플레이북(기본적으로 main.yml라는 이름으로 사용됨)을 통해 좀더 추상화된 구성 관리를 수행할 수 있게 됩니다. 앤서블 겔럭시는 차후에 포스팅으로 다뤄보겠습니다.

앤서블을 활용한 사례

1. 패스워드 변경

수백대의 서버에 하나하나 접속해서 동일한 패스워드 변경 명령어를 치는 것만큼 힘든 일은 없을 것입니다. 또한, 이러한 반복 작업은 휴먼 에러에 따른 손실이 발생하기 충분하며, 이러한 문제를 방지하기 위해 앤서블 컨트롤러 서버에서 패스워드를 환경 변수로 지정하고 모듈에 변수로 등록하여 관리한다면 패스워드를 잃어버리면서 발생하는 문제점과 비밀번호 유출 등의 문제를 해결할 수 있습니다.

2. 초기 서버 구성 작업

초기에 30대의 서버를 구축할 때, 서버의 호스트이름을 변경하고 코어 덤프를 설정하는 등의 작업을 하나하나 접속해서 진행하는건 정말 힘든 일이죠... 앤서블을 사용하면 이러한 반복 작업을 모듈로 정의하고 인벤토리에 30대의 서버 정보만 등록해준다면 일괄적으로 작업을 자동화할 수 있을 것입니다. 예를 들어 인벤토리와 플레이북 및 모듈을 작성을 다 해놓고 점심 먹기 직전에 해당 작업을 배치해놓고 오후 업무 시작할 때 이를 확인하는 것만큼 행복한 일은 없죠 ㅎㅎ

3. 커널 및 서버 패치 작업

시스템 엔지니어는 매년 정기적으로 2회 이상의 패치 작업을 수행하는데요. 해당 작업 때 커널과 서버 hotfix를 포함한 보안 업데이트를 수행할 때 앤서블을 사용하면 이를 자동화할 수 있습니다. 작업 당일에 하나하나 코드를 치면서 잘 패치가 작동하고 있나 지켜보고 있으면 작업시간 내내 신경을 쓰고 있어야합니다. 하지만, 앤서블을 사용하여 작업 배치를 돌려놓고 수동으로 할 수 밖에 없는 일에 집중하고 있으면서 기다린다면 필요한 일에 신경을 집중할 수 있다는 장점이 있죠.

마무리

점점 시스템 엔지니어가 관리할 대상 서버의 수는 증가하고 있고, VM을 넘어 컨테이너라는 애플리케이션 가상화 방법이 생겨나면서 시스템 엔지니어링의 복잡도는 늘어나고 있습니다. 따라서 불필요한 반복 작업을 자동화하고 필요한 핵심 업무에 집중하기 위해서는 앤서블을 포함하여 IaC 도구에 대한 학습과 이해가 필수라고 생각합니다.
다음 포스팅에서는 앤서블을 이용하여 실제 서버 구성 작업을 수행하는 예제를 다뤄보는 시간을 갖겠습니다.

[출처]
- https://kim-dragon.tistory.com/13
- https://5equal0.tistory.com/entry/Ansible-%EC%95%A4%EC%84%9C%EB%B8%94Ansible-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%84%A4%EC%B9%98%EC%82%AC%EC%9A%A9%EB%B2%95-w-CentOS-76
- https://blog.naver.com/alice_k106/221333208746

Comments