Solución de problemas con capacidades de kro - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Solución de problemas con capacidades de kro

En este tema, se proporcionan instrucciones para la solución de problemas de la capacidad de EKS para kro, como las comprobaciones de estado de la capacidad, los permisos de RBAC, los errores de expresión de CEL y los problemas de composición de los recursos.

nota

Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros del controlador ni al espacio de nombres kro-system. La solución de problemas se centra en el estado de la capacidad, la configuración de RBAC y el estado de los recursos.

La capacidad está ACTIVA, pero ResourceGraphDefinitions no funciona

Si la capacidad de kro muestra el estado ACTIVE, pero ResourceGraphDefinitions no crea recursos subyacentes, compruebe el estado de la capacidad, los permisos de RBAC y el estado de los recursos.

Compruebe el estado de la capacidad:

Puede ver los problemas de estado de la capacidad en la consola de EKS o mediante la AWS CLI.

Consola:

  1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home#/clusters.

  2. Seleccione el nombre del clúster.

  3. Seleccione la pestaña Observabilidad.

  4. Elija Supervisar clúster.

  5. Seleccione la pestaña Capacidades para ver el estado de todas las capacidades.

AWS CLI:

# View capability status and health aws eks describe-capability \ --region region-code \ --cluster-name my-cluster \ --capability-name my-kro # Look for issues in the health section

Causas habituales:

  • Faltan los permisos de RBAC: kro no tiene permisos para crear los recursos subyacentes de Kubernetes

  • Expresiones de CEL no válidas: errores de sintaxis en ResourceGraphDefinition

  • Dependencias de recursos: los recursos dependientes no están listos

  • Validación del esquema: la instancia no cumple con los requisitos del esquema de RGD

Compruebe los permisos de RBAC:

# Check if capability has cluster admin policy kubectl get accessentry -A | grep kro

Si la capacidad no tiene los permisos necesarios, asocie la AmazonEKSClusterAdminPolicy a la entrada de acceso de la capacidad de kro o cree políticas de RBAC más restrictivas para su uso en producción. Para obtener más información, consulte Configuración de permisos de kro.

Compruebe el estado de ResourceGraphDefinition:

# List all RGDs kubectl get resourcegraphdefinition # Describe specific RGD kubectl describe resourcegraphdefinition my-rgd # Check for validation errors kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'

Las ResourceGraphDefinitions tienen tres condiciones de estado clave:

  • ResourceGraphAccepted: si la RGD ha superado la validación (sintaxis de CEL, comprobación de tipos, existencia de campos)

  • KindReady: si la CRD de la API personalizada se generó y registró

  • ControllerReady: si kro está supervisando activamente las instancias de la API personalizada

Si ResourceGraphAccepted es False, compruebe el mensaje de la condición para ver si hay errores de validación, como campos desconocidos, discrepancias de tipos o dependencias circulares.

Se crearon las instancias, pero los recursos subyacentes no aparecen

Si existen instancias de recursos personalizadas, pero no se crean los recursos de Kubernetes subyacentes (implementaciones, servicios, ConfigMaps), compruebe que kro tenga permisos y si hay errores de composición.

Compruebe el estado de la instancia:

# Describe the instance (replace with your custom resource kind and name) kubectl describe custom-kind my-instance # View instance events kubectl get events --field-selector involvedObject.name=my-instance # Check instance status conditions kubectl get custom-kind my-instance -o jsonpath='{.status.conditions}' # Check instance state kubectl get custom-kind my-instance -o jsonpath='{.status.state}'

Las instancias tienen un campo state que muestra el estado de alto nivel:

  • ACTIVE: la instancia se está ejecutando correctamente.

  • IN_PROGRESS: la instancia se está procesando o conciliando.

  • FAILED: no se pudo conciliar la instancia.

  • DELETING: la instancia se está eliminando.

  • ERROR: se ha producido un error durante el procesamiento.

Las instancias también tienen cuatro condiciones de estado:

  • InstanceManaged: los finalizadores y las etiquetas están configurados correctamente.

  • GraphResolved: se creó un gráfico de tiempo de ejecución y se resolvieron los recursos.

  • ResourcesReady: todos los recursos están creados y listos.

  • Ready: estado general de la instancia (solo pasa a True cuando todas las subcondiciones son True).

