Ansible Automation Platform 문제 해결
Ansible Automation Platform 문제 해결
초록
머리말
Ansible Automation Platform 문제 해결 가이드를 사용하여 Ansible Automation Platform 설치 문제를 해결합니다.
Red Hat 문서에 관한 피드백 제공
이 문서를 개선하기 위한 제안이 있거나 오류를 찾을 수 있는 경우 https://access.redhat.com 에서 기술 지원에 문의하여 요청을 열 수 있습니다.
1장. 문제 진단
Ansible Automation Platform 문제 해결을 시작하려면 OpenShift Container Platform에서 must-gather
명령을 사용하거나 VM 기반 설치에서 sos
유틸리티를 사용하여 구성 및 진단 정보를 수집합니다. 이러한 유틸리티의 출력을 지원 케이스에 연결할 수 있습니다.
1.1. must-gather 명령을 사용하여 OpenShift Container Platform에서 Ansible Automation Platform 문제 해결
oc adm must-gather
CLI(명령줄 인터페이스) 명령은 OpenShift Container Platform에 배포된 Ansible Automation Platform 설치에서 정보를 수집합니다. 리소스 정의 및 서비스 로그를 포함하여 문제를 디버깅하는 데 필요한 정보를 수집합니다.
oc adm must-gather
CLI 명령을 실행하면 지원 케이스의 문제를 해결하거나 연결하는 데 사용할 수 있는 수집된 데이터가 포함된 새 디렉터리가 생성됩니다.
OpenShift 환경에서 registry.redhat.io
에 액세스할 수 없고 must-gather
명령을 실행할 수 없는 경우 대신 oc adm inspect
명령을 실행합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있어야 합니다.
프로세스
클러스터에 로그인합니다.
oc login <openshift_url>
클러스터의 액세스 수준에 따라 다음 명령 중 하나를 실행합니다.
전체 클러스터에서
must-gather
를 실행합니다.oc adm must-gather --image=registry.redhat.io/ansible-automation-platform-24/aap-must-gather-rhel8 --dest-dir <dest_dir>
-
--image
는 데이터를 수집하는 이미지를 지정합니다. -
--dest-dir
은 출력의 디렉터리를 지정합니다.
-
클러스터의 특정 네임스페이스에 대해
must-gather
를 실행합니다.oc adm must-gather --image=registry.redhat.io/ansible-automation-platform-24/aap-must-gather-rhel8 --dest-dir <dest_dir> – /usr/bin/ns-gather <namespace>
-
- /usr/bin/ns-gather
는must-gather
데이터 수집을 지정된 네임스페이스로 제한합니다.
-
must-gather
아카이브를 지원 케이스에 연결하려면 먼저 생성된must-gather
디렉터리에서 압축 파일을 생성하고 지원 케이스에 연결합니다.예를 들어 Linux 운영 체제를 사용하는 컴퓨터에서 다음 명령을 실행하여 <
must-gather-local.5421342344627712289/
>를must-gather
디렉터리 이름으로 교체합니다.$ tar cvaf must-gather.tar.gz <must-gather.local.5421342344627712289/>
추가 리소스
-
OpenShift CLI(
oc
) 설치에 대한 자세한 내용은 OpenShift Container Platform 설명서에서 OpenShift CLI 설치를 참조하십시오. -
oc adm inspect
명령 실행에 대한 자세한 내용은 OpenShift Container Platform 설명서의 ocm adm inspect 섹션을 참조하십시오.
1.2. sos 보고서를 생성하여 VM 기반 설치에서 Ansible Automation Platform 문제 해결
sos
유틸리티는 VM 기반 설치의 Ansible Automation Platform에서 구성, 진단 및 문제 해결 데이터를 수집합니다.
sos
유틸리티 설치 및 사용에 대한 자세한 내용은 기술 지원을 위한 sos 보고서 생성 을 참조하십시오.
2장. 자동화 컨트롤러 문제 해결을 위한 리소스
- 자동화 컨트롤러 문제 해결에 대한 자세한 내용은 자동화 컨트롤러 관리 가이드의 자동화 컨트롤러 문제 해결을 참조하십시오.
- 자동화 컨트롤러의 성능 문제 해결에 대한 자세한 내용은 자동화 컨트롤러 관리 가이드에서 자동화 컨트롤러에 대한 성능 문제 해결을 참조하십시오.
3장. 백업 및 복구
4장. 실행 환경
실행 환경의 문제를 해결합니다.
4.1. 문제 - 프라이빗 자동화 허브에서 실행 환경 이미지에 "컨트롤러에서 사용" 옵션을 선택할 수 없습니다
프라이빗 자동화 허브 에서 실행 환경 이미지에 컨트롤러 옵션 사용은 사용할 수 없습니다. 또한 "사용 가능한 컨트롤러가 없음"이라는 오류 메시지가 표시됩니다.
이 문제를 해결하려면 자동화 컨트롤러를 프라이빗 자동화 허브 인스턴스에 연결합니다.
프로세스
프라이빗 자동화 허브에서
/etc/pulp/settings.py
파일을 변경하고 구성에 따라 다음 매개변수 중 하나를 추가합니다.단일 컨트롤러
CONNECTED_ANSIBLE_CONTROLLERS = ['<https://my.controller.node>']
로드 밸런서 뒤에 있는 많은 컨트롤러
CONNECTED_ANSIBLE_CONTROLLERS = ['<https://my.controller.loadbalancer>']
로드 밸런서가 없는 많은 컨트롤러
CONNECTED_ANSIBLE_CONTROLLERS = ['<https://my.controller.node1>', '<https://my.controller2.node2>']
모든 프라이빗 자동화 허브 서비스를 중지합니다.
# systemctl stop pulpcore.service pulpcore-api.service pulpcore-content.service pulpcore-worker@1.service pulpcore-worker@2.service nginx.service redis.service
모든 프라이빗 자동화 허브 서비스를 다시 시작하십시오.
# systemctl start pulpcore.service pulpcore-api.service pulpcore-content.service pulpcore-worker@1.service pulpcore-worker@2.service nginx.service redis.service
검증
- 이제 프라이빗 자동화 허브 에서 Controller에서 Use를 사용할 수 있는지 확인합니다.
5장. 설치
설치 문제를 해결합니다.
5.1. 문제 - Ansible Automation Platform 설치 프로그램과 함께 제공되는 특정 패키지를 찾을 수 없습니다
Ansible Automation Platform 설치 프로그램과 함께 제공되는 특정 패키지를 찾을 수 없거나 "구성에 의해 비활성화됨" 메시지가 표시됩니다.
이 문제를 해결하려면 명령줄에서 subscription-manager
명령을 사용하여 리포지토리를 활성화합니다. 이 문제 해결에 대한 자세한 내용은 Red Hat Ansible Automation Platform 계획 가이드에서 Red Hat Ansible Automation Platform 서브스크립션 연결 섹션을 참조하십시오.
6장. Jobs
작업 문제를 해결합니다.
6.1. 문제 - localhost에 대해 실행할 때 작업이 실패합니다.
Ansible Automation Platform 2 및 컨테이너화된 실행 환경에서 localhost의 사용이 변경되었습니다. 자세한 내용은 Red Hat Ansible Automation Platform 업그레이드 및 마이그레이션 가이드의 AAP 2용 플레이북 변환을 참조하십시오.
6.2. 문제 - "오류!에서 모듈/작업을 해결할 수 없음 오류 메시지로 작업이 실패합니다.
"ERROR! could't resolve module/action 'module name'이라는 오류 메시지와 함께 작업이 실패합니다. 이는 종종 철자가 잘못되었거나, 컬렉션이 없거나, 잘못된 모듈 경로를 나타냅니다.
이 오류는 모듈과 연결된 컬렉션이 실행 환경에서 누락된 경우 발생할 수 있습니다.
권장되는 해결 방법은 사용자 정의 실행 환경을 만들고 해당 실행 환경 내에 필요한 컬렉션을 추가하는 것입니다. 실행 환경 생성에 대한 자세한 내용은 실행 환경 생성 및 소비에서 Ansible 빌더 사용을 참조하십시오.
또는 다음 단계를 완료할 수 있습니다.
프로세스
-
프로젝트 리포지토리 내에
컬렉션
폴더를 생성합니다. collections
폴더 내에requirements.yml
파일을 추가하고 컬렉션을 추가합니다.collections: - <collection_name>
6.3. 문제 - "권한 에스컬레이션 프롬프트를 기다리는 시간 제한 (12s) 오류 메시지로 작업이 실패합니다.
이 오류는 시간 초과 값이 너무 작으면 작업이 완료되기 전에 중지될 때 발생할 수 있습니다. 연결 플러그인의 기본 시간 초과 값은 10
입니다.
이 문제를 해결하려면 다음 절차 중 하나를 완료하여 시간 초과 값을 늘립니다.
다음 변경 사항은 자동화 컨트롤러의 모든 작업에 영향을 미칩니다. 특정 프로젝트에 시간 초과 값을 사용하려면 프로젝트 디렉터리의 루트에 ansible.cfg
파일을 추가하고 timeout
매개 변수 값을 해당 ansible.cfg
파일에 추가합니다.
자동화 컨트롤러 UI에서 ANSIBLE_TIMEOUT을 환경 변수로 추가
- 자동화 컨트롤러로 이동합니다.
- 탐색 패널에서 → 를 선택합니다.
추가 환경 변수 에서 다음을 추가합니다.
{ "ANSIBLE_TIMEOUT": 60 }
CLI를 사용하여 ansible.cfg 파일의 [defaults] 섹션에 시간 초과 값을 추가합니다.
/etc/ansible/ansible.cfg
파일을 편집하고 다음을 추가합니다.[defaults] timeout = 60
시간 초과를 사용하여 임시 명령 실행
명령줄에서 애드혹 플레이북을 실행하려면
ansible-playbook
명령에--timeout
플래그를 추가합니다. 예를 들면 다음과 같습니다.# ansible-playbook --timeout=60 <your_playbook.yml>
추가 리소스
-
DEFAULT_TIMEOUT
구성 설정에 대한 자세한 내용은 Ansible 커뮤니티 설명서의 DEFAULT_TIMEOUT 을 참조하십시오.
6.4. 문제 - 자동화 컨트롤러의 작업이 보류 중 상태로 유지됨
자동화 컨트롤러에서 작업을 시작한 후에는 작업이 보류 중 상태로 유지되며 시작되지 않습니다.
작업이 보류 중 상태에서 중단될 수 있는 몇 가지 이유가 있습니다. 이 문제 해결에 대한 자세한 내용은 Playbook이 자동화 컨트롤러 관리 가이드에서 보류 중 상태로 유지를 참조하십시오.
보류 중인 모든 작업 취소
다음 명령을 실행하여 보류 중인 모든 작업을 나열합니다.
# awx-manage shell_plus
>>> UnifiedJob.objects.filter(status='pending')
다음 명령을 실행하여 보류 중인 모든 작업을 취소합니다.
>>> UnifiedJob.objects.filter(status='pending').update(status='canceled')
작업 ID를 사용하여 단일 작업 취소
특정 작업을 취소하려면 다음 명령을 실행하여 <
job_id
>를 취소할 작업 ID로 교체합니다.# awx-manage shell_plus
>>> UnifiedJob.objects.filter(id=_<job_id>_).update(status='canceled')
6.5. 문제 - 프라이빗 자동화 허브의 작업이 실패하고 "denied: requested access to the resource is denied, unauthorized: Insufficient permissions" 오류 메시지와 함께 실패합니다.
프라이빗 자동화 허브에서 실행 환경을 사용할 때 "denied: requested access to the resource is denied, unauthorized: Insufficient permissions" 오류 메시지와 함께 작업이 실패합니다.
이 문제는 프라이빗 자동화 허브가 암호 또는 토큰으로 보호되고 레지스트리 인증 정보가 실행 환경에 할당되지 않은 경우 발생합니다.
프로세스
- 자동화 컨트롤러로 이동합니다.
- 탐색 패널에서 → 선택합니다.
- 실패한 작업 템플릿에 할당된 실행 환경을 클릭합니다.
- 클릭합니다.
- 프라이빗 자동화 허브의 적절한 레지스트리 인증 정보를 실행 환경에 할당합니다.
추가 리소스
- 자동화 컨트롤러에서 새 인증 정보를 생성하는 방법에 대한 자세한 내용은 자동화 컨트롤러 사용자 가이드에서 새 인증 정보 생성 을 참조하십시오.
7장. 로그인
로그인 문제를 해결합니다.
7.1. 문제 - 자동화 컨트롤러 UI에 로그인하면 "잘못된 사용자 이름 또는 암호가 잘못되었습니다. 다시 시도하십시오."
자동화 컨트롤러 UI에 로그인하려고 하면 로그인이 실패하고 "잘못된 사용자 이름 또는 암호" 오류 메시지가 표시됩니다. 다시 시도하십시오."
이 문제가 발생할 수 있는 한 가지 이유는 동시에 로그인한 최대 세션 수 값이 0
인 경우입니다. 최대 동시 로그인 세션 값은 장치당 사용자당 허용되는 최대 세션 수를 결정합니다. 이 값이 0
이면 사용자가 자동화 컨트롤러에 로그인할 수 없습니다.
기본값은 -1
이며 허용되는 최대 세션을 비활성화합니다. 즉, 부과된 제한 없이 여러 세션을 보유할 수 있습니다.
프로세스
root 사용자로 명령줄에서 다음 명령을 실행하여
SESSIONS_PER_USER
변수를-1
로 설정하여 허용되는 최대 세션을 비활성화합니다.# echo "settings.SESSIONS_PER_USER = -1" | awx-manage shell_plus --quiet
검증
- 자동화 컨트롤러에 성공적으로 로그인할 수 있는지 확인합니다.
추가 리소스
- 컨트롤러 노드 CLI 설치 및 사용에 대한 자세한 내용은 AWX 명령줄 인터페이스 및 AWX 관리 유틸리티를 참조하십시오.
- 세션 제한에 대한 자세한 내용은 자동화 컨트롤러 관리 가이드의 세션 제한을 참조하십시오.
8장. 네트워킹
네트워킹 문제를 해결합니다.
8.1. 문제 - Ansible Automation Platform 컨테이너에 사용되는 기본 서브넷이 내부 네트워크와 충돌합니다.
Ansible Automation Platform 컨테이너에 사용된 기본 서브넷은 내부 네트워크와 충돌하므로 "호스트 경로 없음" 오류가 발생합니다.
이 문제를 해결하려면 기본 Podman 네트워킹 플러그인에서 사용하는 CIDR과 충돌하지 않도록 기본 classless 도메인 간 라우팅(CIDR) 값을 업데이트합니다.
프로세스
모든 컨트롤러 및 하이브리드 노드에서 다음 명령을 실행하여
custom.py
라는 파일을 생성합니다.# touch /etc/tower/conf.d/custom.py
# chmod 640 /etc/tower/conf.d/custom.py
# chown root:awx /etc/tower/conf.d/custom.py
/etc/tower/conf.d/custom.py
파일에 다음을 추가합니다.DEFAULT_CONTAINER_RUN_OPTIONS = ['--network', 'slirp4netns:enable_ipv6=true,cidr=192.0.2.0/24']
-
192.0.2.0/24
는 이 예제에서 새 CIDR의 값입니다.
-
모든 컨트롤러 및 하이브리드 노드에서 자동화 컨트롤러 서비스를 중지하고 시작합니다.
# automation-controller-service stop
# automation-controller-service start
모든 컨테이너는 새 CIDR에서 시작됩니다.
9장. 플레이북
자동화 콘텐츠를 사용하여 플레이북을 대화형으로 해결할 수 있습니다. 자동화 콘텐츠가 있는 플레이북 문제 해결에 대한 자세한 내용은 Automation 콘텐츠 탐색 가이드의 자동화 콘텐츠를 사용하여 Ansible 콘텐츠 문제 해결을 참조하십시오.
10장. 서브스크립션
자동화 컨트롤러 서브스크립션을 규정 준수로 유지하는 방법에 대한 자세한 내용은 Automation Controller 사용자 가이드의 문제 해결: 서브스크립션 준수 관리를 참조하십시오.