Questo documento presenta tecniche di risoluzione dei problemi per i deployment degli endpoint su Google Kubernetes Engine (GKE) e Kubernetes.
Operazione non riuscita in kubectl create -f gke.yaml
Se viene visualizzato il messaggio di errore Failed in kubectl create -f gke.yaml
, procedi nel seguente modo:
Autorizza
gcloud
:gcloud auth login gcloud auth application-default login
Creare un cluster. Puoi usare il seguente comando
gcloud
oppure creare un cluster utilizzando Google Cloud Console.gcloud container clusters create CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.Recupera le credenziali per il cluster e rendile disponibili per
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Le metriche e i log degli endpoint non vengono visualizzati
Se puoi inviare le richieste alla tua API, ma non vedi le metriche o i log nella pagina Endpoint > Servizi in Google Cloud Console, segui questi passaggi:
- Verifica che tutti i servizi richiesti siano attivi.
- Seleziona tutte le autorizzazioni richieste.
Accedere ai log da Extensible Service Proxy
Se devi accedere ai log Extensible Service Proxy (ESP) per diagnosticare
i problemi, utilizza kubectl
come segue:
Ottieni il nome del pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21s
Il nome del pod è
esp-echo-174578890-x09gl
e ha due container:esp
eecho
.Per visualizzare i log in un pod, utilizza
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
Dove
POD_NAME
eCONTAINER_NAME
vengono restituiti dal comandokubectl get pod
, nel passaggio precedente. Ad esempio:kubectl logs esp-echo-174578890-x09gl -c esp
Verifica del nome del servizio
Se viene visualizzato il messaggio di erroreFetching service config failed
, verifica che il nome del servizio specificato nel campo --service
nel file manifest di deployment (indicato come file deployment.yaml
) corrisponda al nome host nella proprietà name
specificata nel file YAML della configurazione dell'API gRPC (indicato come file api_config.yaml
).
Se il nome del file deployment.yaml
non è corretto:
Apri il file
deployment.yaml
e vai alla sezione configurata per il container ESP. Ad esempio: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" ]
Modifica
SERVICE_NAME
in modo che corrisponda al nome host specificato nella proprietàname
del fileapi_config.yaml
e salva il filedeployment.yaml
.Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se il nome del file api_config.yaml
non è corretto:
Recupera il nome del servizio che endpoint è stato configurato.
Elimina il servizio:
gcloud endpoints services delete SERVICE_NAME
Sostituisci
SERVICE_NAME
con il nome del passaggio precedente. L'eliminazione del servizio da Google Cloud richiede 30 giorni. Durante questo periodo non puoi riutilizzare il nome del servizio.Apri il file
api_config.yaml
e correggi il nome host nella proprietàname
, quindi salva il file.Esegui il deployment della configurazione del servizio aggiornata:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
Attendi il completamento del deployment della configurazione del servizio.
Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Controllo dei file di configurazione in corso...
Utilizza
ssh
per connetterti al pod tramitekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del tuo container ePOD_NAME con il nome del tuo pod. Nella directory
etc/nginx/endpoints/
, verifica la presenza di errori nei seguenti file di configurazione:nginx.conf
: il file di configurazionenginx
con le istruzioni ESPservice.jso
: file di configurazione del servizio
Accedere alla pagina dello stato degli endpoint
Se imposti rollout_strategy
su managed
quando hai avviato ESP
e devi trovare l'ID di configurazione utilizzato da
un'istanza, la pagina dello stato degli endpoint contiene le informazioni.
Per accedere alla pagina dello stato degli endpoint:
Utilizza
ssh
per connetterti al pod tramitekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del tuo container ePOD_NAME
con il nome del tuo pod.Installa
curl
.Inserisci quanto segue:
curl http://localhost:8090/endpoints_status
Il risultato è simile al seguente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Il valore in rolloutId
è l'ID configurazione del servizio utilizzato da ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta la sezione Ottenere il nome e l'ID configurazione del servizio.