웹사이트 검색

Ansible에서 정적 및 동적 인벤토리를 사용하는 방법 - 4부


Ansible 시리즈의 4부에서는 정적 및 동적 인벤토리를 사용하여 Ansible에서 호스트 그룹을 정의하는 방법을 설명합니다.

Ansible에서 Ansible 제어 노드에 의해 제어되는 관리 호스트 또는 서버는 설명된 대로 호스트 인벤토리 파일에 정의됩니다. 호스트 인벤토리 파일은 관리 호스트 또는 원격 서버의 호스트 이름 또는 IP 주소로 구성된 텍스트 파일입니다.

관리 호스트는 개별 항목으로 나열되거나 나중에 살펴보겠지만 그룹 이름으로 분류될 수 있습니다. Ansible에는 정적동적이라는 두 가지 유형의 인벤토리 파일이 있습니다.

이들 각각을 살펴보고 어떻게 관리할 수 있는지 살펴보겠습니다. 지금까지는 제어 노드에 Ansible을 이미 설치하고 관리 호스트에 대한 비밀번호 없는 SSH 연결을 구성했다고 가정합니다.

정적 호스트 인벤토리 파일

Ansible에서 정적 인벤토리 파일은 호스트 이름이나 IP 주소를 사용하여 호스트 그룹 아래에 선언된 관리 호스트 목록이 포함된 일반 텍스트 파일입니다.

호스트 그룹 이름은 대괄호(예: [그룹 이름])로 묶입니다. 관리 호스트 항목은 나중에 그룹 이름 아래에 각각 한 줄씩 나열됩니다. 앞서 설명한 대로 호스트는 호스트 이름이나 IP 주소를 사용하여 나열됩니다.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

설명을 위해 정적 재고 파일을 생성하겠습니다.

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

파일을 저장하고 종료합니다.

위의 인벤토리 파일에서 볼 수 있듯이 webserversdatabase_servers라는 2개의 호스트 그룹을 만들었습니다. 또한 위에서 볼 수 있듯이 ': children' 접미사로 표시된 호스트 그룹 그룹을 포함하는 datacenter라는 추가 그룹을 만들었습니다.

Ansible은 또한 호스트 그룹을 그룹 이름 아래에 배치할 수 있도록 허용합니다. 위의 인벤토리 파일에서 webserversdatabase_servers 그룹은 데이터 센터 아래에 배치되었습니다.

참고: 관리 호스트를 호스트 그룹에 배치하는 것이 필수는 아닙니다. 예를 들어 호스트 이름이나 IP 주소를 사용하여 간단히 나열할 수 있습니다.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

이제 호스트 인벤토리 파일을 참조하기 위해 몇 가지 Ansible 명령을 사용해 보겠습니다. 재고 관리의 기본 구문은 다음과 같습니다.

ansible {host-pattern} -i /path/of/inventory/file --list-hosts

예를 들어,

ansible all -i /root/test_labs/hosts --list-hosts

또는 와일드카드 문자 *를 사용하여 'all' 인수를 대체할 수 있습니다.

ansible * -i /root/test_labs/hosts --list-hosts

그룹의 호스트를 나열하려면 호스트 패턴 대신 호스트 그룹을 지정하십시오.

ansible webservers -i /root/test_labs/hosts --list-hosts

동적 호스트 인벤토리 파일

구성에서, 특히 서버를 추가하거나 해제할 때 인벤토리 파일이 계속 변경되는 AWS와 같은 클라우드 설정에서는 인벤토리 파일에 정의된 호스트를 감시하는 것이 정말 어려운 일이 됩니다. 호스트 파일로 돌아가서 IP 주소로 호스트 목록을 업데이트하는 것이 불편해집니다.

그리고 이것이 동적 인벤토리가 작동하는 곳입니다. 그렇다면 동적 인벤토리란 무엇일까요? 동적 인벤토리는 Python, PHP 또는 기타 프로그래밍 언어로 작성된 스크립트입니다. 가상 서버가 중지되었다가 다시 시작되면 IP 주소가 변경되는 AWS와 같은 클라우드 환경에서 유용합니다.

Ansible은 이미 Google Compute Engine, Amazon EC2 인스턴스, OpenStack, RackSpace, cobbler 등과 같은 퍼블릭 클라우드 플랫폼을 위한 인벤토리 스크립트를 개발했습니다.

정적 인벤토리에 비해 동적 인벤토리의 장점은 무엇입니까?
  • 동적 재고는 스크립트를 사용하여 정보를 수집할 때 인적 오류를 줄이는 완벽한 작업을 수행합니다.
  • 재고 관리에는 최소한의 노력이 필요합니다.

선택한 프로그래밍 언어로 사용자 정의 동적 인벤토리를 작성할 수 있습니다. 적절한 옵션이 전달되면 인벤토리는 JSON 형식을 반환해야 합니다.

기존 동적 재고 스크립트 활용

동적 인벤토리를 생성하는 데 사용되는 스크립트는 Ansible이 사용할 수 있도록 실행 가능하게 만들어야 합니다.

동적 인벤토리 스크립트 내의 호스트에 대한 정보를 검색하려면 간단히 실행하세요.

./script --list 

앞에서 지적한 것처럼 출력은 아래 형식의 JSON이어야 합니다.

그룹(예: 웹서버, 데이터베이스_서버)으로 구성된 사전
  • 그룹당 관리 호스트 목록
  • 변수 사전
메타 사전
  • 호스트 및 호스트 변수
샘플 출력
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
결론

이 문서에서는 정적 인벤토리와 동적 인벤토리를 모두 생성하는 방법을 시연했습니다. 요약하면 정적 인벤토리 파일은 숫자와 IP 주소가 상당히 일정하게 유지되는 관리 호스트 또는 원격 노드 목록이 포함된 일반 텍스트 파일입니다.

반면에 새 호스트를 추가하거나 이전 호스트를 해제하면 동적 호스트 파일이 계속 변경됩니다. 새 호스트 시스템을 중지하고 시작할 때 호스트의 IP 주소도 동적입니다. 이 튜토리얼이 유익한 정보가 되었기를 바랍니다.