Questo documento illustra le tecniche per la risoluzione dei problemi per i deployment di endpoint su Google Kubernetes Engine (GKE) e Kubernetes.
Operazione non riuscita tra 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 utilizzare il seguente comando
gcloud
oppure creare un cluster utilizzando la console Google Cloud.gcloud container clusters create CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.Recupera le credenziali per il tuo cluster e rendile disponibili a
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Le metriche e i log degli endpoint non vengono visualizzati
Se riesci a inviare richieste alla tua API, ma non vedi metriche o log nella pagina Endpoint > Servizi della console Google Cloud, segui questi passaggi:
- Verifica che tutti i servizi richiesti siano abilitati.
- Verifica che tutte le autorizzazioni richieste siano concesse.
Accesso ai log da Extensible Service Proxy
Se devi accedere ai log di 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 in corso...
Se visualizzi il messaggio di erroreFetching service config failed
, verifica che il nome del servizio specificato nel campo --service
del file manifest Deployment (indicato come file deployment.yaml
) corrisponda al nome host nella proprietà name
specificata nel file YAML di configurazione dell'API gRPC (definito file api_config.yaml
).
Se il nome errato è presente nel file deployment.yaml
:
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
nel fileapi_config.yaml
e salva il filedeployment.yaml
.Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se il nome errato è presente nel file api_config.yaml
:
Recupera il nome del servizio che è stato configurato per l'utilizzo da parte di Endpoints.
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
, correggi il nome host nella proprietàname
e 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 che il deployment della configurazione del servizio sia stato eseguito correttamente.
Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Controllo dei file di configurazione in corso...
Usa
ssh
per connetterti al pod utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del contenitore ePOD_NAME con il nome del pod. Nella directory
etc/nginx/endpoints/
, verifica la presenza di errori nei seguenti file di configurazione:nginx.conf
- Il file di configurazionenginx
con istruzioni ESPservice.jso
: il file di configurazione del servizio
Accesso alla pagina dello stato di Endpoints
Se hai impostato rollout_strategy
su managed
quando hai avviato ESP e devi scoprire l'ID di configurazione utilizzato da un'istanza di ESP, la pagina dello stato Endpoints contiene le informazioni.
Per accedere alla pagina di stato di Endpoints:
Usa
ssh
per connetterti al pod utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del contenitore ePOD_NAME
con il nome del pod.Installa
curl
.Inserisci quanto segue:
curl http://localhost:8090/endpoints_status
Viene visualizzato in modo simile al seguente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Il valore in rolloutId
è l'ID di configurazione del servizio utilizzato da
ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta Recupero del nome del servizio e dell'ID di configurazione.