Rozwiązywanie problemów ze środowiskiem obliczeniowym usługi Kubernetes

Z tego artykułu dowiesz się, jak rozwiązywać typowe błędy obciążenia w obliczeniach platformy Kubernetes. Typowe błędy obejmują zadania trenowania i błędy punktu końcowego.

Przewodnik wnioskowania

Typowe błędy punktu końcowego kubernetes w obliczeniach platformy Kubernetes są podzielone na dwa zakresy: zakres obliczeniowy i zakres klastra. Błędy zakresu obliczeniowego są związane z docelowym obiektem obliczeniowym, takim jak docelowy obiekt obliczeniowy, nie można odnaleźć lub docelowy obiekt obliczeniowy jest niedostępny. Błędy zakresu klastra są związane z bazowym klastrem Kubernetes, takim jak sam klaster, nie jest osiągalny lub nie można odnaleźć klastra.

Błędy obliczeniowe platformy Kubernetes

Poniżej przedstawiono typowe typy błędów w zakresie obliczeniowym, które mogą wystąpić podczas korzystania z obliczeń platformy Kubernetes w celu tworzenia punktów końcowych online i wdrożeń online na potrzeby wnioskowania modelu w czasie rzeczywistym. Możesz mieć problemy, postępując zgodnie z połączonymi sekcjami, aby uzyskać wskazówki:

BŁĄD: GenericComputeError

Komunikat o błędzie to:

Failed to get compute information.

Ten błąd powinien wystąpić, gdy system nie może uzyskać informacji obliczeniowych z klastra Kubernetes. Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

  • Sprawdź stan klastra Kubernetes. Jeśli klaster nie jest uruchomiony, musisz najpierw uruchomić klaster.
  • Sprawdź kondycję klastra Kubernetes.
    • Możesz wyświetlić raport kontroli kondycji klastra pod kątem problemów, na przykład jeśli klaster nie jest osiągalny.
    • Możesz przejść do portalu obszaru roboczego, aby sprawdzić stan obliczeń.
  • Sprawdź, czy typy wystąpień są poprawne. Obsługiwane typy wystąpień można sprawdzić w dokumentacji obliczeniowej platformy Kubernetes.
  • Spróbuj odłączyć i ponownie dołączyć zasoby obliczeniowe do obszaru roboczego, jeśli ma to zastosowanie.

Uwaga

Aby napotkać błędy podczas ponownego dołączania, upewnij się, że dołącz ponownie z dokładnie taką samą konfiguracją jak wcześniej odłączone zasoby obliczeniowe, takie jak ta sama nazwa obliczeniowa i przestrzeń nazw, w przeciwnym razie mogą wystąpić inne błędy.

BŁĄD: ComputeNotFound

Komunikat o błędzie wygląda następująco:

Cannot find Kubernetes compute.

Ten błąd powinien wystąpić, gdy:

  • System nie może odnaleźć zasobów obliczeniowych podczas tworzenia/aktualizowania nowego punktu końcowego/wdrożenia online.
  • Obliczenia istniejących punktów końcowych/wdrożeń online zostały usunięte.

Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

  • Spróbuj ponownie utworzyć punkt końcowy i wdrożenie.
  • Spróbuj odłączyć i ponownie dołączyć zasoby obliczeniowe do obszaru roboczego. Zwróć uwagę na więcej notatek na ponowne dołączanie.

BŁĄD: ComputeNotAccessible

Komunikat o błędzie wygląda następująco:

The Kubernetes compute is not accessible.

Ten błąd powinien wystąpić, gdy tożsamość usługi zarządzanej obszaru roboczego nie ma dostępu do klastra usługi AKS. Możesz sprawdzić, czy tożsamość usługi zarządzanej obszaru roboczego ma dostęp do usługi AKS, a jeśli nie, możesz wykonać czynności opisane w tym dokumencie , aby zarządzać dostępem i tożsamością.

BŁĄD: InvalidComputeInformation

Komunikat o błędzie wygląda następująco:

The compute information is invalid.

