Questo documento presenta le tecniche di risoluzione dei problemi relativi ai deployment degli endpoint su Google Kubernetes Engine (GKE) e Kubernetes.
Operazione non riuscita a kubectl create -f gke.yaml
Se visualizzi 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
Crea un cluster. Puoi utilizzare 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 a
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Le metriche e i log degli endpoint non vengono visualizzati
Se puoi inviare correttamente le richieste alla tua API, ma non vedi le metriche o i log nella pagina Endpoint > Servizi in Cloud Console, procedi come riportato di seguito:
- Verifica che tutti i servizi richiesti siano attivi.
- Verifica che siano concesse tutte le autorizzazioni richieste.
Accesso ai log da Extensible Service Proxy
Se devi accedere ai log Extensible Service Proxy (ESP) per diagnosticare i problemi, utilizza kubectl
come segue:
Recupera 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 di 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 viene visualizzato il messaggio di erroreFetching service config failed
, verifica che il
nome del servizio specificato nel campo --service
nel file manifest
del deployment (noto come file deployment.yaml
) corrisponda al
nome host nella proprietà name
specificata nel file YAML di configurazione dell'API gRPC
(noto come file api_config.yaml
).
Se il file deployment.yaml
contiene un nome errato:
Apri il file
deployment.yaml
e vai alla sezione configurata per il contenitore 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 file api_config.yaml
contiene un nome errato:
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. Sono necessari 30 giorni per eliminare il servizio da Google Cloud. 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 aggiornata del servizio:
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 utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del container 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 le istruzioni ESPservice.jso
: il file di configurazione del servizio
Accedere alla pagina di stato degli endpoint
Se imposti rollout_strategy
su managed
all'avvio di ESP e devi scoprire l'ID configurazione utilizzato da un'istanza di ESP, questa pagina conterrà le informazioni relative allo stato degli endpoint.
Per accedere alla pagina dello stato degli endpoint:
Utilizza
ssh
per connetterti al pod utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del container ePOD_NAME
con il nome del pod.Installare
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 di servizio utilizzato da ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta Ricevere il nome e l'ID configurazione del servizio.