Felsöka Kubernetes Compute
I den här artikeln får du lära dig hur du felsöker vanliga arbetsbelastningsfel på Kubernetes-beräkningen. Vanliga fel är träningsjobb och slutpunktsfel.
Slutsatsdragningsguide
De vanliga Kubernetes-slutpunktsfelen på Kubernetes-beräkningen kategoriseras i två omfång: beräkningsomfång och klusteromfång. Felen i beräkningsomfånget är relaterade till beräkningsmålet, till exempel att beräkningsmålet inte hittas eller att beräkningsmålet inte är tillgängligt. Klusteromfångsfelen är relaterade till det underliggande Kubernetes-klustret, till exempel att själva klustret inte kan nås eller att klustret inte hittas.
Kubernetes-beräkningsfel
Följande är vanliga feltyper i beräkningsomfånget som du kan stöta på när du använder Kubernetes-beräkning för att skapa onlineslutpunkter och onlinedistributioner för modellinferens i realtid. Du kan felsöka genom att följa de länkade avsnitten för riktlinjer:
- FEL: GenericComputeError
- FEL: ComputeNotFound
- FEL: ComputeNotAccessible
- FEL: InvalidComputeInformation
- FEL: InvalidComputeNoKubernetesConfiguration
FEL: GenericComputeError
Felmeddelandet är som:
Failed to get compute information.
Det här felet bör inträffa när systemet inte kunde hämta beräkningsinformationen från Kubernetes-klustret. Du kan kontrollera följande objekt för att felsöka problemet:
- Kontrollera Kubernetes-klusterstatusen. Om klustret inte körs måste du starta klustret först.
- Kontrollera Kubernetes-klusterhälsan.
- Du kan visa hälsokontrollrapporten för klustret för eventuella problem, till exempel om klustret inte kan nås.
- Du kan gå till arbetsyteportalen för att kontrollera beräkningsstatusen.
- Kontrollera om instanstyperna är korrekta. Du kan kontrollera instanstyperna som stöds i Kubernetes-beräkningsdokumentationen.
- Försök att koppla från och koppla om beräkningen till arbetsytan om det är tillämpligt.
Kommentar
Om du vill felsöka fel genom att ansluta igen kan du garantera att återansluta med exakt samma konfiguration som tidigare frånkopplad beräkning, till exempel samma beräkningsnamn och namnområde, annars kan det uppstå andra fel.
FEL: ComputeNotFound
Felmeddelandet är följande:
Cannot find Kubernetes compute.
Det här felet bör inträffa när:
- Systemet kan inte hitta beräkningen när du skapar/uppdaterar ny onlineslutpunkt/distribution.
- Beräkningen av befintliga onlineslutpunkter/distributioner har tagits bort.
Du kan kontrollera följande objekt för att felsöka problemet:
- Försök återskapa slutpunkten och distributionen.
- Försök att koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.
FEL: ComputeNotAccessible
Felmeddelandet är följande:
The Kubernetes compute is not accessible.
Det här felet bör inträffa när arbetsytans MSI (hanterad identitet) inte har åtkomst till AKS-klustret. Du kan kontrollera om arbetsytans MSI har åtkomst till AKS, och om inte kan du följa det här dokumentet för att hantera åtkomst och identitet.
FEL: InvalidComputeInformation
Felmeddelandet är följande:
The compute information is invalid.
Det finns en valideringsprocess för beräkningsmål när du distribuerar modeller till ditt Kubernetes-kluster. Det här felet bör inträffa när beräkningsinformationen är ogiltig. Beräkningsmålet hittades till exempel inte, eller så har konfigurationen av Azure Machine Learning-tillägget uppdaterats i kubernetes-klustret.
Du kan kontrollera följande objekt för att felsöka problemet:
- Kontrollera om beräkningsmålet som du använde är korrekt och befintligt på din arbetsyta.
- Försök att koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.
FEL: InvalidComputeNoKubernetesConfiguration
Felmeddelandet är följande:
The compute kubeconfig is invalid.
Det här felet bör inträffa när systemet inte kunde hitta någon konfiguration för att ansluta till klustret, till exempel:
- Det finns ingen Azure Relay-konfiguration för Arc-Kubernetes-klustret.
- Det finns ingen AKS-konfiguration för AKS-kluster.
Om du vill återskapa konfigurationen av beräkningsanslutningen i klustret kan du försöka koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.
Kubernetes-klusterfel
Nedan visas en lista över feltyper i klusteromfånget som du kan stöta på när du använder Kubernetes-beräkning för att skapa onlineslutpunkter och onlinedistributioner för modellinferens i realtid, vilket du kan felsöka genom att följa riktlinjen:
- FEL: GenericClusterError
- FEL: ClusterNotReachable
- ERROR: ClusterNotFound
- FEL: ClusterServiceNotFound
- FEL: Klusterauktoriserat
FEL: GenericClusterError
Felmeddelandet är följande:
Failed to connect to Kubernetes cluster: <message>
Det här felet bör inträffa när systemet inte kunde ansluta till Kubernetes-klustret av okänd anledning. Du kan kontrollera följande objekt för att felsöka problemet:
För AKS-kluster:
- Kontrollera om AKS-klustret har stängts av.
- Om klustret inte körs måste du starta klustret först.
- Kontrollera om AKS-klustret har aktiverat det valda nätverket med hjälp av auktoriserade IP-intervall.
- Om AKS-klustret har aktiverat auktoriserade IP-intervall kontrollerar du att alla IP-intervall för Azure Machine Learning-kontrollplanet har aktiverats för AKS-klustret. Mer information finns i det här dokumentet.
För ett AKS-kluster eller ett Azure Arc-aktiverat Kubernetes-kluster:
- Kontrollera om Kubernetes API-servern är tillgänglig genom att köra
kubectl
kommandot i klustret.
FEL: ClusterNotReachable
Felmeddelandet är följande:
The Kubernetes cluster is not reachable.
Det här felet bör inträffa när systemet inte kan ansluta till ett kluster. Du kan kontrollera följande objekt för att felsöka problemet:
För AKS-kluster:
- Kontrollera om AKS-klustret har stängts av.
- Om klustret inte körs måste du starta klustret först.
För ett AKS-kluster eller ett Azure Arc-aktiverat Kubernetes-kluster:
- Kontrollera om Kubernetes API-servern är tillgänglig genom att köra
kubectl
kommandot i klustret.
ERROR: ClusterNotFound
Felmeddelandet är följande:
Cannot found Kubernetes cluster.
Det här felet bör inträffa när systemet inte kan hitta AKS/Arc-Kubernetes-klustret.
Du kan kontrollera följande objekt för att felsöka problemet:
- Kontrollera först klustrets resurs-ID i Azure Portal för att kontrollera om Kubernetes-klusterresursen fortfarande finns och körs normalt.
- Om klustret finns och körs kan du försöka koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.
FEL: ClusterServiceNotFound
Felmeddelandet är följande:
AzureML extension service not found in cluster.
Det här felet bör inträffa när den tilläggsägda ingresstjänsten inte har tillräckligt med serverdelspoddar.
Du kan:
- Öppna klustret och kontrollera status för tjänsten
azureml-ingress-nginx-controller
och dess serverdelspodd underazureml
namnområdet. - Om klustret inte har några serverdelspoddar som körs kontrollerar du orsaken genom att beskriva podden. Om podden till exempel inte har tillräckligt med resurser för att köras kan du ta bort vissa poddar för att frigöra tillräckligt med resurser för den inkommande podden.
FEL: Klusterauktoriserat
Felmeddelandet är följande:
Request to Kubernetes cluster unauthorized.
Det här felet bör endast inträffa i det TA-aktiverade klustret, vilket innebär att åtkomsttoken upphörde att gälla under distributionen.
Du kan försöka igen efter flera minuter.
Dricks
Mer felsökningsguide för vanliga fel när du skapar/uppdaterar Kubernetes onlineslutpunkter och distributioner finns i Så här felsöker du onlineslutpunkter.
Identitetsfel
FEL: RefreshExtensionIdentityNotSet
Det här felet uppstår när tillägget installeras men tilläggsidentiteten inte är korrekt tilldelad. Du kan försöka installera om tillägget för att åtgärda det.
Observera att det här felet endast gäller hanterade kluster
Så här kontrollerar du att sslCertPemFile och sslKeyPemFile är korrekta?
För att tillåta att kända fel visas kan du använda kommandona för att köra en baslinjekontroll för certifikatet och nyckeln. Förvänta dig att det andra kommandot returnerar "RSA-nyckel ok" utan att fråga dig om lösenord.
openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check
Kör kommandona för att kontrollera om sslCertPemFile och sslKeyPemFile matchas:
openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum
För sslCertPemFile är det det offentliga certifikatet. Den bör innehålla certifikatkedjan som innehåller följande certifikat och bör finnas i sekvensen för servercertifikatet, det mellanliggande CA-certifikatet och rotcertifikatutfärdarcertifikatet:
- Servercertifikatet: servern visas för klienten under TLS-handskakningen. Den innehåller serverns offentliga nyckel, domännamn och annan information. Servercertifikatet signeras av en mellanliggande certifikatutfärdare (CA) som går i god för serverns identitet.
- Mellanliggande CA-certifikat: den mellanliggande certifikatutfärdare presenterar för klienten för att bevisa sin behörighet att signera servercertifikatet. Den innehåller den mellanliggande certifikatmottagarens offentliga nyckel, namn och annan information. Det mellanliggande CA-certifikatet signeras av en rotcertifikatutfärdare som går i god för den mellanliggande certifikatutfärdaridentiteten.
- Rotcertifikatutfärdarcertifikatet: rotcertifikatutfärdare presenterar för klienten för att bevisa sin behörighet att signera det mellanliggande CA-certifikatet. Den innehåller rotcertifikatutfärdares offentliga nyckel, namn och annan information. Rotcertifikatutfärdarcertifikatet är självsignerat och betrott av klienten.
Träningsguide
När träningsjobbet körs kan du kontrollera jobbstatusen i arbetsyteportalen. När du stöter på onormal jobbstatus, till exempel om jobbet har gjorts om flera gånger, eller om jobbet har fastnat i initieringstillståndet, eller till och med jobbet till slut har misslyckats, kan du följa guiden för att felsöka problemet.
Jobbåterförsöksfelsökning
Om träningsjobbspodden som körs i klustret avslutades på grund av att noden körs till noden OOM (slut på minne) görs jobbet automatiskt ett nytt försök till en annan tillgänglig nod.
Om du vill felsöka rotorsaken till jobbförsöket ytterligare kan du gå till arbetsyteportalen för att kontrollera jobbförsöksloggen.
- Varje återförsökslogg registreras i en ny loggmapp med formatet "återförsöksnummer<>"(till exempel: försök igen 001).
Sedan kan du hämta mappningsinformationen för jobbnoden igen för att ta reda på vilken nod som återförsöksjobbet har körts på.
Du kan hämta mappningsinformation för jobbnoder från amlarc_cr_bootstrap.log under system_logs mapp.
Värdnamnet för noden, som jobbpodden körs på, anges i den här loggen, till exempel:
++ echo 'Run on node: ask-agentpool-17631869-vmss0000"
"ask-agentpool-17631869-vmss0000" representerar nodens värdnamn som kör det här jobbet i AKS-klustret. Sedan kan du komma åt klustret för att kontrollera nodstatusen för ytterligare undersökning.
Jobbpodden fastnar i init-tillstånd
Om jobbet körs längre än förväntat och om du upptäcker att dina jobbpoddar fastnar i ett Init-tillstånd med den här varningen Unable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matched
kan problemet uppstå eftersom Azure Machine Learning-tillägget inte stöder nedladdningsläge för indata.
Lös problemet genom att ändra till monteringsläge för dina indata.
Vanliga fel vid jobbfel
Nedan visas en lista över vanliga feltyper som du kan stöta på när du använder Kubernetes-beräkning för att skapa och köra ett träningsjobb, som du kan felsöka genom att följa riktlinjen:
- Jobbet misslyckades. 137
- Jobbet misslyckades. E45004
- Jobbet misslyckades. 400
- Erbjud antingen en kontonyckel eller en SAS-token
- AzureBlob-auktoriseringen misslyckades
Jobbet misslyckades. 137
Om felmeddelandet är:
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}]}
Kontrollera proxyinställningen och kontrollera om 127.0.0.1 har lagts till i proxy-skip-range när du använder az connectedk8s connect
genom att följa nätverkskonfigurationen.
Jobbet misslyckades. E45004
Om felmeddelandet är:
Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."
Kontrollera om du har enableTraining=True
angett när du installerar Azure Machine Learning-tillägget. Mer information finns i Distribuera Azure Machine Learning-tillägget på AKS- eller Arc Kubernetes-kluster
Jobbet misslyckades. 400
Om felmeddelandet är:
Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}
Du kan följa felsökningsavsnittet Private Link för att kontrollera nätverksinställningarna.
Erbjud antingen en kontonyckel eller en SAS-token
Om du behöver komma åt Azure Container Registry (ACR) för Docker-avbildningen och få åtkomst till lagringskontot för träningsdata bör det här problemet inträffa när beräkningen inte har angetts med en hanterad identitet.
För att få åtkomst till Azure Container Registry (ACR) från ett Kubernetes-beräkningskluster för Docker-avbildningar eller komma åt ett lagringskonto för träningsdata måste du koppla Kubernetes-beräkningen med en systemtilldelad eller användartilldelad hanterad identitet aktiverad.
I träningsscenariot ovan är den här databehandlingsidentiteten nödvändig för att Kubernetes-beräkning ska kunna användas som autentiseringsuppgifter för att kommunicera mellan ARM-resursen som är bunden till arbetsytan och Kubernetes-beräkningsklustret. Så utan den här identiteten misslyckas träningsjobbet och rapporterar saknade kontonycklar eller sas-token. Ta åtkomst till lagringskontot, till exempel om du inte anger en hanterad identitet till Din Kubernetes-beräkning, misslyckas jobbet med följande felmeddelande:
Unable to mount data store workspaceblobstore. Give either an account key or SAS token
Orsaken är att standardlagringskontot för maskininlärningsarbetsytan utan autentiseringsuppgifter inte är tillgängligt för träningsjobb i Kubernetes-beräkning.
Du kan åtgärda det här problemet genom att tilldela hanterad identitet till beräkningssteget i beräkningsanslutningssteget, eller tilldela hanterad identitet till beräkningen när den har kopplats. Mer information finns i Tilldela hanterad identitet till beräkningsmålet.
AzureBlob-auktoriseringen misslyckades
Om du behöver komma åt AzureBlob för datauppladdning eller nedladdning i dina träningsjobb på Kubernetes-beräkning misslyckas jobbet med följande felmeddelande:
Unable to upload project files to working directory in AzureBlob because the authorization failed.
Orsaken är att auktoriseringen misslyckades när jobbet försöker ladda upp projektfilerna till AzureBlob. Du kan kontrollera följande objekt för att felsöka problemet:
- Kontrollera att lagringskontot har aktiverat undantagen "Tillåt att Azure-tjänster i listan över betrodda tjänster får åtkomst till det här lagringskontot" och att arbetsytan finns i listan över resursinstanser.
- Kontrollera att arbetsytan har en systemtilldelad hanterad identitet.
Problem med privat länk
Vi kan använda metoden för att kontrollera konfigurationen av privata länkar genom att logga in på en podd i Kubernetes-klustret och sedan kontrollera relaterade nätverksinställningar.
Hitta arbetsyte-ID i Azure Portal eller hämta det här ID:t genom att köra
az ml workspace show
på kommandoraden.Visa alla azureml-fe-poddar som körs av
kubectl get po -n azureml -l azuremlappname=azureml-fe
.Logga in på någon av dem kör
kubectl exec -it -n azureml {scorin_fe_pod_name} bash
.Om klustret inte använder proxykörningen kör
nslookup {workspace_id}.workspace.{region}.api.azureml.ms
du . Om du konfigurerar en privat länk från VNet till arbetsytan korrekt bör den interna IP-adressen i det virtuella nätverket besvaras via DNSLookup-verktyget .Om klustret använder proxy kan du försöka
curl
använda arbetsytan
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
När proxyn och arbetsytan är korrekt konfigurerade med en privat länk bör du observera ett försök att ansluta till en intern IP-adress. Ett svar med en HTTP 401-statuskod förväntas i det här scenariot om en token inte tillhandahålls.
Andra kända problem
Kubernetes-beräkningsuppdateringen börjar inte gälla
För närvarande tillåter inte CLI v2 och SDK v2 uppdatering av någon konfiguration av en befintlig Kubernetes-beräkning. Till exempel börjar det inte gälla att ändra namnområdet.
Namn på arbetsyta eller resursgrupp slutar med "-"
En vanlig orsak till felet "InternalServerError" när du skapar arbetsbelastningar, till exempel distributioner, slutpunkter eller jobb i en Kubernetes-beräkning, är att specialtecken som "-" finns i slutet av arbetsytan eller resursgruppens namn.