Questo documento illustra le tecniche di risoluzione dei problemi per i deployment di Endpoints su Google Kubernetes Engine (GKE) e Kubernetes.
Non riuscita in kubectl create -f gke.yaml
Se viene visualizzato il messaggio di errore Failed in kubectl create -f gke.yaml, segui questi passaggi:
Autorizza
gcloud:gcloud auth login gcloud auth application-default loginCreare un cluster. Puoi utilizzare il seguente
gcloudcomando o creare un cluster utilizzando la Google Cloud console.gcloud container clusters create CLUSTER_NAME
Sostituisci
CLUSTER_NAMEcon il nome del cluster.Recupera le credenziali per il tuo cluster e rendile disponibili per
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 visualizzi metriche o log nella pagina Endpoints > Servizi della consoleGoogle Cloud , svolgi i seguenti passaggi:
- Verifica che tutti i servizi richiesti siano abilitati.
- Verifica che tutte le autorizzazioni richieste siano state 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:
Recupera il nome del pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sIl nome del pod è
esp-echo-174578890-x09gle ha due container:espeecho.Per visualizzare i log in un pod, usa
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
Dove
POD_NAMEeCONTAINER_NAMEvengono restituiti dal comandokubectl get podnel 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 del file manifest del deployment (chiamato file deployment.yaml) corrisponda al nome host nella proprietà name specificata nel file YAML di configurazione dell'API gRPC (chiamato file api_config.yaml).
Se il nome errato è nel file deployment.yaml:
Apri il file
deployment.yamle 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_NAMEin modo che corrisponda al nome dell'host specificato nella proprietànamenel fileapi_config.yamle salva ildeployment.yaml.Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se il nome errato è nel file api_config.yaml:
Ottieni il nome del servizio che Endpoints è stato configurato per utilizzare.
Elimina il servizio:
gcloud endpoints services delete SERVICE_NAME
Sostituisci
SERVICE_NAMEcon il nome del passaggio precedente. Sono necessari 30 giorni per l'eliminazione del servizio da Google Cloud. Durante questo periodo non potrai riutilizzare il nome del servizio.Apri il file
api_config.yaml, correggi il nome host nella proprietànamee salva il file.Esegui il deployment della configurazione del servizio aggiornata:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yamlAttendi il completamento del deployment della configurazione del servizio.
Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Controllo dei file di configurazione
Usa
sshper connetterti al pod utilizzandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAMEcon il nome del contenitore ePOD_NAME con il nome del pod. Nella directory
etc/nginx/endpoints/, controlla se sono presenti errori nei seguenti file di configurazione:nginx.conf- Il file di configurazionenginxcon le direttive ESPservice.jso- Il file di configurazione del servizio
Accedere alla pagina dello stato degli endpoint
Se hai impostato rollout_strategy su managed quando hai avviato ESP e devi conoscere l'ID configurazione utilizzato da un'istanza di ESP, le informazioni sono disponibili nella pagina Stato endpoint.
Per accedere alla pagina dello stato degli endpoint:
Usa
sshper connetterti al pod utilizzandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAMEcon il nome del contenitore ePOD_NAMEcon il nome del pod.Installa
curl.Inserisci quanto segue:
curl http://localhost:8090/endpoints_statusViene visualizzato qualcosa di simile al seguente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Il valore in rolloutId è l'ID configurazione del servizio utilizzato dall'ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta Ottenere il nome del servizio e l'ID configurazione.