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
- BŁĄD: ComputeNotFound
- BŁĄD: ComputeNotAccessible
- BŁĄD: InvalidComputeInformation
- BŁĄD: InvalidComputeNoKubernetesConfiguration
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 Learning 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
- BŁĄD: ClusterNotReachable
- BŁĄD: ClusterNotFound
- BŁĄD: ClusterServiceNotFound
- BŁĄD: ClusterUnauthorized
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 wszystkie zakresy adresów IP płaszczyzny sterowania usługi Azure Machine Learning zostały włączone dla klastra usługi AKS. 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.
BŁĄD: ClusterServiceNotFound
Komunikat o błędzie wygląda następująco:
AzureML extension service not found in cluster.
Ten błąd powinien wystąpić, gdy usługa ruchu przychodzącego należącego do rozszerzenia nie ma wystarczającej liczby zasobników zaplecza.
Masz następujące możliwości:
- Uzyskaj dostęp do klastra i sprawdź stan usługi
azureml-ingress-nginx-controller
i jej zasobnika zaplecza wazureml
przestrzeni nazw. - Jeśli klaster nie ma uruchomionych zasobników zaplecza, sprawdź przyczynę, opisując zasobnik. Jeśli na przykład zasobnik nie ma wystarczającej ilości zasobów do uruchomienia, możesz usunąć niektóre zasobniki, aby zwolnić wystarczającą ilość zasobów dla zasobnika ruchu przychodzącego.
BŁĄD: ClusterUnauthorized
Komunikat o błędzie wygląda następująco:
Request to Kubernetes cluster unauthorized.
Ten błąd powinien wystąpić tylko w klastrze obsługującym tę funkcję, co oznacza, że token dostępu wygasł podczas wdrażania.
Możesz spróbować ponownie po kilku minutach.
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.
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żeniem Unable 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 usługi Azure Machine Learning nie obsługuje trybu pobierania 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
- Zadanie zakończyło się niepowodzeniem. E45004
- Zadanie zakończyło się niepowodzeniem. 400
- Podawanie klucza konta lub tokenu SAS
- Niepowodzenie autoryzacji w usłudze AzureBlob
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 usługi Azure Machine Learning. Więcej szczegółów można znaleźć w temacie Deploy Azure Machine Learning extension on AKS or Arc Kubernetes cluster (Wdrażanie rozszerzenia usługi Azure Machine Learning 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ą.
Problem z łączem prywatnym
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-fe
polecenie .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.