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

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를 이용한 인벤토리 파일 생성

 

ssh로 ansible-server로 접속한다.

 

mkdir my-ansible
cd my-ansible
ll

 

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

 

vi inventory
192.168.100.5
192.168.100.6
192.168.100.7

 

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

 

cat inventory

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

 

 

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

vi /etc/hosts

 

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

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

 

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

 

vi inventory
tnode1-centos
tnode2-ubuntu
tnode3-ubuntu

 

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

 

cat inventory

 

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

 

 

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

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]

 

cat /etc/ansible/hosts

 

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

 

 

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

 

인벤토리 확인

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

 

인벤토리 그룹 구성

 

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 그룹을 추가한다.

 

ansible-inventory -i ./inventory --list

 

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

 

ansible-inventory -i ./inventory --graph

 

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

 

vi ansible.cfg

[defaults]
inventory = ./inventory

 

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

 

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

 

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

 

 

 

728x90
반응형