CSE 오류로 인한 노드 준비 안 됨 오류 문제 해결
이 문서에서는 AKS(Microsoft Azure Kubernetes Service) 클러스터가 상태가 아니며 Succeeded
CSE(사용자 지정 스크립트 확장) 오류로 인해 AKS 노드가 노드 풀 내에서 준비되지 않은 시나리오를 해결하는 데 도움이 됩니다.
필수 구성 요소
증상
CSE 오류로 인해 AKS 클러스터 노드는 노드 풀 내에서 준비되지 않으며 AKS 클러스터는 상태가 아닙니다 Succeeded
.
원인
kubelet 및 기타 구성 요소를 프로비전할 때 노드 확장 배포가 실패하고 둘 이상의 오류 코드를 반환합니다. 이것이 오류의 가장 일반적인 원인입니다. kubelet을 프로비전할 때 노드 확장 배포가 실패하는지 확인하려면 다음 단계를 수행합니다.
클러스터의 현재 오류를 더 잘 이해하려면 az aks show 및 az resource update 명령을 실행하여 디버깅을 설정합니다.
clusterResourceId=$(az aks show \ --resource-group <resource-group-name> --name <cluster-name> --output tsv --query id) az resource update --debug --verbose --ids $clusterResourceId
GitHub의 CSE 도우미 실행 파일의 오류 목록에 대해 명령에서
az resource update
받은 디버깅 출력 및 오류 메시지를 확인합니다.
kubelet의 CSE 배포와 관련된 오류가 있는 경우 여기에 설명된 시나리오가 노드 준비 안 됨 오류의 원인인지 확인했습니다.
일반적으로 종료 코드는 오류를 일으키는 특정 문제를 식별합니다. 예를 들어 "API 서버와 통신할 수 없음" 또는 "인터넷에 연결할 수 없음"과 같은 메시지가 표시됩니다. 또는 종료 코드는 API 네트워크 시간 제한 또는 교체가 필요한 노드 오류를 경고할 수 있습니다.
해결 방법 1: 사용자 지정 DNS 서버가 올바르게 구성되었는지 확인
이름 확인을 올바르게 수행할 수 있도록 DNS(사용자 지정 도메인 이름 시스템) 서버를 설정합니다. 다음 요구 사항을 충족하도록 서버를 구성합니다.
사용자 지정 DNS 서버를 사용하는 경우 네트워크를 통해 서버가 정상 상태이고 연결할 수 있는지 확인합니다.
사용자 지정 DNS 서버에 Azure DNS IP 주소(또는 해당 주소에 대한 전달자)에 필요한 조건부 전달 자가 있는지 확인합니다.
프라이빗 AKS DNS 영역이 Azure에서 호스트되는 경우 사용자 지정 DNS 가상 네트워크에 연결되어 있는지 확인합니다.
사용자 지정 DNS 서버의 IP 주소와 함께 Azure DNS IP 주소를 사용하지 마세요. 이 작업은 권장되지 않습니다.
DNS 설정에서 DNS 서버 대신 IP 주소를 사용하지 않습니다. Azure CLI 명령을 사용하여 VM(가상 머신) 확장 집합 또는 가용성 집합에서 이 상황을 검사 수 있습니다.
VM 확장 집합 노드의 경우 az vmss run-command invoke 명령을 사용합니다.
az vmss run-command invoke \ --resource-group <resource-group-name> \ --name <vm-scale-set-name> \ --command-id RunShellScript \ --instance-id 0 \ --output tsv \ --query "value[0].message" \ --scripts "telnet <dns-ip-address> 53" az vmss run-command invoke \ --resource-group <resource-group-name> \ --name <vm-scale-set-name> \ --instance-id 0 \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "nslookup <api-fqdn> <dns-ip-address>"
VM 가용성 집합 노드의 경우 az vm run-command invoke 명령을 사용합니다.
az vm run-command invoke \ --resource-group <resource-group-name> \ --name <vm-availability-set-name> \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "telnet <dns-ip-address> 53" az vm run-command invoke \ --resource-group <resource-group-name> \ --name <vm-availability-set-name> \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "nslookup <api-fqdn> <dns-ip-address>"
자세한 내용은 Azure 가상 네트워크 및 허브의 리소스에 대한 이름 확인및 사용자 지정 DNS를 사용하여 스포크를 참조하세요.
해결 방법 2: API 네트워크 시간 제한 수정
API 서버에 연결할 수 있고 지연이 적용되지 않는지 확인합니다. 이렇게 하려면 다음과 같이 하십시오.
AKS 서브넷을 확인하여 할당된 NSG(네트워크 보안 그룹)가 API 서버에 대한 송신 트래픽 포트 443을 차단하고 있는지 확인합니다.
노드 자체를 확인하여 노드에 트래픽을 차단하는 다른 NSG가 있는지 확인합니다.
AKS 서브넷에서 할당된 경로 테이블을 확인합니다. 경로 테이블에 NVA(네트워크 가상 어플라이언스) 또는 방화벽이 있는 경우 송신 트래픽에 포트 443을 사용할 수 있는지 확인합니다. 자세한 내용은 AKS에서 클러스터 노드에 대한 송신 트래픽 제어를 참조하세요.
DNS가 이름을 성공적으로 확인하고 API에 연결할 수 있지만 API 시간 제한으로 인해 노드 CSE가 실패한 경우 다음 표와 같이 적절한 작업을 수행합니다.
형식 설정 작업 VM 가용성 집합 kubectl delete 노드 명령을 사용하여 Azure Portal 및 AKS API에서 노드를 삭제한 다음 클러스터를 다시 확장합니다. VM 확장 집합 노드를 이미지로 다시 설치하거나 노드를 삭제한 다음 클러스터를 다시 확장합니다. AKS API 서버에 의해 요청이 제한되는 경우 더 높은 서비스 계층으로 업그레이드합니다. 자세한 내용은 AKS 작동 시간 SLA를 참조하세요.
추가 정보
- 일반적인 문제 해결 단계는 노드 준비 안 됨 오류의 기본 문제 해결을 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기