Ansible 'unreachable' 및 'failed' 오류 디버깅 가이드

AnsibleBeginner
지금 연습하기

소개

파워풀한 인프라 자동화 도구인 Ansible 은 플레이북 실행 중에 때때로 'unreachable' 및 'failed' 오류를 만날 수 있습니다. 이 튜토리얼에서는 이러한 문제를 식별, 이해 및 해결하는 과정을 안내하여 안정적이고 효율적인 Ansible 기반 환경을 유지하는 데 도움을 드립니다.

Ansible 에서 'Unreachable' 및 'Failed' 오류 식별

'Unreachable' 오류 이해

Ansible 에서 'Unreachable' 오류는 제어 노드가 관리 노드와 연결을 설정할 수 없는 경우 발생합니다. 이는 다음과 같은 여러 가지 이유로 발생할 수 있습니다.

  • 관리 노드가 켜져 있지 않거나 오프라인 상태입니다.
  • 제어 노드와 관리 노드 간의 SSH 연결이 제대로 구성되지 않았습니다.
  • 방화벽 규칙이 제어 노드와 관리 노드 간의 연결을 차단합니다.
  • 관리 노드의 SSH 서버가 실행되지 않거나 액세스할 수 없습니다.

'Unreachable' 오류를 식별하려면 Ansible 출력에서 다음과 같은 내용을 찾을 수 있습니다.

fatal: [<host>] => {
    "msg": "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh",
    "unreachable": true
}

'Failed' 오류 이해

Ansible 에서 'Failed' 오류는 제어 노드가 관리 노드와 연결을 설정할 수 있지만, 관리 노드에서 작업 실행이 실패하는 경우 발생합니다. 이는 다음과 같은 여러 가지 이유로 발생할 수 있습니다.

  • 작업 명령 또는 모듈이 관리 노드에서 유효하지 않거나 지원되지 않습니다.
  • 작업 명령 또는 모듈이 관리 노드에서 실행 중 오류를 만납니다.
  • 작업이 관리 노드에서 원하는 상태를 달성할 수 없습니다.

'Failed' 오류를 식별하려면 Ansible 출력에서 다음과 같은 내용을 찾을 수 있습니다.

fatal: [<host>]: FAILED! => {
    "changed": false,
    "msg": "Some error message",
    "rc": 1,
    "results": []
}

'Unreachable' 오류 해결

연결 확인

'Unreachable' 오류를 해결하기 위한 첫 번째 단계는 제어 노드가 관리 노드와 연결을 설정할 수 있는지 확인하는 것입니다. 다음 명령어를 사용하여 연결을 테스트할 수 있습니다.

## 관리 노드에 ping 실행
ping <managed_node_ip>

## 관리 노드에 SSH 연결 시도
ssh <managed_node_username>@<managed_node_ip>

ping 또는 SSH 연결이 실패하면 제어 노드와 관리 노드 모두의 네트워크 구성 및 방화벽 설정을 조사해야 합니다.

SSH 구성 확인

'Unreachable' 오류의 또 다른 일반적인 원인은 제어 노드와 관리 노드 간의 SSH 구성 문제입니다. 다음을 확인하여 SSH 구성을 확인할 수 있습니다.

  • SSH 키가 올바르게 구성되었으며 제어 노드가 관리 노드에 액세스할 필요한 권한을 가지고 있는지 확인합니다.
  • Ansible 인벤토리 파일 또는 작업 정의에서 사용자 이름, 포트, 개인 키 파일과 같은 SSH 연결 매개변수를 확인합니다.
  • 관리 노드에서 SSH 서버가 실행되고 제어 노드에서 액세스할 수 있는지 확인합니다.

Ansible 출력 상세화

'Unreachable' 오류에 대한 자세한 정보를 얻으려면 -vvv 또는 -vvvv 옵션을 사용하여 Ansible 출력의 상세도를 높일 수 있습니다. 이렇게 하면 연결 및 인증 프로세스에 대한 자세한 정보가 제공되어 문제의 근본 원인을 식별하는 데 도움이 됩니다.

ansible-playbook -i inventory.yml playbook.yml -vvv

관리 노드 상태 확인

일부 경우 'Unreachable' 오류는 관리 노드가 전원이 꺼져 있거나 응답하지 않는 경우 발생할 수 있습니다. 다음 명령을 사용하여 관리 노드의 상태를 확인할 수 있습니다.

ansible <host_pattern> -m ping

관리 노드가 응답하지 않으면 전원 상태, 네트워크 연결 또는 시스템 로그와 같은 관리 노드 측면의 문제를 조사해야 합니다.

'Failed' 오류 해결

작업 구문 및 실행 확인

'Failed' 오류가 발생하면 첫 번째 단계는 작업의 구문 및 실행을 확인하는 것입니다. 다음과 같이 할 수 있습니다.

  1. Ansible playbook 또는 role 에서 작업 정의를 확인합니다.
  2. 작업 명령 또는 모듈 매개변수에 오류 또는 오타가 있는지 확인합니다.
  3. 작업이 관리 노드의 운영 체제 및 소프트웨어 버전과 호환되는지 확인합니다.

--check 옵션을 사용하여 작업의 드라이 런을 수행하고 잠재적인 문제를 식별할 수 있습니다.

ansible-playbook -i inventory.yml playbook.yml --check

작업 실행 디버깅

작업 구문이 올바르다면 'Failed' 오류를 더 자세히 조사하여 작업 실행을 디버깅할 수 있습니다. 다음과 같이 할 수 있습니다.

  1. -vvv 또는 -vvvv 옵션을 사용하여 Ansible 출력의 상세도를 높여 작업 실행에 대한 자세한 정보를 얻습니다.
  2. 작업의 출력 및 오류 메시지를 확인하여 실패 원인에 대한 단서를 찾습니다.
  3. 관리 노드의 시스템 로그에서 관련 오류 메시지 또는 정보를 검토합니다.

특정 오류 유형 처리

'Failed' 오류 유형에 따라 문제를 해결하고 해결하기 위한 다른 조치를 취해야 할 수 있습니다. 몇 가지 일반적인 오류 유형과 해결 단계는 다음과 같습니다.

  1. 모듈 실행 오류: 모듈이 관리 노드에서 올바르게 설치 및 구성되었는지 확인합니다.
  2. 명령 실행 오류: 명령이 유효하고 관리 노드에 명령을 실행할 필요한 권한이 있는지 확인합니다.
  3. 자원 수정 오류: 작업이 예상대로 자원을 수정하려고 시도하고 관리 노드에 수정을 수행할 필요한 권한이 있는지 확인합니다.

이러한 단계를 따르면 Ansible 에서 'Failed' 오류를 효과적으로 해결하고 해결할 수 있습니다.

요약

이 Ansible 튜토리얼을 마치면 Ansible playbook 에서 발생하는 'unreachable' 및 'failed' 오류를 효과적으로 디버깅하는 방법에 대한 확실한 이해를 얻게 됩니다. Ansible 의 내장 디버깅 도구를 활용하고 이러한 문제의 근본 원인을 파악하며, Ansible 기반 인프라 자동화가 원활하게 작동하도록 예방 및 해결 전략을 구현하는 방법을 배울 것입니다.