Implementation:Kserve Kserve TrainedModel Reconciler
| Knowledge Sources | |
|---|---|
| Domains | MLOps, Model_Management, Kubernetes |
| Last Updated | 2026-02-13 00:00 GMT |
Overview
Concrete Go reconciler that manages TrainedModel lifecycle including validation, ConfigMap synchronization, status tracking, and cascade deletion.
Description
The TrainedModelReconciler manages the full lifecycle of TrainedModel resources. It validates the parent ISVC, manages finalizers for cleanup, delegates to ModelConfigReconciler for ConfigMap writes, and updates status conditions via updateConditions() and updateStatus().
ConfigsDelta.Process() in configmap.go handles encoding/decoding of models.json in the ConfigMap data. The MemoryStrategy.GetOrAssignShard() always returns shard 0 (single shard mode).
Usage
This reconciler runs automatically in the KServe controller manager. It processes TrainedModel create/update/delete events.
Code Reference
Source Location
- Repository: kserve
- File: pkg/controller/v1alpha1/trainedmodel/controller.go, Lines 65-308
- File: pkg/controller/v1alpha1/trainedmodel/reconcilers/modelconfig/modelconfig_reconciler.go, Lines 52-94
- File: pkg/modelconfig/configmap.go, Lines 85-117
Signature
// TrainedModelReconciler reconciles TrainedModel resources
type TrainedModelReconciler struct {
Client client.Client
Clientset kubernetes.Interface
Log logr.Logger
Scheme *runtime.Scheme
Recorder record.EventRecorder
ModelConfigReconciler *modelconfig.ModelConfigReconciler
}
// Reconcile handles TrainedModel create/update/delete
func (r *TrainedModelReconciler) Reconcile(ctx context.Context,
req ctrl.Request) (ctrl.Result, error)
// updateConditions checks ISVC ready, MMS enabled, memory available
func (r *TrainedModelReconciler) updateConditions(ctx context.Context,
tm *v1alpha1.TrainedModel) error
// ConfigsDelta.Process encodes/decodes models.json in ConfigMap
func (cd *ConfigsDelta) Process(configMap *v1.ConfigMap) error
Import
import "github.com/kserve/kserve/pkg/controller/v1alpha1/trainedmodel"
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| req | ctrl.Request | Yes | Namespaced name of TrainedModel to reconcile |
Outputs
| Name | Type | Description |
|---|---|---|
| ConfigMap update | v1.ConfigMap | models.json updated with model spec |
| Status conditions | []Condition | InferenceServiceReady, IsMMSPredictor, MemoryResourceAvailable |
| Status URL | URL | Per-model prediction URL derived from parent ISVC |
Usage Examples
Monitor Reconciliation
# Check TrainedModel status conditions
kubectl get trainedmodel model1-sklearn -o yaml
# Expected conditions when healthy:
# conditions:
# - type: InferenceServiceReady
# status: "True"
# - type: IsMMSPredictor
# status: "True"
# - type: MemoryResourceAvailable
# status: "True"
# - type: Ready
# status: "True"
# Check ConfigMap content
kubectl get configmap modelconfig-sklearn-iris-example-0 -o yaml
# data:
# models.json: '[{"modelName":"model1-sklearn",...}]'