Podczas wdrażania modeli w klastrze Kubernetes istnieje proces walidacji docelowej obliczeń. Ten błąd powinien wystąpić, gdy informacje o obliczeniach są nieprawidłowe. Na przykład nie można odnaleźć docelowego obiektu obliczeniowego lub konfiguracja rozszerzenia usługi Azure Machine Edukacja została zaktualizowana w klastrze Kubernetes.

Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

  • Sprawdź, czy użyty docelowy obiekt obliczeniowy jest poprawny i czy istnieje w obszarze roboczym.
  • Spróbuj odłączyć i ponownie dołączyć zasoby obliczeniowe do obszaru roboczego. Zwróć uwagę na więcej notatek na ponowne dołączanie.

BŁĄD: InvalidComputeNoKubernetesConfiguration

Komunikat o błędzie wygląda następująco:

The compute kubeconfig is invalid.

Ten błąd powinien wystąpić, gdy system nie może odnaleźć żadnej konfiguracji do nawiązania połączenia z klastrem, na przykład:

  • W przypadku klastra Arc-Kubernetes nie można odnaleźć konfiguracji usługi Azure Relay.
  • W przypadku klastra usługi AKS nie można odnaleźć konfiguracji usługi AKS.

Aby ponownie skompilować konfigurację połączenia obliczeniowego w klastrze, możesz spróbować odłączyć i ponownie dołączyć obliczenia do obszaru roboczego. Zwróć uwagę na więcej notatek na ponowne dołączanie.

Błąd klastra Kubernetes

Poniżej znajduje się lista typów błędów w zakresie klastra, które mogą wystąpić podczas korzystania z obliczeń platformy Kubernetes w celu utworzenia punktów końcowych online i wdrożeń online na potrzeby wnioskowania modelu w czasie rzeczywistym, które można napotkać, postępując zgodnie z wytycznymi:

BŁĄD: GenericClusterError

Komunikat o błędzie wygląda następująco:

Failed to connect to Kubernetes cluster: <message>

Ten błąd powinien wystąpić, gdy system nie może nawiązać połączenia z klastrem Kubernetes z nieznanego powodu. Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

W przypadku klastrów usługi AKS:

  • Sprawdź, czy klaster usługi AKS został zamknięty.
    • Jeśli klaster nie jest uruchomiony, musisz najpierw uruchomić klaster.
  • Sprawdź, czy klaster usługi AKS włączył wybraną sieć przy użyciu autoryzowanych zakresów adresów IP.
    • Jeśli klaster usługi AKS włączył autoryzowane zakresy adresów IP, upewnij się, że dla klastra usługi AKS włączono wszystkie zakresy adresów IP płaszczyzny sterowania usługi Azure Machine Edukacja. Więcej informacji można znaleźć w tym dokumencie.

W przypadku klastra usługi AKS lub klastra Kubernetes z włączoną usługą Azure Arc:

  • Sprawdź, czy serwer interfejsu API Kubernetes jest dostępny, uruchamiając kubectl polecenie w klastrze.

BŁĄD: ClusterNotReachable

Komunikat o błędzie wygląda następująco:

The Kubernetes cluster is not reachable. 

Ten błąd powinien wystąpić, gdy system nie może nawiązać połączenia z klastrem. Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

W przypadku klastrów usługi AKS:

  • Sprawdź, czy klaster usługi AKS został zamknięty.
    • Jeśli klaster nie jest uruchomiony, musisz najpierw uruchomić klaster.

W przypadku klastra usługi AKS lub klastra Kubernetes z włączoną usługą Azure Arc:

  • Sprawdź, czy serwer interfejsu API Kubernetes jest dostępny, uruchamiając kubectl polecenie w klastrze.

BŁĄD: ClusterNotFound

Komunikat o błędzie wygląda następująco:

Cannot found Kubernetes cluster. 

Ten błąd powinien wystąpić, gdy system nie może odnaleźć klastra AKS/Arc-Kubernetes.

Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

  • Najpierw sprawdź identyfikator zasobu klastra w witrynie Azure Portal, aby sprawdzić, czy zasób klastra Kubernetes nadal istnieje i czy działa normalnie.
  • Jeśli klaster istnieje i jest uruchomiony, możesz spróbować odłączyć i ponownie dołączyć obliczenia do obszaru roboczego. Zwróć uwagę na więcej notatek na ponowne dołączanie.