Céntrese en la condición Ready para determinar el estado de la instancia. Si Ready es False, compruebe las subcondiciones para identificar en qué fase se ha producido el error.

Compruebe los permisos de RBAC:

La capacidad de kro necesita permisos para crear los recursos de Kubernetes subyacentes definidos en las ResourceGraphDefinitions.

# Check if the capability has the AmazonEKSClusterAdminPolicy kubectl get accessentry -A | grep kro

Si faltan los permisos, asocie la AmazonEKSClusterAdminPolicy a la entrada de acceso de la capacidad de kro o cree políticas de RBAC más restrictivas para su uso en producción. Para obtener más información, consulte Configuración de permisos de kro.

Errores de expresión de CEL

Los errores de expresión de CEL se detectan en el momento de la creación de ResourceGraphDefinition, no cuando se crean las instancias. kro valida toda la sintaxis de CEL, compara las expresiones con los esquemas de Kubernetes y verifica la existencia de los campos al crear la RGD.

Errores comunes de validación de CEL:

  • Referencia de campo no definida: se hace referencia a un campo que no existe en el esquema o el recurso.

  • Discrepancia de tipos: la expresión devuelve un tipo incorrecto (por ejemplo, una cadena cuando se espera un número entero).

  • Sintaxis no válida: faltan corchetes, comillas u operadores en la expresión de CEL.

  • Tipo de recurso desconocido: se hace referencia a una CRD que no existe en el clúster.

Compruebe el estado de validación de la RGD:

# Check if RGD was accepted kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}' # View detailed validation errors kubectl describe resourcegraphdefinition my-rgd

Si ResourceGraphAccepted es False, el mensaje de condición contiene el error de validación.

Ejemplos de expresiones de CEL válidas:

# Reference schema field ${schema.spec.appName} # Conditional expression ${schema.spec.replicas > 1} # String template (expressions must return strings) name: "${schema.spec.appName}-service" # Standalone expression (can be any type) replicas: ${schema.spec.replicaCount} # Resource reference ${deployment.status.availableReplicas} # Optional field access (returns null if field doesn't exist) ${configmap.data.?DATABASE_URL}

No se resuelven las dependencias de los recursos

kro infiere automáticamente las dependencias a partir de expresiones de CEL y crea los recursos en el orden correcto. Si los recursos no se crean según lo previsto, compruebe el orden de dependencia y la disponibilidad de los recursos.

Consulte el orden de creación de computación:

# See the order kro will create resources kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'

Se muestra el orden de computación en función de las referencias de expresiones de CEL entre los recursos.

Compruebe la preparación de los recursos:

# View instance status to see which resources are ready kubectl get custom-kind my-instance -o jsonpath='{.status}' # Check specific resource status kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'

Compruebe las condiciones readyWhen (si se utilizan):

El campo readyWhen es opcional. Si no se especifica, los recursos se consideran listos inmediatamente después de su creación. Si ha definido las condiciones readyWhen, verifique que comprueben correctamente si los recursos están listos:

resources: - id: deployment readyWhen: - ${deployment.status.availableReplicas == deployment.spec.replicas}

Compruebe los eventos de los recursos:

# View events for the underlying resources kubectl get events -n namespace --sort-by='.lastTimestamp'

Errores de validación del esquema

Si las instancias no se crean debido a errores de validación del esquema, compruebe que la instancia cumpla con los requisitos del esquema de RGD.

Compruebe los errores de validación:

# Attempt to create instance and view error kubectl apply -f instance.yaml # View existing instance validation status kubectl describe custom-kind my-instance | grep -A 5 "Validation"

Problemas de validación comunes:

  • Faltan campos obligatorios: la instancia no proporciona todos los campos del esquema obligatorios.

  • Discrepancia de tipos: se proporciona una cadena cuando se espera un entero.

  • Valor de enumeración no válido: se utiliza un valor que no está en la lista de permitidos.

  • Discrepancia de patrones: la cadena no coincide con el patrón de expresión regular.

Revise el esquema de RGD:

# View the schema definition kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'

Asegúrese de que la instancia proporcione todos los campos obligatorios con los tipos correctos.

Siguientes pasos