Skip to content

Commit 4b9b21f

Browse files
Adding support for hostpath on NIMService
Signed-off-by: Vishesh Tanksale <[email protected]>
1 parent 6126245 commit 4b9b21f

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

api/apps/v1alpha1/nimservice_types.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ func (n *NIMService) GetVolumesMounts() []corev1.Volume {
700700
}
701701

702702
// GetVolumes returns volumes for the NIMService container.
703-
func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
703+
func (n *NIMService) GetVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
704704
// TODO: Fetch actual PVC name from associated NIMCache obj
705705
volumes := []corev1.Volume{
706706
{
@@ -712,15 +712,28 @@ func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume
712712
},
713713
},
714714
},
715-
{
715+
}
716+
if modelPVC != nil {
717+
volumes = append(volumes, corev1.Volume{
716718
Name: "model-store",
717719
VolumeSource: corev1.VolumeSource{
718720
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
719721
ClaimName: modelPVC.Name,
720722
ReadOnly: n.GetStorageReadOnly(),
721723
},
722724
},
723-
},
725+
})
726+
} else {
727+
hostPathType := corev1.HostPathDirectoryOrCreate
728+
volumes = append(volumes, corev1.Volume{
729+
Name: "model-store",
730+
VolumeSource: corev1.VolumeSource{
731+
HostPath: &corev1.HostPathVolumeSource{
732+
Path: *n.Spec.Storage.HostPath,
733+
Type: &hostPathType,
734+
},
735+
},
736+
})
724737
}
725738

726739
if n.GetProxySpec() != nil {
@@ -729,7 +742,7 @@ func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume
729742
return volumes
730743
}
731744

732-
func (n *NIMService) GetLeaderVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
745+
func (n *NIMService) GetLeaderVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
733746
volumes := n.GetVolumes(modelPVC)
734747

735748
volumes = append(volumes,
@@ -774,7 +787,7 @@ func (n *NIMService) GetLeaderVolumes(modelPVC PersistentVolumeClaim) []corev1.V
774787
return volumes
775788
}
776789

