@@ -23,11 +23,11 @@ import (
2323
2424 corev1 "k8s.io/api/core/v1"
2525 apimeta "k8s.io/apimachinery/pkg/api/meta"
26- "k8s.io/apimachinery/pkg/api/resource"
2726 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2827 "k8s.io/apimachinery/pkg/runtime"
2928 "k8s.io/apimachinery/pkg/types"
3029 "k8s.io/apimachinery/pkg/util/intstr"
30+ coreapplyv1 "k8s.io/client-go/applyconfigurations/core/v1"
3131 metaapplyv1 "k8s.io/client-go/applyconfigurations/meta/v1"
3232 "k8s.io/client-go/tools/record"
3333 "k8s.io/klog/v2"
@@ -116,7 +116,10 @@ func (r *ServiceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
116116 return ctrl.Result {}, err
117117 }
118118
119- workloadApplyConfiguration := buildWorkloadApplyConfiguration (service , models )
119+ workloadApplyConfiguration , err := buildWorkloadApplyConfiguration (service , models )
120+ if err != nil {
121+ return ctrl.Result {}, err
122+ }
120123 if err := setControllerReferenceForWorkload (service , workloadApplyConfiguration , r .Scheme ); err != nil {
121124 return ctrl.Result {}, err
122125 }
@@ -159,14 +162,35 @@ func (r *ServiceReconciler) SetupWithManager(mgr ctrl.Manager) error {
159162 Complete (r )
160163}
161164
162- func buildWorkloadApplyConfiguration (service * inferenceapi.Service , models []* coreapi.OpenModel ) * applyconfigurationv1.LeaderWorkerSetApplyConfiguration {
165+ func buildWorkloadApplyConfiguration (service * inferenceapi.Service , models []* coreapi.OpenModel ) ( * applyconfigurationv1.LeaderWorkerSetApplyConfiguration , error ) {
163166 workload := applyconfigurationv1 .LeaderWorkerSet (service .Name , service .Namespace )
164167
165168 leaderWorkerTemplate := applyconfigurationv1 .LeaderWorkerTemplate ()
166169 if service .Spec .WorkloadTemplate .LeaderTemplate != nil {
167- leaderWorkerTemplate .WithLeaderTemplate (* service .Spec .WorkloadTemplate .LeaderTemplate )
170+ // construct pod template spec configuration
171+ obj , err := runtime .DefaultUnstructuredConverter .ToUnstructured (service .Spec .WorkloadTemplate .LeaderTemplate )
172+ if err != nil {
173+ return nil , err
174+ }
175+ var podTemplateSpecApplyConfiguration coreapplyv1.PodTemplateSpecApplyConfiguration
176+ err = runtime .DefaultUnstructuredConverter .FromUnstructured (obj , & podTemplateSpecApplyConfiguration )
177+ if err != nil {
178+ return nil , err
179+ }
180+ leaderWorkerTemplate .WithLeaderTemplate (& podTemplateSpecApplyConfiguration )
168181 }
169- leaderWorkerTemplate .WithWorkerTemplate (service .Spec .WorkloadTemplate .WorkerTemplate )
182+
183+ // construct pod template spec configuration
184+ obj , err := runtime .DefaultUnstructuredConverter .ToUnstructured (& service .Spec .WorkloadTemplate .WorkerTemplate )
185+ if err != nil {
186+ return nil , err
187+ }
188+ var podTemplateSpecApplyConfiguration coreapplyv1.PodTemplateSpecApplyConfiguration
189+ err = runtime .DefaultUnstructuredConverter .FromUnstructured (obj , & podTemplateSpecApplyConfiguration )
190+ if err != nil {
191+ return nil , err
192+ }
193+ leaderWorkerTemplate .WithWorkerTemplate (& podTemplateSpecApplyConfiguration )
170194
171195 // The core logic to inject additional configurations.
172196 injectModelProperties (leaderWorkerTemplate , models , service )
@@ -188,7 +212,7 @@ func buildWorkloadApplyConfiguration(service *inferenceapi.Service, models []*co
188212 spec .WithStartupPolicy (lws .LeaderReadyStartupPolicy )
189213
190214 workload .WithSpec (spec )
191- return workload
215+ return workload , nil
192216}
193217
194218func injectModelProperties (template * applyconfigurationv1.LeaderWorkerTemplateApplyConfiguration , models []* coreapi.OpenModel , service * inferenceapi.Service ) {
@@ -234,14 +258,14 @@ func injectModelProperties(template *applyconfigurationv1.LeaderWorkerTemplateAp
234258 }
235259}
236260
237- func injectModelFlavor (template * corev1. PodTemplateSpec , model * coreapi.OpenModel , service * inferenceapi.Service ) {
261+ func injectModelFlavor (template * coreapplyv1. PodTemplateSpecApplyConfiguration , model * coreapi.OpenModel , service * inferenceapi.Service ) {
238262 if model .Spec .InferenceConfig == nil || len (model .Spec .InferenceConfig .Flavors ) == 0 {
239263 return
240264 }
241265
242- container := & corev1. Container {}
266+ container := & coreapplyv1. ContainerApplyConfiguration {}
243267 for i , c := range template .Spec .Containers {
244- if c .Name == modelSource .MODEL_RUNNER_CONTAINER_NAME {
268+ if * c .Name == modelSource .MODEL_RUNNER_CONTAINER_NAME {
245269 container = & template .Spec .Containers [i ]
246270 }
247271 }
@@ -256,17 +280,20 @@ func injectModelFlavor(template *corev1.PodTemplateSpec, model *coreapi.OpenMode
256280 if flavor .Name == flavorName {
257281 limits := model .Spec .InferenceConfig .Flavors [i ].Limits
258282 for k , v := range limits {
283+ if container .Resources == nil {
284+ container .WithResources (coreapplyv1 .ResourceRequirements ())
285+ }
259286 if container .Resources .Requests == nil {
260- container .Resources .Requests = map [ corev1.ResourceName ]resource. Quantity {}
287+ container .Resources .WithRequests ( corev1.ResourceList {})
261288 }
262289 // overwrite the requests and limits.
263- container .Resources .Requests [k ] = v
290+ ( * container .Resources .Requests ) [k ] = v
264291
265292 if container .Resources .Limits == nil {
266- container .Resources .Limits = map [ corev1.ResourceName ]resource. Quantity {}
293+ container .Resources .WithLimits ( corev1.ResourceList {})
267294 }
268295 // overwrite the requests and limits.
269- container .Resources .Limits [k ] = v
296+ ( * container .Resources .Limits ) [k ] = v
270297 }
271298 break
272299 }
0 commit comments