뭐라도 끄적이는 BLOG

Ansible 이란 본문

Infra/Ansible

Ansible 이란

Drawhale 2023. 6. 29. 01:00

Ansible

Ansible은 애플리케이션 및 IT인프라를 자동화 할 수 있는 도구이다. Ansible을 사용하여 호스트를 구성하고, 소프트웨어를 배포하고, 지속적인 배포 및 다운 타임 없는 롤링 업데이트 등 작업을 조율할 수 있다.

Ansible의 주요 목적은 간결성과 사용 용이성이다. 시스템 관리에 어떠한 시스템이든 상관 없고 시스템 관리에 특별한 에이전트가 필요하지는 않지만 파이썬을 이용해서 작업들을 진행해야 되기 때문에 컨트롤 노드든 관리 노드든 파이썬이 설치되어 있어야 한다.

Ansible의 장점

  • SSH기반으로 원격 노드에 에이전트를 설치할 필요가 없다.
  • YAML을 사용하기 때문에 쉽게 배울 수 있다.
  • 플레이북 구조는 간단하고 명확하게 구조화 되어 있다.
  • 변수 기능을 사용하여 같은 작업에 대해서 다른 구성으로 쉽게 구성할 수 있다.

Ansible의 단점

  • 프로그래밍 언어를 기반으로 하는 도구보다 덜 강력하다.
  • 변수 등록은 기본적인 기능조차도 요구되기 때문에 더 쉬운 작업을 더 복잡하게 만들수 있다.
  • 플레이 내 변수 값을 확인하기가 어렵다.
  • 입력, 출력 구성 파일 형식간 일관성이 없다.
  • 때때로 성능이 저하된다.

Ansible 용어

컨트롤 노드, 관리 노드, 플러그인, 인벤토리, 모듈, 작업, 플레이북

컨트롤 노드

Ansible이 설치된 모든 호스트를 말한다. 컨트롤 노드에서는 ansible 또는 ansible-playbook 명령을 이용하여 작업을 실행할 수 있다. Python이 설치된 모든 호스트를 제어 노드로 사용할 수 있다. Windows 호스트는 컨트롤 노드로 사용할 수 없다.

관리 노드

컨트롤 머신에서 접근하여 모듈을 설치하고, 원격의 명령을 실행하는 작업을 수행하는 시스템이다. 쉽게 말해 컨트롤 머신에 관리되는 시스템을 의미한다. Ansible은 관리 노드에 설치되지 않는다.

플러그인

Ansible은 핵심 기능을 확장할 수 있도록 다양한 플러그인을 제공한다.

  • Action, Become, Cache, Callback, Cliconf, Connection, Httpapi, Inventory, Netconf, Lookup, Shell, Strategy, Vars

인벤토리

논리적으로 구성된 관리 노드의 목록으로, 관리 노드에 대한 호스트 이름이나 IP 주소와 같은 정보를 지정한다. 여러 관리 노드를 그룹으로 조직화 할수 있고, 중첩 그룹을 사용할 수 있다.

모듈

모듈은 Ansible을 실행하는 Python 코드 단위를 말한다. 모듈은 호스트에 패키지를 설치 및 관리, 데이터베이스의 사용자를 관리, 네트워크 장치의 VLAN 인터페이스를 관리할 수 있는 등 약 3000개의 모듈이 존재한다. 하나의 모듈은 하나의 작업을 실행할 수 있고, 플레이북을 이용해 여러 모듈을 선언해 여러 작업을 수행할 수 있다.

작업(Task)

Ansible의 작업 실행 단위를 Task라고 한다. 하나의 모듈이 하나의 작업이 되며, Ad-hoc 명령을 통해 단일 작업을 실행하거나, 플레이북을 작성해 여러작업을 실행할 수 있다.

Ad-hoc 명령

ansible 명령을 이용하여 단일 작업을 실행할 수 있다.

플레이

특정 관리 노드를 대상으로한 순서가 지정된 작업 목록을 말한다.

플레이북

관리 노드에서 실행할 모듈을 인자와 함께 정의한 파일을 말한다. YAML로 작성되며, Ansible의 핵심부분이다. ansible-playbook 명령을 이용해 플레이북을 실행할 수 있다.

모듈 < 작업 < 플레이 < 플레이북
작업 (task-모듈을 통해서)

Ansible 아키텍처

시스템 유형으로 컨트롤 머신과 관리 노드가 있다. 컨트롤 노드에 Ansible이 설치되며, 관리 노드들은 컨트롤 머신에 의해 유지되거나 관리된다. 관리 노드들은 인벤토리 파일에 나열되어야 하며, 여기에는 호스트이름 또는 IP 주소로 저장되어 있다. 인벤토리에 각 관리 노드들의 기능별로 그룹화 시켜서 저장도 가능하다.

시스템 관리자는 컨트롤 노드에 로그인하여 플레이북 또는 원격 전송 명령을 사용하여 관리 노드를 제어할 수 있고, 이 때 인벤토리에 저장된 관리 노드들을 패턴 형식으로 지정하여 제어할 수 있다. 컨트롤 노드는 보안과 신뢰성을 위하여 기본적으로 SSH를 사용하여 관리 노드와 통신한다.

플레이북에서 참조한 모듈은 관리 노드에 복사되며, 관리 노드에서 실행된다. 사용되는 모듈의 종류로는 코어(core) 모듈과, 사용자 지정 모듈 등이 있다.

Ansible 설치 방법 링크

Installing Ansible — Ansible Documentation

 

Installing Ansible — Ansible Documentation

If you are testing new features, fixing bugs, or otherwise working with the development team on changes to the core code, you can install and run the source from GitHub. Note You should only install and run the devel branch if you are modifying ansible-cor

docs.ansible.com

※참고: 컨트롤 노드와 관리노드 SSH 인증키 설정

공개키를 생성하여 관리노드의 `~/.ssh/autorized_keys` 파일에 추가하여 제어 할수 있도록 설정하는 부분이다.

인증키 생성

SSH authentication-key가 없는 경우 ssh-keygen 명령을 이용하여 key를 생성한다.

 

ssh-keygen

공개키를 관리노드에 복사

생성한 인증키의 공개키를 관리노드의 특정 사용자의 홈 디렉터리에 설치하기 위해 `ssh-copy-id`명령을 사용한다. `ssh-copy-id`명령은 관리노드에 지정된 사용자의 `~/.ssh/authorized_keys` 파일에 ID정보를 추가한다.

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-host
user@remote-hosts's password:

 

Basic Concepts — Ansible Documentation

These concepts are common to all uses of Ansible, including network automation. You need to understand them to use Ansible for network automation. This basic introduction provides the background you need to follow the examples in this guide. The machine fr

docs.ansible.com

 

반응형

'Infra > Ansible' 카테고리의 다른 글

Ansible Inventory  (0) 2023.07.23
Ansible 구성 파일  (0) 2023.07.02