Estás consultando la documentación de Apigee y Apigee Hybrid.
No hay documentación equivalente de
Apigee Edge sobre este tema.
En este documento se describe cómo restablecer los componentes de Apigee hybrid cuando se quedan bloqueados en el estado creating
o releasing
.
Ejecuta el siguiente comando para enumerar los componentes principales de la instalación de Apigee hybrid:
kubectl get crd | grep apigee
apigeeorganization (apigeeorganizations.apigee.cloud.google.com) apigeeenvironment (apigeeenvironments.apigee.cloud.google.com) apigeedatastore (apigeedatastores.apigee.cloud.google.com) apigeetelemetries (apigeetelemetries.apigee.cloud.google.com) apigeeredis (apigeeredis.apigee.cloud.google.com)
Ejecuta el siguiente comando para ver el estado actual:
kubectl get apigeedatastore -n NAMESPACE
Cuando funcionen correctamente, cada uno de estos componentes estará en estado running
.
Por ejemplo:
NAME STATE AGE default running 5d6h
Si la instalación no se realiza correctamente, es posible que los componentes se queden en el estado creating
(o releasing
). Por ejemplo:
NAME STATE AGE default creating 5d6h
Identificar el problema
Para identificar la causa del problema, empieza por describir cada componente. Los componentes se estructuran de la siguiente manera:
Cada recurso personalizado ApigeeOrganization
se representa mediante la siguiente jerarquía:
ApigeeOrganization/HASHED_VALUE ├─ApigeeDeployment/apigee-connect-agent-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-connect-agent-HASHED_VALUE│ ├─ReplicaSet/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-connect-agent-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-mart-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-mart-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-mart-HASHED_VALUE│ ├─ReplicaSet/apigee-mart-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-mart-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-watcher-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-watcher-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-watcher-HASHED_VALUE│ ├─ReplicaSet/apigee-watcher-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-watcher-HASHED_VALUE-VER-xxxx
Cada recurso personalizado ApigeeEnvironment
se representa mediante la siguiente jerarquía:
ApigeeEnvironment/HASHED_VALUE ├─ApigeeDeployment/apigee-runtime-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-runtime-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-runtime-HASHED_VALUE│ ├─ReplicaSet/apigee-runtime-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-runtime-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-synchronizer-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-synchronizer-HASHED_VALUE│ ├─ReplicaSet/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-synchronizer-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-udca-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-udca-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-udca-HASHED_VALUE│ ├─ReplicaSet/apigee-udca-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-udca-HASHED_VALUE-VER-xxxx
Empieza a identificar el problema describiendo el componente raíz. Por ejemplo:
kubectl describe apigeeorganization -n NAMESPACE COMPONENT_NAME
Comprueba si el State
del componente es running
:
Replicas:
Available: 1
Ready: 1
Total: 1
Updated: 1
State: running
State: running
Events: <none>
Si no se registra ningún evento en este nivel, repita el proceso con apigeedeployments
seguido de ReplicaSet
. Por ejemplo:
kubectl get apigeedeployment -n NAMESPACE AD_NAME>
Si apigeedeployments
y ReplicaSet
no muestran ningún error, céntrate en los pods que no estén listos:
kubectl get pods -n NAMESPACE
NAME READY STATUS apigee-cassandra-default-0 1/1 Running apigee-connect-agent-apigee-b56a362-150rc2-42gax-dbrrn 1/1 Running apigee-logger-apigee-telemetry-s48kb 1/1 Running apigee-mart-apigee-b56a362-150rc2-bcizm-7jv6w0
/2 Running apigee-runtime-apigee-test-0d59273-150rc2-a5mov-dfb290
/1 Running
En este ejemplo, mart
y runtime
no están listos. Inspecciona los registros del pod
para determinar los errores:
kubectl logs -n NAMESPACE POD_NAME
Eliminar componentes
Si te has equivocado con alguno de estos componentes, elimina el componente y vuelve a crear el entorno con Helm:
kubectl delete -n apigee apigeeenv HASHED_ENV_NAME
A continuación, crea el entorno (después de hacer las correcciones necesarias):
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE \ --dry-run=server
Asegúrate de incluir todos los ajustes que se muestran, incluido --atomic
para que la acción se revierta si falla.
Instala el gráfico:
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE
Inspeccionar el mando
Si no hay mensajes de error evidentes en el pod, pero el componente no ha pasado al estado running
, inspecciona el apigee-controller
para ver si hay mensajes de error.
kubectl logs -n NAMESPACE $(k get pods -n NAMESPACE | sed -n '2p' | awk '{print $1}') | grep -i error
De esta forma, el usuario puede ver por qué el controlador no ha podido procesar la solicitud (de create
/delete
/update
, etc.).
Almacén de datos de Apigee
Apache Cassandra se implementa como un StatefulSet
. Cada instancia de Cassandra contiene lo siguiente:
ApigeeDatastore/default
├─Certificate/apigee-cassandra-default │ └─CertificateRequest/apigee-cassandra-default-wnd7s ├─Secret/config-cassandra-default ├─Service/apigee-cassandra-default │ ├─EndpointSlice/apigee-cassandra-default-7m9kx │ └─EndpointSlice/apigee-cassandra-default-gzqpr└─StatefulSet/apigee-cassandra-default
├─ControllerRevision/apigee-cassandra-default-6976b77bd ├─ControllerRevision/apigee-cassandra-default-7fc76588cb└─Pod/apigee-cassandra-default-0
En este ejemplo se muestra un pod, pero las instalaciones de producción suelen contener tres o más pods.
Si el estado de Cassandra es creating
o releasing
, el estado DEBE restablecerse. Para solucionar algunos problemas (como los cambios de contraseña de Cassandra) y otros que no estén relacionados con la red, puede que tengas que eliminar componentes. Es muy posible que, en estos casos, no pueda eliminar la instancia (es decir, kubectl delete apigeedatastore -n NAMESPACE default
). Tampoco sirve de nada usar --force
o --grace-period=0
.
El objetivo de reset
es cambiar el estado del componente
(apigeedatastore
) de creating
o releasing
a
running
. Si cambias el estado de esta forma, no se solucionará el problema subyacente. En la mayoría de los casos, el componente se debe eliminar después de un restablecimiento.
Intenta eliminarlo (no se completará):
kubectl delete -n NAMESPACE apigeedatastore default
Es habitual que este comando no se complete. Usa Ctrl+C para finalizar la llamada.
Restablecer el estado:
En la ventana 1:
kubectl proxy
En la ventana 2:
curl -X PATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'
Elimina el finalizador (ventana 2):
kubectl edit -n NAMESPACE apigeedatastore default
Busque las dos líneas siguientes y elimínelas:
finalizers: - apigeedatastore.apigee.cloud.google.com
Situaciones de error habituales
La configuración del proxy no está disponible con el tiempo de ejecución
Este error puede manifestarse de dos formas:
- El
runtime
no está en el estadoready
. - El
runtime
no ha recibido la última versión de la API.
Empieza con los
synchronizer
pods.Inspecciona los registros de
synchronizer
. Estos son algunos de los errores más habituales:- Falta de conectividad de red (a
*.googleapi.com
) - Acceso de gestión de identidades y accesos incorrecto (la cuenta de servicio no está disponible o no se ha proporcionado con el permiso de Synchronizer Manager)
- No se ha invocado la API setSyncAuthorization
- Falta de conectividad de red (a
Inspecciona los pods
runtime
.Si inspeccionas los registros de los pods
runtime
, verás por quéruntime
no ha cargado la configuración. El plano de control intenta evitar que la mayoría de los errores de configuración lleguen al plano de datos. En los casos en los que una validación sea imposible o no se haya implementado correctamente, elruntime
no podrá cargarla.
"No runtime pods" in the control plane
Empieza con los
synchronizer
pods.Consulta los registros de la
synchronizer
. Estos son algunos de los errores más habituales:- Falta de conectividad de red (a
*.googleapi.com
) - Acceso de gestión de identidades y accesos incorrecto (la cuenta de servicio no está disponible o no se ha proporcionado con el permiso de Synchronizer Manager)
- No se ha invocado la API setSyncAuthorization. Es posible que la configuración nunca haya llegado al plano de datos.
- Falta de conectividad de red (a
Inspecciona los pods
runtime
.Si inspeccionas los registros de los pods
runtime
, verás por quéruntime
no ha cargado la configuración.Inspecciona los pods
watcher
.Es el componente
watcher
el que configura el acceso (enrutamiento) y comunica el estado de implementación del proxy y del acceso al plano de control. Inspecciona estos registros para averiguar por quéwatcher
no informa del estado. Entre los motivos habituales se incluye una discrepancia entre los nombres del archivooverrides.yaml
y el plano de control del nombre del entorno o del nombre del grupo de entornos.
La sesión de depuración no aparece en el plano de control
Empieza con los
synchronizer
pods.Inspecciona los registros de
synchronizer
. Estos son algunos de los errores más habituales:- Falta de conectividad de red (a
*.googleapi.com
) - Acceso de gestión de identidades y accesos incorrecto (la cuenta de servicio no está disponible o no se ha proporcionado con el permiso de Synchronizer Manager)
- No se ha invocado la API setSyncAuthorization.
- Falta de conectividad de red (a
- Inspecciona los pods
runtime
.
Si inspeccionas los registros de los podsruntime
podrás ver por quéruntime
no envía registros de depuración a UDCA. - Inspecciona los pods de UDCA.
Al inspeccionar los registros de UDCA, se mostrará por qué UDCA no envía información de la sesión de depuración al plano de control.
Cassandra devuelve respuestas de caché grandes
El siguiente mensaje de advertencia indica que Cassandra está recibiendo solicitudes de lectura o escritura con una carga útil mayor y se puede ignorar sin problemas, ya que este umbral de advertencia se ha definido con un valor inferior para indicar los tamaños de la carga útil de la respuesta.
Batch for [cache_ahg_gap_prod_hybrid.cache_map_keys_descriptor, cache_ahg_gap_prod_hybrid.cache_map_entry] is of size 79.465KiB, exceeding specified threshold of 50.000KiB by 29.465KiB