앤서블 활용 - 인벤토리 이론 및 실습

728x90
반응형

출처 : 앤서블로 시작하는 인프라 자동화, https://www.youtube.com/watch?v=2cT0UeFpteg&t=2s

 

자동화 대상 호스트 선정하기

  • 자동화를 위해 가장 먼저 해야할 일은 대상 호스트 (어떤 시스템의 호스트를 자동화할 것인지) 를 선정하는 것이다.
  • 대상 호스트 선정이 되면 인벤토리를 통해 대상 호스트를 설정한다.

 

인벤토리를 이용한 자동화 대상 호스트 설정

  • 인벤토리 파일은 텍스트 파일이며, 앤서블이 자동화 대상으로 하는 관리 호스트를 지정한다.
  • 인벤토리 파일은 INI 스타일 형식(이름 = 값) 또는 YAML을 포함한 다양한 형식을 사용하여 작성할 수 있다.
  • INI 스타일 인벤토리 파일은 관리 호스트의 호스트명 또는 IP 주소가 한 줄에 하나씩 있는 목록 형태이다.
web1.example.com
web2.example.com
db1.example.com
db2.example.com
192.0.2.42

 

IP를 이용한 인벤토리 파일 생성

etc-image-0

 

ssh로 ansible-server로 접속한다.

 

etc-image-1

mkdir my-ansible
cd my-ansible
ll

 

실습 환경에 있는 자동화 대상 호스트(ansible-server 가상머신)로 인벤토리 파일을 생성하기 위해 my-ansible이라는 디렉토리를 하나 생성한다.

 

etc-image-2

vi inventory
192.168.100.5
192.168.100.6
192.168.100.7

 

vi 에디터로 inventory라는 파일을 만들어 열고 IP 기반의 대상 호스트 목록을 작성하면 인벤토리 작성이 완료된다.

 

etc-image-3

cat inventory

cat 명령어로 확인해보면 우리가 작성한 인벤토리 목록들이 출력된다.

 

 

호스트명을 이용한 인벤토리 파일 생성

etc-image-4

vi /etc/hosts

 

앤서블이 호스트명으로 접근할 수 있도록 IP를 /etc/hosts에 등록한다.

etc-image-5

...
192.168.100.5 tnode1-centos
192.168.100.6 tnode2-ubuntu
192.168.100.7 tnode3-ubuntu

 

이전 장에서 만든 가상 머신 3개의 IP와 호스트명을 입력한다.

 

etc-image-6

vi inventory
tnode1-centos
tnode2-ubuntu
tnode3-ubuntu

 

등록한 호스트명을 이용해 inventory 파일에 위와 같이 설정한다.

 

etc-image-7

cat inventory

 

cat 명령을 입력하면 작성한 inventory의 목록들이 출력된다.

 

etc-image-8

 

학습한 내용을 정리하면 위 그림과 같다.

IP를 이용한 인벤토리 파일을 생성할 때에는 inventory 파일에 관리 노드들의 IP 주소를 작성한다.

호스트명을 이용한 인벤토리 파일을 생성할 때에는 /etc/hosts 에 IP주소와 호스트명을 입력하고, inventory 파일에 호스트명을 작성한다.

 

 

역할에 따른 호스트 그룹 설정

  • 호스트별로 역할(Role)을 주고 Role 별로 특정 작업을 수행해야 하는 경우가 발생한다.
  • 고가용성(High Availability)을 위해 여러 대로 서버를 구성할 경우 인벤토리도 유형별로 호스트를 설정할 수 있다.

 

그룹별 호스트 설정

  • 그룹별로 호스트를 설정하여 사용하면 앤서블 플레이북 실행 시 그룹별로 작업을 처리할 수 있어 효과적이다.
  • 그룹명을 대괄호([ ]) 내에 작성하고 해당 그룹에 속하는 호스트명이나 IP를 한 줄에 하나씩 나열한다.
[webservers]
web1.example.com
web2.example.com
192.0.2.42

[db-servers]
db01.example.com
db02.example.com

 

  • 호스트는 여러 그룹에 있을 수 있다.
  • 실제 호스트를 여러 그룹으로 구성하면 호스트의 역할, 실제 위치, 프로덕션 여부 등에 따라 다양한 방식으로 구성할 수 있다.
  • 특성, 용도 또는 위치에 따라 특정 호스트 집합에 앤서블 플레이를 쉽게 적용할 수 있다.
[webservers]
web1.example.com
web2.example.com
192.0.2.42

[db-servers]
db01.example.com
db02.example.com

[east-datacenter]
web1.example.com
db01.example.com

[west-datacenter]
web2.example.com
db02.example.com

[production]
web1.example.com
web2.example.com
db01.example.com
db02.example.com

