소개
파워풀한 인프라 자동화 도구인 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' 오류가 발생하면 첫 번째 단계는 작업의 구문 및 실행을 확인하는 것입니다. 다음과 같이 할 수 있습니다.
- Ansible playbook 또는 role 에서 작업 정의를 확인합니다.
- 작업 명령 또는 모듈 매개변수에 오류 또는 오타가 있는지 확인합니다.
- 작업이 관리 노드의 운영 체제 및 소프트웨어 버전과 호환되는지 확인합니다.
--check 옵션을 사용하여 작업의 드라이 런을 수행하고 잠재적인 문제를 식별할 수 있습니다.
ansible-playbook -i inventory.yml playbook.yml --check
작업 실행 디버깅
작업 구문이 올바르다면 'Failed' 오류를 더 자세히 조사하여 작업 실행을 디버깅할 수 있습니다. 다음과 같이 할 수 있습니다.
-vvv또는-vvvv옵션을 사용하여 Ansible 출력의 상세도를 높여 작업 실행에 대한 자세한 정보를 얻습니다.- 작업의 출력 및 오류 메시지를 확인하여 실패 원인에 대한 단서를 찾습니다.
- 관리 노드의 시스템 로그에서 관련 오류 메시지 또는 정보를 검토합니다.
특정 오류 유형 처리
'Failed' 오류 유형에 따라 문제를 해결하고 해결하기 위한 다른 조치를 취해야 할 수 있습니다. 몇 가지 일반적인 오류 유형과 해결 단계는 다음과 같습니다.
- 모듈 실행 오류: 모듈이 관리 노드에서 올바르게 설치 및 구성되었는지 확인합니다.
- 명령 실행 오류: 명령이 유효하고 관리 노드에 명령을 실행할 필요한 권한이 있는지 확인합니다.
- 자원 수정 오류: 작업이 예상대로 자원을 수정하려고 시도하고 관리 노드에 수정을 수행할 필요한 권한이 있는지 확인합니다.
이러한 단계를 따르면 Ansible 에서 'Failed' 오류를 효과적으로 해결하고 해결할 수 있습니다.
요약
이 Ansible 튜토리얼을 마치면 Ansible playbook 에서 발생하는 'unreachable' 및 'failed' 오류를 효과적으로 디버깅하는 방법에 대한 확실한 이해를 얻게 됩니다. Ansible 의 내장 디버깅 도구를 활용하고 이러한 문제의 근본 원인을 파악하며, Ansible 기반 인프라 자동화가 원활하게 작동하도록 예방 및 해결 전략을 구현하는 방법을 배울 것입니다.