Napiwek

Więcej przewodników rozwiązywania problemów z typowymi błędami podczas tworzenia/aktualizowania punktów końcowych i wdrożeń online platformy Kubernetes można znaleźć w temacie Jak rozwiązywać problemy z punktami końcowymi online.

Błąd tożsamości

BŁĄD: RefreshExtensionIdentityNotSet

Ten błąd występuje, gdy rozszerzenie jest zainstalowane, ale tożsamość rozszerzenia nie jest poprawnie przypisana. Aby rozwiązać ten problem, możesz spróbować ponownie zainstalować rozszerzenie.

Zwróć uwagę, że ten błąd dotyczy tylko klastrów zarządzanych

Jak sprawdzić, czy sslCertPemFile i sslKeyPemFile są poprawne?

Aby umożliwić wyświetlanie wszystkich znanych błędów, możesz użyć poleceń , aby uruchomić sprawdzanie punktu odniesienia dla certyfikatu i klucza. Należy oczekiwać, że drugie polecenie zwróci wartość "RSA key ok" bez monitowania o podanie hasła.

openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check

Uruchom polecenia, aby sprawdzić, czy są zgodne wartości sslCertPemFile i sslKeyPemFile:

openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum

W przypadku certyfikatu sslCertPemFile jest to certyfikat publiczny. Powinien zawierać łańcuch certyfikatów zawierający następujące certyfikaty i powinien znajdować się w sekwencji certyfikatu serwera, certyfikatu pośredniego urzędu certyfikacji i certyfikatu głównego urzędu certyfikacji:

  • Certyfikat serwera: serwer przedstawia klientowi podczas uzgadniania protokołu TLS. Zawiera on klucz publiczny serwera, nazwę domeny i inne informacje. Certyfikat serwera jest podpisany przez pośredni urząd certyfikacji (CA), który ręczy dla tożsamości serwera.
  • Certyfikat pośredniego urzędu certyfikacji: pośredni urząd certyfikacji przedstawia klientowi, aby udowodnić swoje uprawnienia do podpisania certyfikatu serwera. Zawiera on klucz publiczny pośredniego urzędu certyfikacji, nazwę i inne informacje. Certyfikat pośredniego urzędu certyfikacji jest podpisany przez główny urząd certyfikacji, który ręczy dla tożsamości pośredniego urzędu certyfikacji.
  • Certyfikat głównego urzędu certyfikacji: główny urząd certyfikacji przedstawia klientowi, aby udowodnić swoje uprawnienia do podpisania pośredniego certyfikatu urzędu certyfikacji. Zawiera on klucz publiczny głównego urzędu certyfikacji, nazwę i inne informacje. Certyfikat głównego urzędu certyfikacji jest z podpisem własnym i zaufany przez klienta.

Przewodnik szkoleniowy

Po uruchomieniu zadania szkoleniowego możesz sprawdzić stan zadania w portalu obszaru roboczego. W przypadku napotkania nietypowego stanu zadania, takiego jak wielokrotne ponowienia próby zadania lub zablokowanie zadania w stanie inicjowania, a nawet zadanie zakończyło się niepowodzeniem, możesz postępować zgodnie z przewodnikiem rozwiązywania problemu.

Ponów próbę debugowania zadania

Jeśli zasobnik zadania szkoleniowego uruchomiony w klastrze został przerwany z powodu węzła uruchomionego na węźle OOM (za brak pamięci), zadanie zostanie automatycznie ponowione do innego dostępnego węzła.

Aby dodatkowo debugować główną przyczynę próby zadania, możesz przejść do portalu obszaru roboczego, aby sprawdzić dziennik ponawiania prób zadania.

  • Każdy dziennik ponawiania prób jest rejestrowany w nowym folderze dziennika w formacie "<numer ponawiania> prób"(na przykład: retry-001).