[development]
192.0.2.4

 

 

중첩 그룹 정의

  • 앤서블 인벤토리는 호스트 그룹에 기존에 정의한 호스트 그룹을 포함할 수 있다.
  • 호스트 그룹 이름 생성 시 :children 이라는 접미사를 추가하면 된다.
[webservers]
web1.example.com
web2.example.com

[db-servers]
db01.example.com
db02.example.com

[datacenter:children]
webservers
db-servers

 

 

범위를 사용한 호스트 사양 간소화

  • 인벤토리의 호스트 이름 또는 IP 주소를 설정할 때 범위를 지정하여 호스트 인벤토리를 간소화할 수 있다.
  • 숫자 또는 영문자로 범위를 지정할 수 있으며, 대괄호 사이에 시작 구문과 종료 구문을 포함한다.
    • [start:end]
[webservers]
web[1:2].example.com

[db-servers]
db[01:02].example.com

 

  • webservers는 대괄호 사이에 [1:2] 범위를 지정하고, db-servers는 [01:02]로 범위를 지정했다.

 

  • IP 주소 범위를 표현할 때나 여러 호스트의 호스트명을 지정할 때, 혹은 DNS와 같이 호스트의 어미 부분을 범위로 지정하면 IPv6의 범위 설정에도 사용할 수 있다.
# IP 범위 설정 - 192.168.4.0 ~ 192.168.4.255 사이의 IP 범위를 표현
[defaults]
192.168.4.[0:255]

# 호스트명 범위 설정 - com01.example.com ~ com20.example.com의 범위를 표현
[compute]
com[01:20].example.com

# DNS 범위 설정 - a.dns.example.com, b.dns.example.com, c.dns.example.com 을 의미
[dns]
[a:c].dns.example.com

#IPv6 범위 설정 - 2001:db08::a ~ 2001:db08::f 사이의 IPv6 범위를 표현
[ipv6]
2001:db08::[a:f]

 

etc-image-9

cat /etc/ansible/hosts

 

/etc/ansible/hosts의 내용을 보면 인벤토리 사용 예시를 확인할 수 있다.

 

etc-image-10

 

  • 학습한 내용을 정리하면 위 그림과 같다.
  • 그룹별 호스트 : 그룹명을 [ ] 내에 작성하고 해당 그룹에 속하는 호스트명이나 IP를 한 줄에 하나씩 나열해서 그룹별로 호스트를 설정할 수 있다.
  • 중첩 그룹 : 호스트 그룹 이름 생성 시 :children 을 추가하면 호스트 그룹에 기존에 정의한 호스트 그룹을 포함할 수 있다.
  • 범위를 사용한 호스트 사양 간소화 : [ ] 사이에 시작 구문과 종료 구문을 포함해서 작성하면 범위를 지정하여 호스트 인벤토리를 간소화할 수 있다.

 

인벤토리 확인

  • Ansible을 이용하여 나만의 자동화 플레이북을 작성할 수도 있지만, 이미 구성되어 있는 플레이북을 확인하고 실행해야 할 경우도 발생한다.
  • 기존 인벤토리 파일의 내용을 ansible-inventory 명령어를 이용해 확인할 수 있다.

 

인벤토리 그룹 구성

 

etc-image-11

vi inventory

[web]
tnode1-centos
tnode2-ubuntu

[db]
tnode3-ubuntu

[all:children]
web
db

 

앞에서 구성한 인벤토리 파일을 열어 그룹별로 설정한다.

web 그룹에는 tnode1-centos, tnode2-ubuntu 서버를 등록하고, db 그룹에는 tnode3-ubuntu 서버를 등록한다.

all이라는 그룹에 web과 db 그룹을 추가한다.

 

etc-image-12

ansible-inventory -i ./inventory --list

 

ansible-inventory 명령어와 함께 -i 옵션을 사용하면 특정 인벤토리 정보를 JSON 형태로 확인할 수 있다.

 

etc-image-13

ansible-inventory -i ./inventory --graph

 

ansible-inventory 명령어와 --graph 옵션을 이용하면 트리 형태로 인벤토리 정보를 확인할 수 있다.

 

etc-image-14

vi ansible.cfg

[defaults]
inventory = ./inventory

 

현재 프로젝트 디렉토리 안인 /root/my-ansible/ansible.cfg 라는 앤서블 환경 설정 파일을 위 코드처럼 구성한다.

 

etc-image-15
etc-image-16

ansible-inventory --list
ansible-inventory --graph

 

ansible.cfg 파일이 존재하면 ansible-inventory 명령어 사용 시 -i 옵션을 사용하지 않아도 ansible.cfg 설정 파일에 정의된 인벤토리의 호스트 정보를 확인할 수 있다.

 

 

 

728x90
반응형