Questo documento presenta tecniche di risoluzione dei problemi per i deployment di Endpoints su Google Kubernetes Engine (GKE) e Kubernetes.
Errore in kubectl create -f gke.yaml
Se visualizzi il messaggio di errore Failed in kubectl create -f gke.yaml, segui
questa procedura:
Autorizza
gcloud:gcloud auth login gcloud auth application-default loginCreare un cluster. Puoi utilizzare il seguente comando
gcloudo 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 correttamente le richieste alla tua API, ma non visualizzi metriche o log nella pagina Endpoints > Servizi nella consoleGoogle Cloud , segui questi passaggi:
- Controlla che tutti i servizi richiesti siano attivi.
- Controlla che siano state concesse tutte le autorizzazioni richieste.
Accesso ai log da Extensible Service Proxy
Se devi accedere ai log di Extensible Service Proxy (ESP) per diagnosticare
i problemi, utilizza kubectl nel seguente modo:
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, utilizza
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 visualizzi il messaggio di erroreFetching service config failed, verifica che il nome del servizio specificato nel campo --service del file manifest di deployment (denominato file deployment.yaml) corrisponda al nome nel campo host del documento OpenAPI (denominato file openapi.yaml).
Se il nome errato si trova 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 nel campohostinopenapi.yamle salva il filedeployment.yaml.Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se il nome errato si trova nel file openapi.yaml:
Ottieni il nome del servizio che è stato configurato per l'utilizzo di Endpoints.
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
openapi.yaml, correggi il nome nel campohoste salva il file.Esegui il deployment della configurazione del servizio aggiornata:
gcloud endpoints services deploy openapi.yamlAttendi il deployment della configurazione del servizio.
Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Controllo dei file di configurazione
Utilizza
sshper connetterti al pod utilizzandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAMEcon il nome del tuo container ePOD_NAME con il nome del tuo pod. Nella directory
etc/nginx/endpoints/, controlla i seguenti file di configurazione per verificare la presenza di errori:nginx.conf- Il file di configurazionenginxcon le direttive ESPservice.jso: il file di configurazione del servizio
Accedere alla pagina di stato di Endpoints
Se hai impostato rollout_strategy su managed quando hai avviato ESP,
e devi scoprire l'ID configurazione utilizzato da un'istanza di
ESP, la pagina di stato degli endpoint contiene le informazioni.
Per accedere alla pagina di stato di Endpoints:
Utilizza
sshper connetterti al pod utilizzandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAMEcon il nome del tuo container ePOD_NAMEcon il nome del tuo pod.Installa
curl.Inserisci quanto segue:
curl http://localhost:8090/endpoints_statusViene visualizzato un messaggio 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 Recuperare il nome del servizio e l'ID configurazione.