Następnie możesz uzyskać informacje o mapowaniu węzła zadania ponawiania, aby ustalić, w którym węźle uruchomiono zadanie ponawiania.

Screenshot of adding a new extension to the Azure Arc-enabled Kubernetes cluster from the Azure portal.

Informacje o mapowaniu węzła zadania można uzyskać z amlarc_cr_bootstrap.log w folderze system_logs.

Nazwa hosta węzła, na którym działa zasobnik zadania, jest wskazana w tym dzienniku, na przykład:

++ echo 'Run on node: ask-agentpool-17631869-vmss0000"

"ask-agentpool-17631869-vmss0000" reprezentuje nazwę hosta węzła, na którym uruchomiono to zadanie w klastrze usługi AKS. Następnie możesz uzyskać dostęp do klastra, aby sprawdzić stan węzła w celu dalszej analizy.

Zasobnik zadania jest zablokowany w stanie inicjowania

Jeśli zadanie działa dłużej niż oczekiwano i jeśli okaże się, że zasobniki zadań utknęły w stanie Init z tym ostrzeżeniemUnable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matched, problem może wystąpić, ponieważ rozszerzenie azure Machine Edukacja nie obsługuje trybu pobierania dla danych wejściowych.

Aby rozwiązać ten problem, zmień tryb instalacji na dane wejściowe.

Typowe błędy niepowodzenia zadania

Poniżej znajduje się lista typowych typów błędów, które mogą wystąpić podczas korzystania z obliczeń platformy Kubernetes w celu utworzenia i wykonania zadania trenowania, które można napotkać, postępując zgodnie z wytycznymi:

Zadanie zakończyło się niepowodzeniem. 137

Jeśli komunikat o błędzie to:

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}]}

Sprawdź ustawienie serwera proxy i sprawdź, czy dodano 127.0.0.1 do zakresu pominięcia serwera proxy, korzystając z polecenia, postępując zgodnie z az connectedk8s connect konfiguracją tej sieci.

Zadanie zakończyło się niepowodzeniem. E45004

Jeśli komunikat o błędzie to:

Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."

Sprawdź, czy ustawiono enableTraining=True instalację rozszerzenia azure Machine Edukacja. Więcej szczegółów można znaleźć w artykule Deploy Azure Machine Edukacja extension on AKS or Arc Kubernetes cluster (Wdrażanie rozszerzenia usługi Azure Machine Edukacja w klastrze AKS lub Arc Kubernetes)

Zadanie zakończyło się niepowodzeniem. 400

Jeśli komunikat o błędzie to:

Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}

Aby sprawdzić ustawienia sieci, możesz skorzystać z sekcji rozwiązywania problemów z usługą Private Link.

Podawanie klucza konta lub tokenu SAS

Jeśli musisz uzyskać dostęp do usługi Azure Container Registry (ACR) dla obrazu platformy Docker i uzyskać dostęp do konta magazynu na potrzeby danych szkoleniowych, ten problem powinien wystąpić, gdy zasoby obliczeniowe nie są określone przy użyciu tożsamości zarządzanej.

Aby uzyskać dostęp do usługi Azure Container Registry (ACR) z klastra obliczeniowego Kubernetes dla obrazów platformy Docker lub uzyskać dostęp do konta magazynu na potrzeby danych szkoleniowych, musisz dołączyć środowisko obliczeniowe Kubernetes z włączoną tożsamością zarządzaną przypisaną przez system lub przypisaną przez użytkownika.

W powyższym scenariuszu szkoleniowym ta tożsamość obliczeniowa jest niezbędna, aby zasoby obliczeniowe kubernetes były używane jako poświadczenia do komunikacji między zasobem usługi ARM powiązanym z obszarem roboczym a klastrem obliczeniowym Kubernetes. Dlatego bez tej tożsamości zadanie trenowania kończy się niepowodzeniem i zgłasza brak klucza konta lub tokenu sas. Jeśli na przykład nie określisz tożsamości zarządzanej na potrzeby obliczeń platformy Kubernetes, zadanie zakończy się niepowodzeniem z następującym komunikatem o błędzie:

