다음을 통해 공유


CSE 오류로 인한 노드 준비 안 됨 오류 문제 해결

이 문서에서는 AKS(Microsoft Azure Kubernetes Service) 클러스터가 상태가 아니며 Succeeded CSE(사용자 지정 스크립트 확장) 오류로 인해 AKS 노드가 노드 풀 내에서 준비되지 않은 시나리오를 해결하는 데 도움이 됩니다.

필수 구성 요소

증상

CSE 오류로 인해 AKS 클러스터 노드는 노드 풀 내에서 준비되지 않으며 AKS 클러스터는 상태가 아닙니다 Succeeded .

원인

kubelet 및 기타 구성 요소를 프로비전할 때 노드 확장 배포가 실패하고 둘 이상의 오류 코드를 반환합니다. 이것이 오류의 가장 일반적인 원인입니다. kubelet을 프로비전할 때 노드 확장 배포가 실패하는지 확인하려면 다음 단계를 수행합니다.

  1. 클러스터의 현재 오류를 더 잘 이해하려면 az aks showaz 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
    
  2. 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를 참조하세요.

추가 정보