@@ -27,6 +27,7 @@ import (
27
27
"k8s.io/apimachinery/pkg/runtime"
28
28
"k8s.io/apimachinery/pkg/types"
29
29
"k8s.io/client-go/kubernetes"
30
+ "knative.dev/pkg/apis"
30
31
knservingv1 "knative.dev/serving/pkg/apis/serving/v1"
31
32
ctrl "sigs.k8s.io/controller-runtime"
32
33
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -149,6 +150,7 @@ func (e *Explainer) Reconcile(ctx context.Context, isvc *v1beta1.InferenceServic
149
150
explainerAnnotations ,
150
151
),
151
152
}
153
+
152
154
container := explainer .GetContainer (isvc .ObjectMeta , isvc .Spec .Explainer .GetExtensions (), e .inferenceServiceConfig , predictorName )
153
155
if len (isvc .Spec .Explainer .PodSpec .Containers ) == 0 {
154
156
isvc .Spec .Explainer .PodSpec .Containers = []corev1.Container {
@@ -162,46 +164,79 @@ func (e *Explainer) Reconcile(ctx context.Context, isvc *v1beta1.InferenceServic
162
164
163
165
// Here we allow switch between knative and vanilla deployment
164
166
if e .deploymentMode == constants .RawDeployment {
165
- r , err := raw .NewRawKubeReconciler (ctx , e .client , e .clientset , e .scheme , constants .InferenceServiceResource , objectMeta , metav1.ObjectMeta {},
166
- & isvc .Spec .Explainer .ComponentExtensionSpec , & podSpec , nil )
167
- if err != nil {
168
- return ctrl.Result {}, errors .Wrapf (err , "fails to create NewRawKubeReconciler for explainer" )
169
- }
170
- // set Deployment Controller
171
- for _ , deployment := range r .Deployment .DeploymentList {
172
- if err := controllerutil .SetControllerReference (isvc , deployment , e .scheme ); err != nil {
173
- return ctrl.Result {}, errors .Wrapf (err , "fails to set deployment owner reference for explainer" )
174
- }
175
- }
176
- // set Service Controller
177
- for _ , svc := range r .Service .ServiceList {
178
- if err := controllerutil .SetControllerReference (isvc , svc , e .scheme ); err != nil {
179
- return ctrl.Result {}, errors .Wrapf (err , "fails to set service owner reference for explainer" )
180
- }
167
+ if err := e .reconcileExplainerRawDeployment (ctx , isvc , & objectMeta , & podSpec ); err != nil {
168
+ return ctrl.Result {}, err
181
169
}
182
- // set autoscaler Controller
183
- if err := r . Scaler . Autoscaler . SetControllerReferences ( isvc , e . scheme ); err != nil {
184
- return ctrl.Result {}, errors . Wrapf ( err , "fails to set autoscaler owner references for explainer" )
170
+ } else {
171
+ if err := e . reconcileExplainerKnativeDeployment ( ctx , isvc , & objectMeta , & podSpec ); err != nil {
172
+ return ctrl.Result {}, err
185
173
}
174
+ }
186
175
187
- deployment , err := r .Reconcile (ctx )
188
- if err != nil {
189
- return ctrl.Result {}, errors .Wrapf (err , "fails to reconcile explainer" )
176
+ if utils .GetForceStopRuntime (isvc ) {
177
+ // Exit early if we have already set the explainer's status to stopped
178
+ existingExplainerCondition := isvc .Status .GetCondition (v1beta1 .ExplainerReady )
179
+ if existingExplainerCondition != nil && existingExplainerCondition .Status == corev1 .ConditionFalse && existingExplainerCondition .Reason == v1beta1 .StoppedISVCReason {
180
+ return ctrl.Result {}, nil
190
181
}
191
- isvc .Status .PropagateRawStatus (v1beta1 .ExplainerComponent , deployment , r .URL )
192
- } else {
193
- knutils .ValidateInitialScaleAnnotation (objectMeta .Annotations , e .allowZeroInitialScale , isvc .Spec .Explainer .MinReplicas , e .Log )
194
- r := knative .NewKsvcReconciler (e .client , e .scheme , objectMeta , & isvc .Spec .Explainer .ComponentExtensionSpec ,
195
- & podSpec , isvc .Status .Components [v1beta1 .ExplainerComponent ], e .inferenceServiceConfig .ServiceLabelDisallowedList )
196
182
197
- if err := controllerutil .SetControllerReference (isvc , r .Service , e .scheme ); err != nil {
198
- return ctrl.Result {}, errors .Wrapf (err , "fails to set owner reference for explainer" )
183
+ // Set the ready condition to false
184
+ isvc .Status .SetCondition (v1beta1 .ExplainerReady , & apis.Condition {
185
+ Type : v1beta1 .ExplainerReady ,
186
+ Status : corev1 .ConditionFalse ,
187
+ Reason : v1beta1 .StoppedISVCReason ,
188
+ })
189
+ }
190
+ return ctrl.Result {}, nil
191
+ }
192
+
193
+ func (e * Explainer ) reconcileExplainerRawDeployment (ctx context.Context , isvc * v1beta1.InferenceService , objectMeta * metav1.ObjectMeta , podSpec * corev1.PodSpec ) error {
194
+ r , err := raw .NewRawKubeReconciler (ctx , e .client , e .clientset , e .scheme , constants .InferenceServiceResource , * objectMeta , metav1.ObjectMeta {},
195
+ & isvc .Spec .Explainer .ComponentExtensionSpec , podSpec , nil )
196
+ if err != nil {
197
+ return errors .Wrapf (err , "fails to create NewRawKubeReconciler for explainer" )
198
+ }
199
+ // set Deployment Controller
200
+ for _ , deployment := range r .Deployment .DeploymentList {
201
+ if err := controllerutil .SetControllerReference (isvc , deployment , e .scheme ); err != nil {
202
+ return errors .Wrapf (err , "fails to set deployment owner reference for explainer" )
199
203
}
200
- status , err := r .Reconcile (ctx )
201
- if err != nil {
202
- return ctrl.Result {}, errors .Wrapf (err , "fails to reconcile explainer" )
204
+ }
205
+ // set Service Controller
206
+ for _ , svc := range r .Service .ServiceList {
207
+ if err := controllerutil .SetControllerReference (isvc , svc , e .scheme ); err != nil {
208
+ return errors .Wrapf (err , "fails to set service owner reference for explainer" )
203
209
}
210
+ }
211
+ // set autoscaler Controller
212
+ if err := r .Scaler .Autoscaler .SetControllerReferences (isvc , e .scheme ); err != nil {
213
+ return errors .Wrapf (err , "fails to set autoscaler owner references for explainer" )
214
+ }
215
+
216
+ deployment , err := r .Reconcile (ctx )
217
+ if err != nil {
218
+ return errors .Wrapf (err , "fails to reconcile explainer" )
219
+ }
220
+ if ! utils .GetForceStopRuntime (isvc ) {
221
+ isvc .Status .PropagateRawStatus (v1beta1 .ExplainerComponent , deployment , r .URL )
222
+ }
223
+ return nil
224
+ }
225
+
226
+ func (e * Explainer ) reconcileExplainerKnativeDeployment (ctx context.Context , isvc * v1beta1.InferenceService , objectMeta * metav1.ObjectMeta , podSpec * corev1.PodSpec ) error {
227
+ knutils .ValidateInitialScaleAnnotation (objectMeta .Annotations , e .allowZeroInitialScale , isvc .Spec .Explainer .MinReplicas , e .Log )
228
+ r := knative .NewKsvcReconciler (e .client , e .scheme , * objectMeta , & isvc .Spec .Explainer .ComponentExtensionSpec ,
229
+ podSpec , isvc .Status .Components [v1beta1 .ExplainerComponent ], e .inferenceServiceConfig .ServiceLabelDisallowedList )
230
+
231
+ if err := controllerutil .SetControllerReference (isvc , r .Service , e .scheme ); err != nil {
232
+ return errors .Wrapf (err , "fails to set owner reference for explainer" )
233
+ }
234
+ status , err := r .Reconcile (ctx )
235
+ if err != nil {
236
+ return errors .Wrapf (err , "fails to reconcile explainer" )
237
+ }
238
+ if ! utils .GetForceStopRuntime (isvc ) {
204
239
isvc .Status .PropagateStatus (v1beta1 .ExplainerComponent , status )
205
240
}
206
- return ctrl. Result {}, nil
241
+ return nil
207
242
}
0 commit comments