안녕하세요, 2024년 첫 시작을 가시다님 스터디(a101)와 함께 앤서블로 시작하는 인프라 자동화로 열게 되었습니다.
작년에 한빛 출판사에서 베타 리딩을 한 적 있었는데, 다른 분들과 함께 깊게 공부해 볼 수 있는 좋은 기회인 것 같아서 신청하고 공부하게 됐습니다.
1. 왜 앤서블인가?
문득 왜 앤서블을 배워야 하는지 목표가 있어야 공부가 더 재밌을 것 같아 조금 더 찾아보게 됐습니다.
Cloud Native Interactive Landscape를 확인하더라도, 자동화 구성 관리 도구가 Ansible을 제외하더라도 잘 알려진 Chef, Puppet, Terraform, Salt, Cloudformation 등 다양한 IaC 툴이 있고 성격도 다른데 왜 Ansible을 공부를 해야 하는 것인지 궁금해졌습니다.
CNCF Landscape에도 위와 같이 많은 도구들이 있지만, Ansible을 관리 운영하는 Redhat 소속 직원들 역시도
고객사의 모든 요건들을 충족하는 황금 망치는 없다고 경고하고 있습니다. (The law of the hammer 황금 망치 법칙, 친숙한 도구에 과도하게 의존하는 인지 편향)
그럼에도 앤서블을 왜 사용해야 하냐는 질문에 답은 앤서블을 통한 컨테이너 빌드, 클러스터 관리, 애플리케이션 수명 관리 등이 가능하다는 점을 들어야 겠습니다.
- 컨테이너 빌드: 서버 관리와 애플리케이션 배포는 자동화 도구들, 예를 들어 CFEngine, Puppet, Chef, Ansible을 통해 더 효율적으로 이루어지고 있습니다. 컨테이너화는 다양한 개발 스택을 관리하는 데 도움이 되며, Ansible은 Docker를 사용하여 컨테이너를 구축하고 관리하는 데 유용합니다. Ansible-bender 및 Buildah와 같은 도구를 통해 Ansible은 컨테이너 이미지 구축에도 효과적입니다.
- 클러스터 관리: Kubernetes 클러스터는 자동으로 생성되지 않으며, 여러 클러스터를 관리하는 것은 복잡할 수 있습니다. Ansible은 Kubernetes 클러스터를 구축하고 관리하는 데 사용할 수 있으며, Kubespray와 같은 프로젝트는 Ansible을 사용합니다. Ansible은 다양한 클라우드 제공업체 간의 클러스터 관리를 단순화하고, 필요에 따라 다른 유용한 도구와 통합됩니다.
- 애플리케이션 수명주기: Ansible은 Kubernetes 내의 애플리케이션 관리에도 적용됩니다.
Operator SDK를 사용하여 구축된 Kubernetes 연산자는 Ansible을 사용하여 애플리케이션의 수명주기 관리를 수행할 수 있습니다. 이는 개발자와 운영팀이 복잡한 언어 대신 Ansible을 사용하여 쉽게 관리할 수 있음을 의미합니다.
2. 앤서블이란 무엇인가?
본격적으로 앤서블에 대해서 알아보겠습니다.
앤서블은 프로비저닝, 구성 관리, 오케스트레이션 및 배포를 자동화할 수 있는 오픈소스 플랫폼입니다.
마이클 대한 (Michael Dehaan)이 Puppet Labs에서 근무 시 많은 자동화 작업을 수행했는데, 그때마다 좀 더 쉽게 자동화할 수 없을까 해서 만들었다고 하고 현재는 레드햇이 인수, 개발 관리하고 있습니다.
3. 앤서블의 특징
앤서블은 다음과 같은 특징을 갖습니다.
1) 에이전트가 없다.
기존의 상태 저장 및 자체 관리형 인프라 관리 도구인 Chef, Puppet 등과 달리 Agent가 없습니다.
SSH로 실행되기 때문에, 보다 쉬운 관리가 가능하다는 특징이 있으며 해당 내용은 Ansible의 큰 장점입니다.
(Puppet을 통한 노드의 Agent 배포는 다소 시간이 소요될 수 있습니다.)
2) 멱등성
Idempotence, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
이에 대한 재밌는 비유와 이미지가 있어서 가져와 봤습니다.
"코드가 동일한 입력 데이터로 여러 번 실행되어도 바람직하지 않은 결과를 초래하지 않을 때"
이를 멱등성이 있다고 합니다.
첫 번째 경우에는 작업이 중복인지 알 수 없기 때문에, 우리가 그 작업을 3번 실행하면, $300을 보내게 됩니다.
두 번째 경우에는 코드가 처음 실행될 때 "우리는 아직 그 돈을 보내지 않았습니다. 지금 송금할게요"라고 할 수 있고, 그 후 모든 실행에서는 "이미 송금이 완료되었으니 입금하지 않겠습니다"라고 할 수 있습니다. 따라서 Run 작업을 무한대로 실행해도 동일한 결과를 얻을 수 있습니다.
3) 쉬운 사용법과 다양한 모듈 제공
앤서블은 100가지 핵심 모듈들을 가지고 있고, YAML 문법을 통해서 플레이북을 작성할 수 있습니다.
참조 링크 : https://www.ansible.com/blog/how-useful-is-ansible-in-a-cloud-native-kubernetes-environment
https://zafulabs.com/2019/06/19/humans-can-code-too-idempotency/
4. 앤서블의 구성
앤서블은 앤서블 코어가 설치되고, 플레이북을 작성해서 사용할 수 있는 제어 노드와 플레이북이 실행되어 애플리케이션의 설치 혹은 가상 서버 생성등과 같은 작업이 진행되는 관리 노드로 나눠지게 됩니다.
이때, 제어 노드에만 앤서블이 설치되며, 각 관리 노드에는 ssh로 접속이 가능합니다.
그림 순서대로 제어 노드에 배치되는
- 인벤토리 (Inventory):
- 이것은 제어 노드가 관리하는 관리 노드들의 목록을 담고 있는 파일입니다.
- 앤서블은 인벤토리에 정의된 관리 노드에만 접근할 수 있습니다.
- 인벤토리 파일에서는 관리 노드들을 그룹으로 분류할 수 있으며, 예시로 웹 서버와 데이터베이스 서버가 각각 다른 그룹으로 구분되어 있습니다.
- 모듈 (Modules):
- 앤서블은 관리 노드에 작업을 수행할 때 SSH를 통해 연결한 후 '앤서블 모듈'이라 불리는 스크립트를 푸시하여 작업을 수행합니다.
- 대부분의 모듈은 원하는 시스템 상태를 설명하는 매개변수를 받아들이며, 모듈 실행 후에는 제거됩니다.
- 플러그인 (Plugins):
- 플러그인은 앤서블의 핵심 기능을 강화하며, 제어 노드에서 실행됩니다.
- 이들은 데이터 변환, 로그 출력, 인벤토리 연결 등과 같은 앤서블의 핵심 기능에 대한 옵션과 확장 기능을 제공합니다.
- 플레이북 (Playbook):
- 플레이북은 관리 노드에서 수행할 작업들을 YAML 문법으로 순서대로 작성한 파일입니다.
- 앤서블은 플레이북을 사용하여 관리 노드에 SSH로 접근하고 작업을 수행합니다.
- 플레이북은 사용자가 직접 작성하며 자동화를 완성하는 가장 중요한 파일입니다.
'DevOps > Ansible' 카테고리의 다른 글
[Ansible 101] 핸들러 및 작업 실패 처리 (0) | 2024.01.21 |
---|---|
[Ansible 101] 조건문 (0) | 2024.01.21 |
[Ansible 101] 반복문 (2) | 2024.01.21 |
[Ansible 101 스터디] 앤서블 1주차 기본 실습 (변수) (6) | 2024.01.14 |
[Ansible 101 스터디] 앤서블 1주차 기본 실습 (인벤토리, 플레이북) (1) | 2024.01.14 |