Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Sintomi
I deployment di proxy API non vanno a buon fine e viene mostrato l'avviso Nessun pod di runtime attivo nella UI ibrida di Apigee.
Messaggi di errore
L'avviso Nessun pod di runtime attivo viene visualizzato nella finestra di dialogo Dettagli accanto al messaggio di errore Problemi di deployment su ENVIRONMENT: REVISION_NUMBER nella pagina del proxy API:
Questo problema può manifestarsi come errori diversi in altre pagine di risorse della UI. Ecco alcuni esempi di messaggi di errore:
Messaggio di errore UI ibrida n. 1: Errore Datastore
Potresti notare l'errore Datastore nelle pagine Prodotti API e App della UI ibrida, come mostrato di seguito:
Messaggio di errore dell'interfaccia utente ibrida n. 2: errore del server interno
Potresti notare un errore interno del server nella pagina Sviluppatori dell'interfaccia utente, come mostrato di seguito:
Output comando kubectl
Potresti notare che gli stati dei pod apiege-mart
, apigee-runtime
e apigee-
synchronizer
vengono modificati in CrashLoopBackOff
nell'output comando kubectl get pods
:
Messaggi di errore del log dei componenti
Osserverai i seguenti errori di errore del probe di attività nei log del pod apigee-runtime
nelle release ibride di Apigee >= 1.4.0:
{"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\t ","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
Osserverai il seguente Cannot build a cluster without contact points
errore
nei log dei pod apigee-synchronizer
nelle release ibride di Apigee >= 1.4.0:
{"timestamp":"1621575636434","level":"ERROR","thread":"main","logger":"KERNEL.DEPLOYMENT","message": "ServiceDeployer.deploy() : Got a life cycle exception while starting service [SyncService, Cannot build a cluster without contact points] : {}","context":"apigee-service- logs","exception":"java.lang.IllegalArgumentException: Cannot build a cluster without contact points\n\tat com.datastax.driver.core.Cluster.checkNotEmpty(Cluster.java:134)\n\tat com.datastax.driver.core.Cluster.<init>(Cluster.java:127)\n\tat com.datastax.driver.core.Cluster.buildFrom(Cluster.java:193)\n\tat com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1350)\n\tat io.apigee.persistence.PersistenceContext.newCluster(PersistenceContext.java:214)\n\tat io.apigee.persistence.PersistenceContext.<init>(PersistenceContext.java:48)\n\tat io.apigee.persistence.ApplicationContext.<init>(ApplicationContext.java:19)\n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceImpl.<init>(RuntimeConfigServiceImpl.java:75) \n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceFactory.newInstance(RuntimeConfigServiceFactory. java:99)\n\tat io.apigee.common.service.AbstractServiceFactory.initializeService(AbstractServiceFactory.java:301)\n \tat ...","severity":"ERROR","class":"com.apigee.kernel.service.deployment.ServiceDeployer","method":"sta rtService"}
Osserverai i seguenti errori di errore del probe di attività nei log del pod apigee-mart
nelle release ibride di Apigee >= 1.4.0:
{"timestamp":"1621576757592","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\t","conte xt":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621576757593","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
Informazioni sull'errore Nessun pod di runtime attivo
Nella release Apigee hybrid 1.4.0, la funzionalità del probe di attività è stata aggiunta ai pod apigee-runtime
e apigee-mart
per controllare lo stato dei pod Cassandra. Se tutti i pod Cassandra non sono più disponibili, i probe di attività dei pod apigee-runtime
e apigee-mart
avranno esito negativo. Di conseguenza,
i pod
apigee-runtime
e apigee-mart
assumeranno lo
CrashLoopBackOff
stato, causando l'errore dei deployment dei proxy API, con l'avviso
No active runtime pods
.
Anche il pod apigee-synchronizer
passerà allo stato CrashLoopBackOff
perché i pod Cassandra non sono disponibili.
Cause possibili
Ecco alcune possibili cause di questo errore:
Causa | Descrizione |
---|---|
I pod Cassandra non sono disponibili | I pod Cassandra non sono attivi, pertanto i pod apigee-runtime non potranno comunicare con il database Cassandra. |
Replica Cassandra configurata con un solo pod | Avere un solo pod Cassandra potrebbe diventare un single point of failure. |
Causa: i pod Cassandra non sono attivi
Durante il processo di deployment del proxy API, i pod apigee-runtime
si connettono al database Cassandra per recuperare risorse come le mappe chiave-valore (KVM) e le cache definite nel proxy API. Se non ci sono pod Cassandra in esecuzione, i pod apigee-runtime
non potranno connettersi al database Cassandra. Questo causa l'errore di deployment del proxy API.
Diagnosi
- Elenca i pod Cassandra:
kubectl -n apigee get pods -l app=apigee-cassandra
Esempio di output 1:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 0/1 Pending 0 9m23s
Esempio di output 2:
NAME READY STATUS RESTARTS AGE apigee-cassandra-0 0/1 CrashLoopBackoff 0 10m
- Verifica lo stato di ogni pod Cassandra. Lo stato di tutti i pod Cassandra deve essere in stato
Running
. Se uno dei pod Cassandra si trova in uno stato diverso, questo potrebbe essere il motivo del problema. Per risolvere il problema, procedi nel seguente modo:
Risoluzione
- Se uno dei pod Cassandra è nello stato
Pending
, consulta la sezione I pod Cassandra sono bloccati nello stato In attesa per risolvere il problema. - Se uno dei pod Cassandra è in stato
CrashLoopBackoff
, consulta la sezione I pod Cassandra sono bloccati nello stato CrashLoopBackoff per risolvere il problema.Esempio di output:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
Causa: replica Cassandra configurata con un solo pod
Se il numero di repliche di Cassandra è configurato su uno, sarà disponibile un solo pod Cassandra nel runtime. Di conseguenza, i pod apigee-runtime
potrebbero riscontrare problemi di connettività se quel pod Cassandra non è più disponibile per un determinato periodo di tempo.
Diagnosi
- Recupera il set stateful Cassandra e controlla il numero di repliche attuale:
kubectl -n apigee get statefulsets -l app=apigee-cassandra
Esempio di output:
NAME READY AGE apigee-cassandra-default 1/1 21m
- Se il numero di repliche è configurato su 1, segui questi passaggi per aumentarlo fino a un numero più alto.
Risoluzione
I deployment di Apigee ibridi non di produzione potrebbero avere il numero di repliche Cassandra impostato su 1. Se l'alta disponibilità di Cassandra è importante nei deployment non di produzione, aumenta il numero di repliche a 3 per risolvere il problema.
Per risolvere il problema, procedi nel seguente modo:
- Aggiorna il file
overrides.yaml
e imposta il conteggio delle repliche di Cassandra su 3:cassandra: replicaCount: 3
Per informazioni sulla configurazione di Cassandra, consulta Riferimento per le proprietà di configurazione.
- Applica la configurazione sopra utilizzando l'interfaccia a riga di comando
apigeectl
:cd path/to/hybrid-files apigeectl apply -f overrides/overrides.yaml
- Recupera il set stateful Cassandra e controlla il numero di repliche attuale:
kubectl -n get statefulsets -l app=apigee-cassandra
Esempio di output:
NAME READY AGE apigee-cassandra-default 3/3 27m
- recupera i pod Cassandra e controlla il numero di istanze attuale. Se tutti i pod non sono pronti e nello stato
Running
, attendi che vengano creati e attivati i nuovi pod Cassandra:kubectl -n get pods -l app=apigee-cassandra
Esempio di output:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 29m apigee-cassandra-default-1 1/1 Running 0 21m apigee-cassandra-default-2 1/1 Running 0 19m
Esempio di output:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
Deve raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee.
- ID progetto Google Cloud
- Organizzazione Apigee ibrido/Apigee
- Per Apigee hybrid:
overrides.yaml
, che maschera qualsiasi informazioni sensibili - Stato dei pod Kubernetes in tutti gli spazi dei nomi:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Dump delle informazioni sul cluster Kubernetes:
# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
Riferimenti
- Scalabilità orizzontale di Cassandra
- Introspezione e debug delle applicazioni Kubernetes
- Scheda di riferimento di kubectl