In diesem Dokument werden Methoden zur Fehlerbehebung für Endpoints-Deployments in Google Kubernetes Engine und Kubernetes erläutert.
Fehler in kubectl create -f gke.yaml
Wenn die Fehlermeldung Failed in kubectl create -f gke.yaml angezeigt wird, führen Sie die folgenden Schritte aus:
Autorisieren Sie
gcloud:gcloud auth login gcloud auth application-default loginErstellen Sie einen Cluster. Sie können entweder den folgenden
gcloud-Befehl verwenden oder einen Cluster mithilfe der Google Cloud Console erstellen.gcloud container clusters create CLUSTER_NAME
Ersetzen Sie
CLUSTER_NAMEdurch den Namen Ihres Clusters.Rufen Sie die Anmeldedaten für Ihren Cluster ab und stellen Sie diese für
kubectlbereit:gcloud container clusters get-credentials CLUSTER_NAME
Endpoints-Messwerte und -Logs werden nicht angezeigt
Wenn Sie erfolgreich Anfragen an Ihre API senden können, aber in derGoogle Cloud Console auf der Seite Endpoints > Dienste keine Messwerte oder Logs sehen, führen Sie die folgenden Schritte aus:
- Prüfen Sie, ob alle erforderlichen Dienste aktiviert sind.
- Prüfen Sie, ob alle erforderlichen Berechtigungen erteilt wurden.
Auf Extensible Service Proxy-Logs zugreifen
Wenn Sie zur Diagnose von Problemen auf die ESP-Logs (Extensible Service Proxy) zugreifen müssen, verwenden Sie kubectl so:
Rufen Sie den Namen des Pods ab:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sDer Name des Pods lautet
esp-echo-174578890-x09gl. Er enthält die beiden Containerespundecho.So rufen Sie die Logs in einem Pod mithilfe von
kubectl logsauf:kubectl logs POD_NAME -c CONTAINER_NAME
Dabei sind
POD_NAMEundCONTAINER_NAMEdie vom Befehlkubectl get podaus dem vorherigen Schritt zurückgegebenen Werte. Beispiel:kubectl logs esp-echo-174578890-x09gl -c esp
Dienstnamen überprüfen
Wenn Sie die FehlermeldungFetching service config failed erhalten, prüfen Sie, ob der im Feld --service der Deployment-Manifestdatei (Datei deployment.yaml) angegebene Dienstname mit dem Namen übereinstimmt, der im Feld host des OpenAPI-Dokuments (Datei openapi.yaml) angegeben ist.
Wenn sich in der Datei deployment.yaml ein falscher Name befindet:
Öffnen Sie die Datei
deployment.yamlund suchen Sie den Abschnitt, der für den ESP-Container konfiguriert ist. Beispiel:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]Ändern Sie
SERVICE_NAMEso, dass er mit dem Namen im Feldhostinopenapi.yamlübereinstimmt. Speichern Sie dann die Dateideployment.yaml.Starten Sie den Kubernetes-Dienst:
kubectl create -f deployment.yaml
Wenn sich der falsche Name in der Datei openapi.yaml befindet:
Rufen Sie den Dienstnamen ab, der für die Verwendung durch Endpoints konfiguriert wurde.
Löschen Sie den Dienst:
gcloud endpoints services delete SERVICE_NAME
Ersetzen Sie
SERVICE_NAMEdurch den Namen aus dem vorherigen Schritt. Es dauert 30 Tage, bis der Dienst ausGoogle Cloudgelöscht wird. Sie können den Dienstnamen während dieser Zeit nicht wiederverwenden.Öffnen Sie die Datei
openapi.yamlund korrigieren Sie den Namen im Feldhost. Speichern Sie dann die Datei.Stellen Sie die aktualisierte Dienstkonfiguration bereit:
gcloud endpoints services deploy openapi.yamlWarten Sie, bis die Dienstkonfiguration erfolgreich bereitgestellt wurde.
Starten Sie den Kubernetes-Dienst:
kubectl create -f deployment.yaml
Konfigurationsdateien prüfen
Verwenden Sie
ssh, um mitkubectleine Verbindung zum Pod herzustellen:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ersetzen Sie
CONTAINER_NAMEdurch den Namen des Containers undPOD_NAME durch den Namen des Pods. Prüfen Sie im Verzeichnis
etc/nginx/endpoints/die folgenden Konfigurationsdateien auf Fehler:nginx.conf: Dienginx-Konfigurationsdatei mit ESP-Anweisungenservice.jso: Die Dienstkonfigurationsdatei
Endpoints-Statusseite aufrufen
Wenn rollout_strategy beim Start des ESP auf managed festgelegt war und Sie die Konfigurations-ID herausfinden müssen, die eine Instanz des ESP verwendet, können Sie die entsprechende Information auf der Endpoints-Statusseite abrufen.
So rufen Sie die Endpoints-Statusseite auf:
Verwenden Sie
ssh, um mitkubectleine Verbindung zum Pod herzustellen:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ersetzen Sie
CONTAINER_NAMEdurch den Namen des Containers undPOD_NAMEdurch den Namen des Pods.Installieren Sie
curl:Geben Sie Folgendes ein:
curl http://localhost:8090/endpoints_statusEs wird in etwa Folgendes angezeigt:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Der Wert in rolloutId ist die Dienstkonfigurations-ID, die vom ESP verwendet wird. Wie Sie prüfen, ob der ESP dieselbe Konfiguration wie Endpoints verwendet, erfahren Sie unter Dienstname und Konfigurations-ID abrufen.