Skip to content

Cuestionario de Kube Resource Orchestrator (kro) ​

kro

Estas preguntas conservan los 20 temas originales usando kro 0.9.4.

1. ¿Cuáles son los conceptos principales de kro? ​

Mostrar respuesta

Defina esquemas de API y grafos de recursos en RGD, infiera dependencias a partir de referencias CEL y reconcilie instancias. kro no es un ejecutor de scripts imperativos.

2. ¿Dónde se declaran las definiciones de recursos administrados? ​

Mostrar respuesta

En spec.resources, mediante el id de cada entrada y template o externalRef. El anterior childResources no es un campo actual de RGD.

3. ¿Qué proporciona kro junto con Helm? ​

Mostrar respuesta

Un grafo de referencias de recursos y reconciliación continua de instancias. Helm proporciona renderizado de charts y gestión de releases; pueden funcionar juntos. Ninguno es universalmente mejor para cada carga de trabajo.

4. ¿Cómo se hace referencia a las entradas de instancia en CEL? ​

Mostrar respuesta

Use schema.spec o schema.metadata, como ${schema.spec.replicas}. No use .parent ni sintaxis de plantillas Go.

5. ¿Cómo se configura la inclusión condicional de recursos? ​

Mostrar respuesta

Use expresiones CEL Boolean en includeWhen. Cambiar las condiciones puede añadir o eliminar recursos, por lo que se deben revisar las implicaciones del ciclo de vida para recursos con estado.

6. ¿Dónde se proyectan los valores de estado de los recursos administrados? ​

Mostrar respuesta

Defina expresiones CEL en spec.schema.status, por ejemplo ${deployment.status.availableReplicas}. statusMappings no es un campo actual.

7. ¿Cómo se ordenan las dependencias y la preparación? ​

Mostrar respuesta

Las referencias CEL a otros ID de recursos infieren un DAG. Los dependientes también esperan las condiciones readyWhen cuando están presentes. Los ciclos se rechazan; el orden de listado de YAML no sustituye a las dependencias.

8. ¿Qué sucede cuando se elimina una instancia? ​

Mostrar respuesta

El kro actual usa el inventario de ApplySet y oleadas de eliminación para eliminar primero los dependientes, conservando un finalizer. Los finalizers secundarios pueden bloquear el progreso. Los destinos de referencias externas no se eliminan.

9. ¿Qué observa los cambios de instancias? ​

Mostrar respuesta

Los controladores dinámicos de instancias de kro observan los cambios y reconcilian grafos. La validación y compilación de RGD/GraphRevision afectan el progreso de las instancias.

10. ¿Qué hace kubectl apply? ​

Mostrar respuesta

Crea o actualiza el estado deseado del CR, tras lo cual los controladores reconcilian. El éxito de apply no equivale a la compilación del grafo ni a que la aplicación esté lista, y no garantiza efectos externos transaccionales.

11. ¿Qué es un RGD? ​

Mostrar respuesta

ResourceGraphDefinition define el esquema de API generado, los recursos administrados y las relaciones de estado. Es distinto de un CR de instancia de aplicación.

12. ¿Qué proporciona entradas análogas a los valores de Helm? ​

Mostrar respuesta

El spec de la instancia de API generada. Sus tipos, valores predeterminados y límites de SimpleSchema deben coincidir con los campos que realmente consumen las plantillas.

13. ¿Cómo se hace referencia a otro recurso? ​

Mostrar respuesta

Haga referencia directamente a su ID de recurso, como ${deployment.spec.selector.matchLabels} o ${service.metadata.name}. No use .children.

14. ¿Qué rastrea los recursos administrados y permite diagnosticar eliminaciones? ​

Mostrar respuesta

Inspeccione el inventario actual de ApplySet, los metadatos de propietario y las oleadas de eliminación internal.kro.run/apply-order. No trate una anotación kro.run/owner inventada como todo el contrato de seguimiento.

15. ¿Cómo se validan los esquemas de entrada? ​

Mostrar respuesta

SimpleSchema se convierte en el esquema OpenAPI del CRD generado, que Kubernetes usa para validar instancias. La estructura de RGD, la comprobación de tipos CEL del compilador de grafos y la preparación en tiempo de ejecución son verificaciones independientes.

16. Escriba la instancia de ejemplo NginxApp. ​

Mostrar respuesta

Primero asegúrese de que el RGD esté Active y que su CRD generado esté Established. Esta instancia deshabilita ingress.

yaml
apiVersion: platform.example.com/v1alpha1
kind: NginxApp
metadata:
  name: reviewed-web
  namespace: example
spec:
  replicas: 2
  image: nginxinc/nginx-unprivileged:1.30.4-alpine
  ingress:
    enabled: false
    className: internal
    host: app.example.com
    tlsSecret: app-tls

17. Escriba la entrada de recurso que crea un Deployment. ​

Mostrar respuesta

Esta es la misma plantilla que la guía. readyWhen solo se refiere al propio Deployment; verifique la imagen, el namespace y las políticas en el entorno real.

yaml
resources:
- id: deployment
  readyWhen:
  - ${deployment.status.availableReplicas >= deployment.spec.replicas}
  - ${deployment.status.observedGeneration >= deployment.metadata.generation}
  template:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ${schema.metadata.name}
      namespace: ${schema.metadata.namespace}
      labels:
        app.kubernetes.io/name: ${schema.metadata.name}
    spec:
      replicas: ${schema.spec.replicas}
      selector:
        matchLabels:
          app.kubernetes.io/name: ${schema.metadata.name}
      template:
        metadata:
          labels:
            app.kubernetes.io/name: ${schema.metadata.name}
        spec:
          automountServiceAccountToken: false
          securityContext:
            runAsNonRoot: true
            runAsUser: 101
            runAsGroup: 101
            fsGroup: 101
            seccompProfile:
              type: RuntimeDefault
          containers:
          - name: web
            image: ${schema.spec.image}
            ports:
            - name: http
              containerPort: 8080
            securityContext:
              allowPrivilegeEscalation: false
              readOnlyRootFilesystem: true
              capabilities:
                drop:
                - ALL
            resources:
              requests:
                cpu: 100m
                memory: 64Mi
              limits:
                cpu: 500m
                memory: 128Mi
            readinessProbe:
              httpGet:
                path: /
                port: http
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir:
              sizeLimit: 64Mi

18. Exponga availableReplicas en status. ​

Mostrar respuesta

Esta es la sección status en spec.schema de RGD. La resolución puede esperar valores faltantes; no representa de forma exhaustiva la salud de la aplicación.

yaml
status:
  availableReplicas: ${deployment.status.availableReplicas}
  serviceIP: ${service.spec.clusterIP}

19. Diseñe una estrategia de desarrollo/staging/producción. ​

Mostrar respuesta

Comparta un contrato de API validado y digests de imágenes, a la vez que separa namespaces, réplicas, ingress y políticas por instancia. Prepare kro/RGD/permisos en cada clúster y use herramientas de flota para la sincronización. Los campos de autoscaling no utilizados no crean un HPA.

20. ¿Cuáles son los límites de Helm y kro para aplicaciones con estado? ​

Mostrar respuesta

Ninguno implementa automáticamente backup, restauración, failover o migración de esquemas de bases de datos. Valide el comportamiento de un operator dedicado o de un servicio administrado, así como la retención de datos. Restaurar una especificación de Git no es una reversión de base de datos; los últimos GraphRevisions fallidos no vuelven automáticamente a una versión anterior.

Pregunta a la documentación

Enter envía, Shift+Enter añade una línea.