

 **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
<a name="kro-troubleshooting"></a>

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros ni a los espacios de nombres de los controladores. 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
<a name="_capability_is_active_but_resourcegraphdefinitions_arent_working"></a>

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.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. 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](kro-permissions.md).

 **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
<a name="_instances_created_but_underlying_resources_not_appearing"></a>

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](kro-permissions.md).

## Errores de expresión de CEL
<a name="_cel_expression_errors"></a>

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
<a name="_resource_dependencies_not_resolving"></a>

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
<a name="_schema_validation_failures"></a>

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
<a name="_next_steps"></a>
+  [Consideraciones sobre kro para EKS](kro-considerations.md): consideraciones y prácticas recomendadas de kro
+  [Configuración de permisos de kro](kro-permissions.md): configuración del RBAC para los equipos de plataformas y aplicaciones
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y el ciclo de vida de los recursos
+  [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): orientación general de solución de problemas de la capacidad