Cuestionario sobre mecanismos de extensión de Kubernetes
Los temas originales de las 20 preguntas se han revisado conforme a las API y el comportamiento actuales.
1. ¿Para qué sirve un CRD?
Mostrar respuesta
Registra tipos de recursos personalizados y esquemas de entrada en la API de Kubernetes. Un CRD no implementa por sí mismo el comportamiento de una carga de trabajo.
2. ¿Qué hace un bucle de reconciliación?
Mostrar respuesta
Reconcilia el estado observado y el deseado mientras gestiona eventos repetidos, reinicios y conflictos. Evita actualizaciones innecesarias cuando el estado ya coincide.
3. ¿Qué define a un Operator y cuáles son sus límites?
Mostrar respuesta
Un Operator implementa conocimiento del dominio mediante API y controllers personalizados. Crearlos por sí solos no hace que las copias de seguridad, la conmutación por error ni las actualizaciones sean seguras.
4. ¿Qué puede devolver un mutating webhook?
Mostrar respuesta
Una respuesta AdmissionReview que permite o rechaza la solicitud y, opcionalmente, incluye JSONPatch. Conserva el UID/la versión de la solicitud; los bytes del parche se codifican en Base64.
5. ¿Qué hace un plugin Filter?
Mostrar respuesta
Excluye Nodes que no pueden satisfacer los requisitos de un Pod. Superar los filtros no completa el binding ni la ejecución.
6. ¿En qué se diferencian la agregación y los CRD?
Mostrar respuesta
Los CRD usan el almacenamiento/la validación de recursos personalizados del API server existente. La agregación delega en un servidor independiente que requiere operaciones de TLS, autenticación, autorización, descubrimiento y almacenamiento.
7. ¿Qué proporciona un finalizer?
Mostrar respuesta
Da a un controller la oportunidad de finalizar la limpieza antes de que se complete la eliminación. La cadena no ejecuta ninguna limpieza por sí misma; eliminarla sin investigar puede dejar recursos externos.
8. ¿Cuándo se ejecuta PostBind?
Mostrar respuesta
Es una fase informativa después de un binding exitoso, no una recuperación de errores universal. Implementa rutas como Unreserve para reservas fallidas o canceladas.
9. ¿Cómo se controla la inyección actual por Pod de Istio?
Mostrar respuesta
Configura sidecar.istio.io/inject en las etiquetas del Pod o de la plantilla de Pod de la carga de trabajo. Comprueba las etiquetas de inyección/revisión del namespace y la precedencia, en lugar de usar anotaciones antiguas como valores predeterminados.
10. ¿Cómo se usan los resultados de Score?
Mostrar respuesta
Clasifican los Nodes viables combinando la normalización y los pesos de los plugins. La selección en caso de empate y la gestión de errores también forman parte del comportamiento del scheduler.
11. ¿Dónde deben ubicarse los esquemas de CRD y los campos obligatorios?
Mostrar respuesta
En spec.versions[].schema.openAPIV3Schema. required: [spec] en el nivel superior y required: [image] dentro de spec imponen condiciones diferentes.
12. ¿Qué debe comprobarse para ownerReferences?
Mostrar respuesta
Comprueba el UID del propietario, el namespace/ámbito y la propiedad existente del controller. GC depende de la propagación/los finalizers; los nombres coincidentes no autorizan adoptar otra carga de trabajo.
13. ¿En qué se diferencian VAP y los validating webhooks?
Mostrar respuesta
ValidatingAdmissionPolicy es estable desde la versión 1.30 y evalúa CEL en el proceso. Los webhooks requieren llamadas remotas, TLS y gestión de disponibilidad. VAP también necesita un binding para el ámbito y validationActions.
14. ¿Qué proporciona controller-runtime?
Mostrar respuesta
Managers, clients/caches, configuración de reconciliación y elección de líder. No proporciona tipos de API personalizados, schemes, RBAC ni lógica de dominio; alinea las versiones de la biblioteca y del módulo Go de Kubernetes.
15. ¿Para qué sirve un webhook de conversión?
Mostrar respuesta
Convierte representaciones entre versiones de API de un CRD. Revisa las versiones servidas/de almacenamiento, storedVersions y la preservación semántica. No todos los CRD requieren un webhook de conversión.
16. Escribe un CRD WebApp que requiera image y replicas entre 1 y 5.
Mostrar respuesta
Esto también requiere spec y separa las rutas de status/scale. Un controller debe completar status.replicas y selector reales.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: webapps.apps.example.com
spec:
group: apps.example.com
names:
kind: WebApp
plural: webapps
singular: webapp
shortNames: [wa]
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
required: [spec]
properties:
spec:
type: object
required: [image]
properties:
replicas:
type: integer
default: 1
minimum: 1
maximum: 5
image:
type: string
minLength: 1
port:
type: integer
default: 8080
minimum: 1
maximum: 65535
status:
type: object
properties:
replicas:
type: integer
availableReplicas:
type: integer
selector:
type: string
observedGeneration:
type: integer
format: int64
subresources:
status: {}
scale:
specReplicasPath: .spec.replicas
statusReplicasPath: .status.replicas
labelSelectorPath: .status.selector17. ¿Cómo debe limitarse un validating webhook de Deployment al entorno de producción?
Mostrar respuesta
Haz coincidir los deployments de apps/v1 CREATE/UPDATE y selecciona kubernetes.io/metadata.name: production. Configura un servidor/Service/ruta de validación real, el paquete CA, failurePolicy, timeoutSeconds, sideEffects y admissionReviewVersions. El controlador /mutate de la guía no es un validador de Deployment. Para un límite de réplicas por sí solo, usa su ejemplo de VAP/binding y haz coincidir tanto deployments como deployments/scale, de modo que las actualizaciones de HPA y kubectl scale no puedan omitir el límite.
18. Describe una secuencia de reconciliación sólida.
Mostrar respuesta
Trata NotFound como una finalización exitosa. Durante la eliminación, termina la limpieza idempotente antes de eliminar únicamente tu finalizer. Conserva un finalizer antes de crear recursos externos, comprueba la propiedad de los recursos secundarios y reconcilia los campos de tu propiedad. Reintenta los conflictos y aplica parches al status observado que haya cambiado. No etiquetes pseudocódigo como un controller ejecutable.
19. ¿Qué se necesita al diseñar un Operator de base de datos distribuida?
Mostrar respuesta
Además de los esquemas y la creación de cargas de trabajo, diseña el fencing del primario, el quórum, la sincronización de réplicas, las pruebas de recuperación de backup/WAL, el ciclo de vida del almacenamiento, la compatibilidad de migración y los fallos. Crear Services, StatefulSets y CronJobs no establece la seguridad de los datos.
20. ¿Cómo debe implementarse y verificarse un scheduler personalizado?
Mostrar respuesta
Compila y registra plugins con las interfaces del framework de la versión menor exacta de Kubernetes. Alinea los nombres de profile y el schedulerName de Pod; prueba los fallos de Filter/Score y de reserva, permiso y binding. El YAML por sí solo no puede instalar un plugin. Considera primero node affinity para requisitos de zona simples.