777-
func (n *NIMService) GetWorkerVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
790+
func (n *NIMService) GetWorkerVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
778791
volumes := n.GetVolumes(modelPVC)
779792
volumes = append(volumes,
780793
corev1.Volume{
@@ -814,12 +827,16 @@ func (n *NIMService) GetWorkerVolumes(modelPVC PersistentVolumeClaim) []corev1.V
814827
}
815828

816829
// GetVolumeMounts returns volumes for the NIMService container.
817-
func (n *NIMService) GetVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
830+
func (n *NIMService) GetVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
831+
subPath := ""
832+
if modelPVC != nil {
833+
subPath = modelPVC.SubPath
834+
}
818835
volumeMounts := []corev1.VolumeMount{
819836
{
820837
Name: "model-store",
821838
MountPath: "/model-store",
822-
SubPath: modelPVC.SubPath,
839+
SubPath: subPath,
823840
},
824841
{
825842
Name: "dshm",
@@ -833,7 +850,7 @@ func (n *NIMService) GetVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.Vo
833850
return volumeMounts
834851
}
835852

836-
func (n *NIMService) GetWorkerVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
853+
func (n *NIMService) GetWorkerVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
837854
volumeMounts := n.GetVolumeMounts(modelPVC)
838855

839856
volumeMounts = append(volumeMounts,
@@ -858,7 +875,7 @@ func (n *NIMService) GetWorkerVolumeMounts(modelPVC PersistentVolumeClaim) []cor
858875
return volumeMounts
859876
}
860877

861-
func (n *NIMService) GetLeaderVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
878+
func (n *NIMService) GetLeaderVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
862879
volumeMounts := n.GetVolumeMounts(modelPVC)
863880
volumeMounts = append(volumeMounts,
864881
corev1.VolumeMount{

api/apps/v1alpha1/nimservice_types_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func TestGetVolumes(t *testing.T) {
110110

111111
for _, tt := range tests {
112112
t.Run(tt.name, func(t *testing.T) {
113-
vols := tt.nimService.GetVolumes(tt.modelPVC)
113+
vols := tt.nimService.GetVolumes(&tt.modelPVC)
114114
if !reflect.DeepEqual(vols, tt.desired) {
115115
t.Errorf("GetVolumes() = %v, want %v", vols, tt.desired)
116116
}

internal/controller/platform/kserve/nimservice.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
152152
modelPVC, modelProfile, nimCache, err = r.renderAndSyncCache(ctx, nimService)
153153
if err != nil {
154154
return ctrl.Result{}, err
155-
} else if modelPVC == nil {
155+
} else if nimCache == nil {
156156
return ctrl.Result{}, nil
157157
}
158158

@@ -340,6 +340,8 @@ func (r *NIMServiceReconciler) renderAndSyncCache(ctx context.Context,
340340
} else if nimService.Spec.Storage.PVC.Name != "" {
341341
// Use an existing PVC
342342
modelPVC = &nimService.Spec.Storage.PVC
343+
} else if nimService.Spec.Storage.HostPath != nil && *nimService.Spec.Storage.HostPath != "" {
344+
modelPVC = nil
343345
} else {
344346
err := fmt.Errorf("neither external PVC name or NIMCache volume is provided")
345347
logger.Error(err, "failed to determine PVC for model-store")
@@ -476,8 +478,8 @@ func (r *NIMServiceReconciler) renderAndSyncInferenceService(ctx context.Context
476478
}, isvcParams.Env)
477479
}
478480
// Setup volume mounts with model store
479-
isvcParams.Volumes = nimService.GetVolumes(*modelPVC)
480-
isvcParams.VolumeMounts = nimService.GetVolumeMounts(*modelPVC)
481+
isvcParams.Volumes = nimService.GetVolumes(modelPVC)
482+
isvcParams.VolumeMounts = nimService.GetVolumeMounts(modelPVC)
481483
if profileEnv != nil {
482484
isvcParams.Env = utils.MergeEnvVars(*profileEnv, isvcParams.Env)
483485
}

internal/controller/platform/standalone/nimservice.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,11 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
355355
} else if nimService.Spec.Storage.PVC.Name != "" {
356356
// Use an existing PVC
357357
modelPVC = &nimService.Spec.Storage.PVC
358+
} else if nimService.Spec.Storage.HostPath != nil && *nimService.Spec.Storage.HostPath != "" {
359+
modelPVC = nil
358360
} else {
359-
err = fmt.Errorf("neither external PVC name or NIMCache volume is provided")
360-
logger.Error(err, "failed to determine PVC for model-store")
361+
err = fmt.Errorf("neither external PVC name, NIMCache volume or local host path should be provided")
362+
logger.Error(err, "failed to determine PVC or host path for model-store")
361363
return ctrl.Result{}, err
362364
}
363365

@@ -409,8 +411,8 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
409411
lwsParams := nimService.GetLWSParams()
410412
lwsParams.PodResourceClaims = shared.GetPodResourceClaims(namedDraResources)
411413
lwsParams.OrchestratorType = string(r.GetOrchestratorType())
412-
lwsParams.LeaderVolumes = nimService.GetLeaderVolumes(*modelPVC)
413-
lwsParams.WorkerVolumes = nimService.GetWorkerVolumes(*modelPVC)
414+
lwsParams.LeaderVolumes = nimService.GetLeaderVolumes(modelPVC)
415+
lwsParams.WorkerVolumes = nimService.GetWorkerVolumes(modelPVC)
414416
if nimCache.IsUniversalNIM() {
415417
lwsParams.WorkerEnvs = utils.MergeEnvVars([]corev1.EnvVar{{
416418
Name: "NIM_MODEL_NAME",
@@ -421,8 +423,8 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
421423
Value: utils.DefaultModelStorePath,
422424
}}, lwsParams.LeaderEnvs)
423425
}
424-
lwsParams.LeaderVolumeMounts = nimService.GetLeaderVolumeMounts(*modelPVC)
425-
lwsParams.WorkerVolumeMounts = nimService.GetWorkerVolumeMounts(*modelPVC)
426+
lwsParams.LeaderVolumeMounts = nimService.GetLeaderVolumeMounts(modelPVC)
427+
lwsParams.WorkerVolumeMounts = nimService.GetWorkerVolumeMounts(modelPVC)
426428
if profileEnv != nil {
427429
lwsParams.WorkerEnvs = utils.MergeEnvVars(*profileEnv, lwsParams.WorkerEnvs)
428430
lwsParams.LeaderEnvs = utils.MergeEnvVars(*profileEnv, lwsParams.LeaderEnvs)
@@ -463,8 +465,8 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
463465
}}, deploymentParams.Env)
464466
}
465467
// Setup volume mounts with model store
466-
deploymentParams.Volumes = nimService.GetVolumes(*modelPVC)
467-
deploymentParams.VolumeMounts = nimService.GetVolumeMounts(*modelPVC)
468+
deploymentParams.Volumes = nimService.GetVolumes(modelPVC)
469+
deploymentParams.VolumeMounts = nimService.GetVolumeMounts(modelPVC)
468470
if profileEnv != nil {
469471
deploymentParams.Env = utils.MergeEnvVars(*profileEnv, deploymentParams.Env)
470472
}

0 commit comments

Comments
 (0)