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
Dienstname prü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 Hostnamen übereinstimmt, der im Attribut name
der YAML-Datei mit der gRPC API-Konfiguration (Datei api_config.yaml
) angegeben ist.
Wenn sich der falsche Name in der Datei deployment.yaml
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 Hostnamen im Attributname
der Dateiapi_config.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 api_config.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
api_config.yaml
und korrigieren Sie den Hostnamen im Attributname
. Speichern Sie dann die Datei.Stellen Sie die aktualisierte Dienstkonfiguration bereit:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.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.