Skip to content

Commit f42a33c

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

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
@@ -689,7 +689,7 @@ func (n *NIMService) GetVolumesMounts() []corev1.Volume {
689689
}
690690

691691
// GetVolumes returns volumes for the NIMService container.
692-
func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
692+
func (n *NIMService) GetVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
693693
// TODO: Fetch actual PVC name from associated NIMCache obj
694694
volumes := []corev1.Volume{
695695
{
@@ -701,15 +701,28 @@ func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume
701701
},
702702
},
703703
},
704-
{
704+
}
705+
if modelPVC != nil {
706+
volumes = append(volumes, corev1.Volume{
705707
Name: "model-store",
706708
VolumeSource: corev1.VolumeSource{
707709
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
708710
ClaimName: modelPVC.Name,
709711
ReadOnly: n.GetStorageReadOnly(),
710712
},
711713
},
712-
},
714+
})
715+
} else {
716+
hostPathType := corev1.HostPathDirectoryOrCreate
717+
volumes = append(volumes, corev1.Volume{
718+
Name: "model-store",
719+
VolumeSource: corev1.VolumeSource{
720+
HostPath: &corev1.HostPathVolumeSource{
721+
Path: *n.Spec.Storage.HostPath,
722+
Type: &hostPathType,
723+
},
724+
},
725+
})
713726
}
714727

715728
if n.GetProxySpec() != nil {
@@ -718,7 +731,7 @@ func (n *NIMService) GetVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume
718731
return volumes
719732
}
720733

721-
func (n *NIMService) GetLeaderVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
734+
func (n *NIMService) GetLeaderVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
722735
volumes := n.GetVolumes(modelPVC)
723736

724737
volumes = append(volumes,
@@ -763,7 +776,7 @@ func (n *NIMService) GetLeaderVolumes(modelPVC PersistentVolumeClaim) []corev1.V
763776
return volumes
764777
}
765778

766-
func (n *NIMService) GetWorkerVolumes(modelPVC PersistentVolumeClaim) []corev1.Volume {
779+
func (n *NIMService) GetWorkerVolumes(modelPVC *PersistentVolumeClaim) []corev1.Volume {
767780
volumes := n.GetVolumes(modelPVC)
768781
volumes = append(volumes,
769782
corev1.Volume{
@@ -803,12 +816,16 @@ func (n *NIMService) GetWorkerVolumes(modelPVC PersistentVolumeClaim) []corev1.V
803816
}
804817

805818
// GetVolumeMounts returns volumes for the NIMService container.
806-
func (n *NIMService) GetVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
819+
func (n *NIMService) GetVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
820+
subPath := ""
821+
if modelPVC != nil {
822+
subPath = modelPVC.SubPath
823+
}
807824
volumeMounts := []corev1.VolumeMount{
808825
{
809826
Name: "model-store",
810827
MountPath: "/model-store",
811-
SubPath: modelPVC.SubPath,
828+
SubPath: subPath,
812829
},
813830
{
814831
Name: "dshm",
@@ -822,7 +839,7 @@ func (n *NIMService) GetVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.Vo
822839
return volumeMounts
823840
}
824841

825-
func (n *NIMService) GetWorkerVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
842+
func (n *NIMService) GetWorkerVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
826843
volumeMounts := n.GetVolumeMounts(modelPVC)
827844

828845
volumeMounts = append(volumeMounts,
@@ -847,7 +864,7 @@ func (n *NIMService) GetWorkerVolumeMounts(modelPVC PersistentVolumeClaim) []cor
847864
return volumeMounts
848865
}
849866

850-
func (n *NIMService) GetLeaderVolumeMounts(modelPVC PersistentVolumeClaim) []corev1.VolumeMount {
867+
func (n *NIMService) GetLeaderVolumeMounts(modelPVC *PersistentVolumeClaim) []corev1.VolumeMount {
851868
volumeMounts := n.GetVolumeMounts(modelPVC)
852869
volumeMounts = append(volumeMounts,
853870
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)