Mejores prácticas para Operadores de Kubernetes
Reconciliadores idempotentes, diseño basado en nivel y lista de verificación de producción para operadores.
Busca en todas las páginas de la documentación
Reconciliadores idempotentes, diseño basado en nivel y lista de verificación de producción para operadores.
Estas reglas convierten los puntos débiles recurrentes de los operadores en hábitos de revisión, puertas de CI y opciones de empaquetado que mantienen los controladores seguros a escala.
envtest y operator-sdk bundle validate en CI en cada etiqueta de lanzamiento.client.IgnoreNotFound en objetos primarios eliminados. Evite métricas de error para carreras entre la eliminación y la reconciliación final.Status().Update para condiciones y preparación. Nunca modifique campos de estado a través de Update genérico en el objeto completo.RequeueAfter para esperas esperadas. Reserve los errores devueltos para fallos genuinos que merezcan una alerta.Owns sin pegamento solo de etiquetas.failurePolicy: Fail para validación crítica de seguridad. Empareje con pods de webhook HA y monitoreo de certificados.config/crd/bases sin sincronizar los tipos de Go.kubectl get. Los ingenieros de soporte deben ver la fase y la preparación sin volcados de YAML.Terminating indican una lógica de limpieza faltante.Owns hijo impulse las actualizaciones de preparación.envtest ocultan fallos de decodificación en producción.envtest o fake client. Los errores de eliminación son incidentes de producción.workqueue_retries_total preceden a las páginas de incidentes.ctrl.SetupSignalHandler. Libere las concesiones de manera oportuna en las actualizaciones continuas.AllNamespaces sin RBAC de clúster bloquea la revisión de seguridad.OwnNamespace sobre la lista de Secretos a nivel de clúster para plataformas SaaS.--leader-elect y límites de recursos en el Deployment de CSV. HA sin elección duplica efectos secundarios externos.operator-sdk bundle validate detecta descriptores de CRD poseídos faltantes.replaces y skips en los metadatos de CSV.Reconciliación idempotente, referencias de propietario en hijos, finalizadores para recursos externos, elección de líder con 2 réplicas y cobertura de envtest para rutas de creación/eliminación.
Use las secciones A y D en cada cambio de controlador.
Reserve las secciones OLM y multi-inquilino para PRs de lanzamiento y empaquetado.
La reconciliación basada en nivel lee la especificación actual y el estado del clúster en cada pasada.
Los manejadores de eventos que solo agregan efectos secundarios pierden la deriva y la resincronización periódica.
Cuando la validación abarca múltiples campos de especificación o depende del contexto solo de admisión.
Los límites mínimos/máximos simples pertenecen primero a los marcadores CRD.
Múltiples reconciliadores activos sin elección de líder que modifican el mismo sistema externo, o finalizadores que nunca se borran después de una limpieza fallida.
Ejecute make test, make manifests diff check, bundle validate y golangci-lint en los paquetes del controlador.
Bloquee las fusiones cuando los marcadores RBAC cambien sin YAML regenerado.
Solo cuando los clientes necesiten explícitamente instancias de CR en todo el clúster y acepten RBAC con ámbito de clúster.
De lo contrario, OwnNamespace o SingleNamespace reducen el radio de explosión.
Métricas de cola de trabajo integradas del controller-runtime más uno o dos contadores de dominio (resultado de reconciliación, latencia de API externa) por controlador.
Estados Ready, progressing, degraded y terminating con convenciones de condiciones meta de Kubernetes y códigos reason claros.
Cuando CRDs no relacionados tienen dominios de fallo independientes o necesidades de RBAC diferentes.
Un solo Manager está bien para un dominio de producto con cachés compartidos.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (GC por defecto Green Tea, go fix modernizers - verificar parche en la compilación), chi (última - verificar en la compilación), gin (última - verificar en la compilación), echo (última - verificar en la compilación), google.golang.org/grpc (última - verificar en la compilación), sigs.k8s.io/controller-runtime (última - verificar en la compilación), kubebuilder (última - verificar en la compilación), tinygo (última - verificar objetivos de placa en la compilación), wazero (última - verificar en la compilación), y golangci-lint (última - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026