Unable to mount data store workspaceblobstore. Give either an account key or SAS token

Przyczyną jest domyślne konto magazynu obszaru roboczego uczenia maszynowego bez żadnych poświadczeń, które nie jest dostępne dla zadań szkoleniowych w obliczeniach platformy Kubernetes.

Aby rozwiązać ten problem, możesz przypisać tożsamość zarządzaną do zasobów obliczeniowych w kroku dołączania zasobów obliczeniowych lub przypisać tożsamość zarządzaną do zasobów obliczeniowych po dołączeniu. Więcej szczegółów można znaleźć w artykule Assign Managed Identity to the compute target (Przypisywanie tożsamości zarządzanej do docelowego obiektu obliczeniowego).

Niepowodzenie autoryzacji w usłudze AzureBlob

Jeśli musisz uzyskać dostęp do obiektu AzureBlob na potrzeby przekazywania lub pobierania danych w zadaniach szkoleniowych w środowisku obliczeniowym Kubernetes, zadanie kończy się niepowodzeniem z następującym komunikatem o błędzie:

Unable to upload project files to working directory in AzureBlob because the authorization failed. 

Przyczyną jest niepowodzenie autoryzacji, gdy zadanie próbuje przekazać pliki projektu do obiektu AzureBlob. Aby rozwiązać ten problem, możesz sprawdzić następujące elementy:

  • Upewnij się, że konto magazynu włączyło wyjątki "Zezwalaj usługom platformy Azure na liście zaufanych usług na dostęp do tego konta magazynu", a obszar roboczy znajduje się na liście wystąpień zasobów.
  • Upewnij się, że obszar roboczy ma przypisaną przez system tożsamość zarządzaną.

Możemy użyć metody , aby sprawdzić konfigurację łącza prywatnego, logując się do jednego zasobnika w klastrze Kubernetes, a następnie sprawdzając powiązane ustawienia sieciowe.

  • Znajdź identyfikator obszaru roboczego w witrynie Azure Portal lub pobierz ten identyfikator, uruchamiając polecenie az ml workspace show w wierszu polecenia.

  • Pokaż wszystkie zasobniki azureml-fe uruchamiane przez kubectl get po -n azureml -l azuremlappname=azureml-fepolecenie .

  • Zaloguj się do dowolnego z nich uruchom polecenie kubectl exec -it -n azureml {scorin_fe_pod_name} bash.

  • Jeśli klaster nie używa serwera proxy, uruchom polecenie nslookup {workspace_id}.workspace.{region}.api.azureml.ms. Jeśli poprawnie skonfigurowano łącze prywatne z sieci wirtualnej do obszaru roboczego, wewnętrzny adres IP w sieci wirtualnej powinien zostać zwrócony za pośrednictwem narzędzia DNSLookup .

  • Jeśli klaster korzysta z serwera proxy, możesz spróbować użyć curl obszaru roboczego

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

Gdy serwer proxy i obszar roboczy są poprawnie skonfigurowane za pomocą łącza prywatnego, należy obserwować próbę nawiązania połączenia z wewnętrznym adresem IP. Odpowiedź z kodem stanu HTTP 401 jest oczekiwana w tym scenariuszu, jeśli nie podano tokenu.

Inne znane problemy

Aktualizacja obliczeniowa platformy Kubernetes nie zostanie w życie

Obecnie interfejs wiersza polecenia w wersji 2 i zestaw SDK w wersji 2 nie zezwalają na aktualizowanie żadnej konfiguracji istniejącego środowiska obliczeniowego Kubernetes. Na przykład zmiana przestrzeni nazw nie ma zastosowania.

Nazwa obszaru roboczego lub grupy zasobów kończy się ciągiem "-"

Częstą przyczyną błędu "InternalServerError" podczas tworzenia obciążeń, takich jak wdrożenia, punkty końcowe lub zadania w obliczeniach kubernetes, jest posiadanie znaków specjalnych, takich jak "-" na końcu nazwy obszaru roboczego lub grupy zasobów.

Następne kroki