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 login
Erstellen 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_NAME
durch den Namen Ihres Clusters.Rufen Sie die Anmeldedaten für Ihren Cluster ab und stellen Sie diese für
kubectl
bereit: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 der Google 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 21s
Der Name des Pods lautet
esp-echo-174578890-x09gl
. Er enthält die beiden Containeresp
undecho
.So rufen Sie die Logs in einem Pod mithilfe von
kubectl logs
auf:kubectl logs POD_NAME -c CONTAINER_NAME
Dabei sind
POD_NAME
undCONTAINER_NAME
die vom Befehlkubectl get pod
aus 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.yaml
und 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_NAME
so, dass er mit dem Namen im Feldhost
inopenapi.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_NAME
durch den Namen aus dem vorherigen Schritt. Es dauert 30 Tage, bis der Dienst aus Google Cloud gelöscht wird. Sie können den Dienstnamen während dieser Zeit nicht wiederverwenden.Öffnen Sie die Datei
openapi.yaml
und korrigieren Sie den Namen im Feldhost
. Speichern Sie dann die Datei.Stellen Sie die aktualisierte Dienstkonfiguration bereit:
gcloud endpoints services deploy openapi.yaml
Warten Sie, bis die Dienstkonfiguration erfolgreich bereitgestellt wurde.
Starten Sie den Kubernetes-Dienst:
kubectl create -f deployment.yaml
Konfigurationsdateien prüfen
Verwenden Sie
ssh
, um mitkubectl
eine Verbindung zum Pod herzustellen:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ersetzen Sie
CONTAINER_NAME
durch 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 mitkubectl
eine Verbindung zum Pod herzustellen:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ersetzen Sie
CONTAINER_NAME
durch den Namen des Containers undPOD_NAME
durch den Namen des Pods.Installieren Sie
curl
:Geben Sie Folgendes ein:
curl http://localhost:8090/endpoints_status
Es 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.