Ansible 개요
기존에는 서버 환경을 구성하기 위하여 shell script를 사용하였다. script방식이란 CLI(Command Line Interface) 환경에서 사용하는 방식이다.
하지만 shell script를 이용하여 여러 개의 서버를 관리할 경우 일관성을 유지하는 게 쉽지 않고 , shell script를 이용할 때 배포관리에 대한 문제점이 존재한다.(테스트 환경과 실제 구동환경이 100% 일치할 수 없기 때문에)
이러한 문제점들을 해결하기 위하여 나온 해결법 중 하나가 바로 Infrastructure ad a Code (IaC)이다.
Infrastructure as a Code
https://www.redhat.com/ko/topics/automation/what-is-infrastructure-as-code-iac
환경 배포와 구성을 규격화된 코드로 정의하여 사용하는 방식이다. 바로 프로그래밍의 힘을 빌려서 일관된 환경을 구성하기 위한 방법이다.
바로 인프라의 상태를 코드로 선언하고 이를 모든 서버에 배포함으로써 특정 환경에서 동일하게 유지할 수 있다.
인프라를 코드 화하여 템플릿을 만들고 프로비저닝할 때 이 템플릿을 사용할 수 있는데 이러한 작업은 수동으로 진행할 수도 있고 Red Hat® Ansible Automation® Platform과 같은 자동화 툴을 사용할 수 있다.
Ansible 특징
- Agentless
- 다른 자동화 도구들은 타겟 대상들에 Agent 설치 기반 pull 방식으로 동작한다. 이게 무슨 말인가 하면 쉽게 말해서 관리해야 하는 대상에게 Agent라는 관리 도구를 설치하여 대상의 데이터를 수집(Pull)하여 관리하느냐 아니면 Agent(서버에 접속하는 프로그램)를 설치하지 않고 ssh로 접근하여 파일을 전달하거나 실행하는 Push방식이냐 차이이다. 쉽게 말해 작업 대상이 되는 노드에 별도의 무언가를 설치할 필요가 없습니다. 작업을 명령할 내 로컬에만 Ansible을 설치하면 준비는 끝이 난다.
- 멱등성
- 어떤 연산이 여러 번 수행되더라도 결과가 달라지지 않는 성질을 멱등성이라고 한다.
- Ansible은 동일한 모듈을 반복 실행해도 결과가 동일한 멱등성을 일관되게 수행할 수 있다.
https://www.redhat.com/ko/topics/automation/learning-ansible-tutorial
Ansible 구성 요소
- 제어 노드 ( Control node )
- Ansible을 실행하는 node
- Ansible 제공 프로그램을 이용하여 매니지드 노드를 관리한다.
- Ansible 이 설치된 computer가 제어 노드가 된다.
- 매니지드 노드 ( Managed Node )
- Ansible로 관리하는 서버를 매니지드 노드 또는 호스트(host) 또는 타깃(target)이라 한다.
- 매니지드 노드에는 Ansible이 설치되지 않는다.
- 인벤토리 ( Inventory )
- 매니지드 노드가 등록된 목록이다. 인벤토리 파일은 호스트 파일이라고도 하며 , 인벤토리 파일은 각 매니지드 노드에 대한 IP주소 , 호스트 정보 , 호스트와 연결하기 위한 각종 변수와 같은 정보를 저장한다. 따라서 Ansible을 사용할 때 인벤토리를 가장 먼저 설정해주어야 한다.
- 모듈 ( Module )
- Ansible이 실행하는 코드의 단위이다.
- 각 모듈은 데이터베이스 처리 , 사용자 관리 , 네트워크 장치 관리 등 다양한 용도로 사용
- 단일 모듈을 호출하거나 playbook에서 여러 모듈을 호출할 수 있다.
- 태스크 ( Task )
- Ansible 작업 단위
- 애드훅(Ad-hoc) 명령을 사용하여 단일 작업을 한 번 실행할 수 있다. ansible adhoc 명령은 playbook을 작성하지 않고 command-line에서 직접 앤서블 모듈을 호출해서 실행하는 방식이다.
- 플레이북 ( Play book )
- 순서가 지정된 태스크 목록
- 지정된 작업을 해당 순서로 반복적으로 실행할 수 있다.
- 플레이 북에는 변수와 작업이 포함될 수 있다.
- YAML로 작성한다.
Ansible Playbook
Ansible playbooks 란 Python으로 구현된 오픈 소스로서 서버의 프로비저닝 , sw 배포 등의 자동화를 관리해주는 도구(IaC)이다.
Ansible의 playbooks에 코드로 자동화할 작업들을 작성하여 언제나 일관된 환경을 구성시킬 수 있다. 멱등성을 유지할 수 있다.(일관된 환경을 유지할 수 있다.)
'Python & Automation' 카테고리의 다른 글
[Ansible] 오류 정리 , command-line: line 0: Bad configuration option: (0) | 2022.02.15 |
---|---|
[Ansible] Control node & Managed node 설치 및 ssh 접속 (0) | 2022.02.15 |
Python Study - day 6 (0) | 2022.02.01 |
Python Strudy - day 5 (0) | 2022.01.31 |
Python Study - day 4 (0) | 2022.01.27 |