Problemen met het Kubernetes-rekenproces oplossen
In dit artikel leert u hoe u veelvoorkomende workloadfouten op de Kubernetes-berekening kunt oplossen. Veelvoorkomende fouten zijn trainingstaken en eindpuntfouten.
Gids voor deductie
De veelvoorkomende Kubernetes-eindpuntfouten op Kubernetes-rekenkracht zijn onderverdeeld in twee bereiken: rekenbereik en clusterbereik. De rekenbereikfouten zijn gerelateerd aan het rekendoel, zoals het rekendoel is niet gevonden of het rekendoel is niet toegankelijk. De clusterbereikfouten zijn gerelateerd aan het onderliggende Kubernetes-cluster, zoals het cluster zelf is niet bereikbaar of het cluster is niet gevonden.
Kubernetes-rekenfouten
Hier volgen veelvoorkomende fouttypen in het rekenbereik die kunnen optreden bij het gebruik van Kubernetes-rekenkracht om online-eindpunten en onlineimplementaties te maken voor realtime modeldeductie. U kunt problemen ondervinden door de gekoppelde secties voor richtlijnen te volgen:
- ERROR: GenericComputeError
- ERROR: ComputeNotFound
- ERROR: ComputeNotAccessible
- FOUT: InvalidComputeInformation
- FOUT: InvalidComputeNoKubernetesConfiguration
ERROR: GenericComputeError
Het foutbericht ziet er als volgt uit:
Failed to get compute information.
Deze fout moet optreden wanneer het systeem de rekengegevens van het Kubernetes-cluster niet kan ophalen. U kunt de volgende items controleren om het probleem op te lossen:
- Controleer de Status van het Kubernetes-cluster. Als het cluster niet wordt uitgevoerd, moet u eerst het cluster starten.
- Controleer de status van het Kubernetes-cluster.
- U kunt het statuscontrolerapport van het cluster bekijken voor eventuele problemen, bijvoorbeeld als het cluster niet bereikbaar is.
- U kunt naar de werkruimteportal gaan om de rekenstatus te controleren.
- Controleer of de instantietypen juist zijn. U kunt de ondersteunde exemplaartypen controleren in de Kubernetes-rekendocumentatie .
- Probeer de berekening indien van toepassing los te koppelen en opnieuw aan de werkruimte te koppelen.
Notitie
Als u problemen ondervindt bij het opnieuw koppelen, moet u ervoor zorgen dat u opnieuw verbinding maakt met dezelfde configuratie als eerder losgekoppelde berekeningen, zoals dezelfde rekennaam en naamruimte, anders kunnen er andere fouten optreden.
ERROR: ComputeNotFound
Het foutbericht is als volgt:
Cannot find Kubernetes compute.
Deze fout moet optreden wanneer:
- Het systeem kan de berekening niet vinden bij het maken/bijwerken van een nieuw online-eindpunt/-implementatie.
- De berekening van bestaande online-eindpunten/implementaties is verwijderd.
U kunt de volgende items controleren om het probleem op te lossen:
- Probeer het eindpunt en de implementatie opnieuw te maken.
- Probeer de berekening los te koppelen en opnieuw aan de werkruimte te koppelen. Let op meer notities over opnieuw koppelen.
ERROR: ComputeNotAccessible
Het foutbericht is als volgt:
The Kubernetes compute is not accessible.
Deze fout moet optreden wanneer de MSI van de werkruimte (beheerde identiteit) geen toegang heeft tot het AKS-cluster. U kunt controleren of de MSI van de werkruimte toegang heeft tot de AKS. Zo niet, kunt u dit document volgen om de toegang en identiteit te beheren.
FOUT: InvalidComputeInformation
Het foutbericht is als volgt:
The compute information is invalid.
Er is een validatieproces voor rekendoel bij het implementeren van modellen in uw Kubernetes-cluster. Deze fout moet optreden wanneer de rekengegevens ongeldig zijn. Het rekendoel is bijvoorbeeld niet gevonden of de configuratie van de Azure Machine Learning-extensie is bijgewerkt in uw Kubernetes-cluster.
U kunt de volgende items controleren om het probleem op te lossen:
- Controleer of het rekendoel dat u hebt gebruikt, juist is en bestaat in uw werkruimte.
- Probeer de berekening los te koppelen en opnieuw aan de werkruimte te koppelen. Let op meer notities over opnieuw koppelen.
FOUT: InvalidComputeNoKubernetesConfiguration
Het foutbericht is als volgt:
The compute kubeconfig is invalid.
Deze fout moet optreden wanneer het systeem geen configuratie kan vinden om verbinding te maken met het cluster, zoals:
- Voor het Arc-Kubernetes-cluster is er geen Azure Relay-configuratie gevonden.
- Voor een AKS-cluster is er geen AKS-configuratie gevonden.
Als u de configuratie van de rekenverbinding in uw cluster opnieuw wilt opbouwen, kunt u proberen de berekening los te koppelen en opnieuw aan de werkruimte te koppelen. Let op meer notities over opnieuw koppelen.
Kubernetes-clusterfout
Hieronder ziet u een lijst met fouttypen in clusterbereik die u kunt tegenkomen bij het gebruik van Kubernetes-rekenkracht voor het maken van online-eindpunten en online implementaties voor realtime modeldeductie. Dit kan lastig zijn door de richtlijn te volgen:
- ERROR: GenericClusterError
- ERROR: ClusterNotReachable
- FOUT: Cluster niet gevonden
- FOUT: ClusterServiceNotFound
- FOUT: ClusterUnauthorized
ERROR: GenericClusterError
Het foutbericht is als volgt:
Failed to connect to Kubernetes cluster: <message>
Deze fout moet optreden wanneer het systeem om een onbekende reden geen verbinding kan maken met het Kubernetes-cluster. U kunt de volgende items controleren om het probleem op te lossen:
Voor AKS-clusters:
- Controleer of het AKS-cluster is afgesloten.
- Als het cluster niet wordt uitgevoerd, moet u eerst het cluster starten.
- Controleer of het AKS-cluster het geselecteerde netwerk heeft ingeschakeld met behulp van geautoriseerde IP-bereiken.
- Als het AKS-cluster geautoriseerde IP-bereiken heeft ingeschakeld, controleert u of alle IP-bereiken van het Azure Machine Learning-besturingsvlak zijn ingeschakeld voor het AKS-cluster. Zie dit document voor meer informatie.
Voor een AKS-cluster of een Kubernetes-cluster met Azure Arc:
- Controleer of de Kubernetes API-server toegankelijk is door de opdracht in het cluster uit te voeren
kubectl
.
ERROR: ClusterNotReachable
Het foutbericht is als volgt:
The Kubernetes cluster is not reachable.
Deze fout moet optreden wanneer het systeem geen verbinding kan maken met een cluster. U kunt de volgende items controleren om het probleem op te lossen:
Voor AKS-clusters:
- Controleer of het AKS-cluster is afgesloten.
- Als het cluster niet wordt uitgevoerd, moet u eerst het cluster starten.
Voor een AKS-cluster of een Kubernetes-cluster met Azure Arc:
- Controleer of de Kubernetes API-server toegankelijk is door de opdracht in het cluster uit te voeren
kubectl
.
FOUT: Cluster niet gevonden
Het foutbericht is als volgt:
Cannot found Kubernetes cluster.
Deze fout moet optreden wanneer het systeem het AKS/Arc-Kubernetes-cluster niet kan vinden.
U kunt de volgende items controleren om het probleem op te lossen:
- Controleer eerst de clusterresource-id in Azure Portal om te controleren of de Kubernetes-clusterresource nog steeds bestaat en normaal wordt uitgevoerd.
- Als het cluster bestaat en wordt uitgevoerd, kunt u proberen de berekening los te koppelen en opnieuw aan de werkruimte te koppelen. Let op meer notities over opnieuw koppelen.
FOUT: ClusterServiceNotFound
Het foutbericht is als volgt:
AzureML extension service not found in cluster.
Deze fout moet optreden wanneer de toegangsbeheerservice in extensieeigendom niet voldoende back-endpods heeft.
U kunt:
- Open het cluster en controleer de status van de service
azureml-ingress-nginx-controller
en de back-endpod onder deazureml
naamruimte. - Als het cluster geen actieve back-endpods heeft, controleert u de reden door de pod te beschrijven. Als de pod bijvoorbeeld niet voldoende resources heeft om uit te voeren, kunt u sommige pods verwijderen om voldoende resources vrij te maken voor de toegangsbeheerobjectpod.
FOUT: ClusterUnauthorized
Het foutbericht is als volgt:
Request to Kubernetes cluster unauthorized.
Deze fout mag alleen optreden in het ta-cluster, wat betekent dat het toegangstoken is verlopen tijdens de implementatie.
U kunt het na enkele minuten opnieuw proberen.
Tip
Meer probleemoplossingsgids voor veelvoorkomende fouten bij het maken/bijwerken van de Kubernetes-online-eindpunten en -implementaties vindt u in Het oplossen van problemen met online-eindpunten.
Identiteitsfout
FOUT: RefreshExtensionIdentityNotSet
Deze fout treedt op wanneer de extensie is geïnstalleerd, maar de extensie-id niet juist is toegewezen. U kunt proberen de extensie opnieuw te installeren om deze te herstellen.
Deze fout is alleen bedoeld voor beheerde clusters
Controleren of sslCertPemFile en sslKeyPemFile juist zijn?
Als u wilt toestaan dat bekende fouten worden weergegeven, kunt u de opdrachten gebruiken om een basislijncontrole voor uw certificaat en sleutel uit te voeren. Verwacht dat de tweede opdracht 'RSA-sleutel ok' retourneert zonder u om een wachtwoord te vragen.
openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check
Voer de opdrachten uit om te controleren of sslCertPemFile en sslKeyPemFile overeenkomen:
openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum
Voor sslCertPemFile is dit het openbare certificaat. Het moet de certificaatketen bevatten die de volgende certificaten bevat en moet zich in de volgorde van het servercertificaat, het tussenliggende CA-certificaat en het basis-CA-certificaat bevinden:
- Het servercertificaat: de server presenteert de client tijdens de TLS-handshake. Deze bevat de openbare sleutel, domeinnaam en andere informatie van de server. Het servercertificaat wordt ondertekend door een tussenliggende certificeringsinstantie (CA) die de identiteit van de server verkrijgt.
- Het tussenliggende CA-certificaat: de tussenliggende CA presenteert zich aan de client om de autoriteit te bewijzen om het servercertificaat te ondertekenen. Deze bevat de openbare sleutel, naam en andere informatie van de tussenliggende CA. Het tussenliggende CA-certificaat wordt ondertekend door een basis-CA die wordt gebruikt voor de identiteit van de tussenliggende CA.
- Het basis-CA-certificaat: de basis-CA presenteert aan de client om de autoriteit te bewijzen om het tussenliggende CA-certificaat te ondertekenen. Deze bevat de openbare sleutel, naam en andere informatie van de basis-CA. Het basis-CA-certificaat is zelfondertekend en vertrouwd door de client.
Trainingsgids
Wanneer de trainingstaak wordt uitgevoerd, kunt u de taakstatus controleren in de werkruimteportal. Wanneer u een abnormale taakstatus tegenkomt, zoals de taak meerdere keren opnieuw geprobeerd, of de taak is vastgelopen in de initialisatiestatus, of zelfs de taak is mislukt, kunt u de handleiding volgen om het probleem op te lossen.
Foutopsporing voor opnieuw proberen van taken
Als de trainingstaakpod die in het cluster wordt uitgevoerd, is beëindigd omdat het knooppunt wordt uitgevoerd naar KNOOPPUNT OOM (onvoldoende geheugen), wordt de taak automatisch opnieuw geprobeerd naar een ander beschikbaar knooppunt.
Als u verder fouten wilt opsporen in de hoofdoorzaak van de taak, gaat u naar de werkruimteportal om het taaklogboek te controleren.
- Elk logboek voor opnieuw proberen wordt vastgelegd in een nieuwe logboekmap met de indeling 'nummer voor opnieuw proberen<>'(zoals: opnieuw proberen-001).
Vervolgens kunt u de toewijzingsgegevens voor het taakknooppunt opnieuw proberen ophalen om te achterhalen op welk knooppunt de taak voor opnieuw proberen is uitgevoerd.
U kunt toewijzingsgegevens voor taakknooppunten ophalen uit de amlarc_cr_bootstrap.log onder system_logs map.
De hostnaam van het knooppunt waarop de taakpod wordt uitgevoerd, wordt in dit logboek aangegeven, bijvoorbeeld:
++ echo 'Run on node: ask-agentpool-17631869-vmss0000"
'ask-agentpool-17631869-vmss0000' vertegenwoordigt de hostnaam van het knooppunt waarop deze taak wordt uitgevoerd in uw AKS-cluster. Vervolgens hebt u toegang tot het cluster om te controleren op de status van het knooppunt voor verder onderzoek.
Taakpod blijft hangen in de init-status
Als de taak langer wordt uitgevoerd dan verwacht en als u merkt dat uw taakpods vastlopen in een Init-status met deze waarschuwing Unable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matched
, kan het probleem optreden omdat de Azure Machine Learning-extensie de downloadmodus voor invoergegevens niet ondersteunt.
U kunt dit probleem oplossen door over te schakelen naar de koppelingsmodus voor uw invoergegevens.
Veelvoorkomende fouten bij taakfouten
Hieronder vindt u een lijst met veelvoorkomende fouttypen die u kunt tegenkomen bij het gebruik van Kubernetes-rekenkracht om een trainingstaak te maken en uit te voeren. U kunt problemen ondervinden met het volgen van de richtlijn:
- Taak is mislukt. 137
- Taak is mislukt. E45004
- Taak is mislukt. 400
- Geef een accountsleutel of SAS-token op
- AzureBlob-autorisatie mislukt
Taak is mislukt. 137
Als het foutbericht het volgende is:
Azure Machine Learning Kubernetes job failed. 137:PodPattern matched: {"containers":[{"name":"training-identity-sidecar","message":"Updating certificates in /etc/ssl/certs...\n1 added, 0 removed; done.\nRunning hooks in /etc/ca-certificates/update.d...\ndone.\n * Serving Flask app 'msi-endpoint-server' (lazy loading)\n * Environment: production\n WARNING: This is a development server. Do not use it in a production deployment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:12342/ (Press CTRL+C to quit)\n","code":137}]}
Controleer de proxy-instelling en controleer of 127.0.0.1 is toegevoegd aan het proxy-skip-range wanneer u az connectedk8s connect
deze netwerkconfiguratie volgt.
Taak is mislukt. E45004
Als het foutbericht het volgende is:
Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."
Controleer of u hebt enableTraining=True
ingesteld bij het installeren van de Azure Machine Learning-extensie. Meer informatie vindt u in De Azure Machine Learning-extensie implementeren in AKS- of Arc Kubernetes-cluster
Taak is mislukt. 400
Als het foutbericht het volgende is:
Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}
U kunt de sectie Probleemoplossing van Private Link volgen om uw netwerkinstellingen te controleren.
Geef een accountsleutel of SAS-token op
Als u toegang wilt krijgen tot Azure Container Registry (ACR) voor Docker-installatiekopieën en toegang wilt krijgen tot het opslagaccount voor trainingsgegevens, moet dit probleem optreden wanneer de berekening niet is opgegeven met een beheerde identiteit.
Als u toegang wilt krijgen tot Azure Container Registry (ACR) vanuit een Kubernetes-rekencluster voor Docker-installatiekopieën of toegang wilt krijgen tot een opslagaccount voor trainingsgegevens, moet u de Kubernetes-berekening koppelen met een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit ingeschakeld.
In het bovenstaande trainingsscenario is deze rekenidentiteit nodig om Kubernetes-rekenkracht te gebruiken als referentie om te communiceren tussen de ARM-resource die is gebonden aan de werkruimte en het Kubernetes-computingcluster. Zonder deze identiteit mislukt de trainingstaak en rapporteert de ontbrekende accountsleutel of sas-token. Als u bijvoorbeeld geen beheerde identiteit opgeeft voor uw Kubernetes-rekenproces, mislukt de taak met het volgende foutbericht:
Unable to mount data store workspaceblobstore. Give either an account key or SAS token
De oorzaak is dat het standaardopslagaccount voor machine learning-werkruimte zonder referenties niet toegankelijk is voor trainingstaken in Kubernetes Compute.
U kunt dit probleem oplossen door beheerde identiteit toe te wijzen aan de berekening in de stap voor het koppelen van rekenprocessen of u kunt beheerde identiteit toewijzen aan de berekening nadat deze is gekoppeld. Meer informatie vindt u in Managed Identity toewijzen aan het rekendoel.
AzureBlob-autorisatie mislukt
Als u toegang nodig hebt tot AzureBlob voor het uploaden of downloaden van gegevens in uw trainingstaken op Kubernetes Compute, mislukt de taak met het volgende foutbericht:
Unable to upload project files to working directory in AzureBlob because the authorization failed.
De oorzaak is dat de autorisatie is mislukt wanneer de taak de projectbestanden probeert te uploaden naar De AzureBlob. U kunt de volgende items controleren om het probleem op te lossen:
- Zorg ervoor dat het opslagaccount de uitzonderingen 'Toestaan dat Azure-services in de lijst met vertrouwde services toegang hebben tot dit opslagaccount' is ingeschakeld en dat de werkruimte in de lijst met resource-exemplaren staat.
- Zorg ervoor dat aan de werkruimte een door het systeem toegewezen beheerde identiteit is toegewezen.
Probleem met privékoppeling
We kunnen de methode gebruiken om de configuratie van private link te controleren door u aan te melden bij één pod in het Kubernetes-cluster en vervolgens de gerelateerde netwerkinstellingen te controleren.
Zoek de werkruimte-id in Azure Portal of haal deze id op door deze uit te voeren
az ml workspace show
op de opdrachtregel.Alle azureml-fe-pods weergeven die worden uitgevoerd door
kubectl get po -n azureml -l azuremlappname=azureml-fe
.Meld u aan bij een van deze uitvoeringen
kubectl exec -it -n azureml {scorin_fe_pod_name} bash
.Als het cluster geen proxyuitvoering
nslookup {workspace_id}.workspace.{region}.api.azureml.ms
gebruikt. Als u private link van VNet naar werkruimte correct instelt, moet het interne IP-adres in VNet worden beantwoord via het hulpprogramma DNSLookup .Als het cluster gebruikmaakt van proxy, kunt u proberen werkruimten te
curl
gebruiken
curl https://{workspace_id}.workspace.westcentralus.api.azureml.ms/metric/v2.0/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{workspace_name}/api/2.0/prometheus/post -X POST -x {proxy_address} -d {} -v -k
Wanneer de proxy en werkruimte correct zijn ingesteld met een privékoppeling, moet u een poging zien om verbinding te maken met een intern IP-adres. In dit scenario wordt een antwoord met een HTTP 401-statuscode verwacht als er geen token wordt opgegeven.
Andere bekende problemen
Kubernetes-rekenprocesupdate wordt niet van kracht
Op dit moment staat de CLI v2 en SDK v2 geen configuratie van een bestaande Kubernetes-berekening bij. Als u bijvoorbeeld de naamruimte wijzigt, wordt dit niet doorgevoerd.
Naam van werkruimte of resourcegroep eindigt met '-'
Een veelvoorkomende oorzaak van de fout InternalServerError bij het maken van werkbelastingen, zoals implementaties, eindpunten of taken in een Kubernetes-rekenproces, heeft de speciale tekens, zoals '-' aan het einde van de naam van uw werkruimte of resourcegroep.