Skip to content

Commit

Permalink
Support volume settings in Katib config (#1291)
Browse files Browse the repository at this point in the history
* Support volume settings in config

* Set default path
  • Loading branch information
andreyvelich authored Aug 12, 2020
1 parent 77dd34e commit 282b71e
Show file tree
Hide file tree
Showing 4 changed files with 303 additions and 89 deletions.
37 changes: 18 additions & 19 deletions pkg/controller.v1beta1/consts/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ const (

// ContainerSuggestion is the container name in Suggestion.
ContainerSuggestion = "suggestion"
// ContainerSuggestionVolumeName is the volume name that mounted on suggestion container
ContainerSuggestionVolumeName = "suggestion-volume"

// DefaultSuggestionPort is the default port of suggestion service.
DefaultSuggestionPort = 6789
Expand Down Expand Up @@ -79,6 +81,22 @@ const (
// DefaultDiskRequest is the default value for disk request.
DefaultDiskRequest = "500Mi"

// DefaultContainerSuggestionVolumeMountPath is the default mount path in suggestion container
DefaultContainerSuggestionVolumeMountPath = "/opt/katib/data"

// DefaultSuggestionStorageClassName is the default value for suggestion's volume storage class name
DefaultSuggestionStorageClassName = "katib-suggestion"

// DefaultSuggestionVolumeStorage is the default value for suggestion's volume storage
DefaultSuggestionVolumeStorage = "1Gi"

// DefaultSuggestionVolumeAccessMode is the default value for suggestion's volume access mode
DefaultSuggestionVolumeAccessMode = corev1.ReadWriteOnce

// DefaultSuggestionVolumeLocalPathPrefix is the default cluster local path prefix for suggestion volume
// Full default local path = /tmp/katib/suggestions/<suggestion-name>-<suggestion-algorithm>-<suggestion-namespace>
DefaultSuggestionVolumeLocalPathPrefix = "/tmp/katib/suggestions/"

// ReconcileErrorReason is the reason when there is a reconcile error.
ReconcileErrorReason = "ReconcileError"

Expand Down Expand Up @@ -127,25 +145,6 @@ const (

// UnavailableMetricValue is the value when metric was not reported or metric value can't be converted to float64
UnavailableMetricValue = "unavailable"

// DefaultSuggestionVolumeLocalPathPrefix is the default cluster local path prefix for suggestion volume
// Full local path = /tmp/katib/suggestions/<suggestion-name>-<suggestion-namespace>
DefaultSuggestionVolumeLocalPathPrefix = "/tmp/katib/suggestions/"

// DefaultSuggestionStorageClassName is the default value for suggestion's volume storage class name
DefaultSuggestionStorageClassName = "katib-suggestion"

// DefaultSuggestionVolumeAccessMode is the default value for suggestion's volume access mode
DefaultSuggestionVolumeAccessMode = corev1.ReadWriteOnce

// DefaultSuggestionVolumeStorage is the default value for suggestion's volume storage
DefaultSuggestionVolumeStorage = "1Gi"

// ContainerSuggestionVolumeName is the volume name that mounted on suggestion container
ContainerSuggestionVolumeName = "suggestion-volume"

// DefaultContainerSuggestionVolumeMountPath is the default mount path in suggestion container
DefaultContainerSuggestionVolumeMountPath = "/opt/katib/data"
)

var (
Expand Down
50 changes: 16 additions & 34 deletions pkg/controller.v1beta1/suggestion/composer/composer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down Expand Up @@ -193,7 +192,7 @@ func (g *General) desiredContainer(s *suggestionsv1beta1.Suggestion, suggestionC
c.VolumeMounts = []corev1.VolumeMount{
{
Name: consts.ContainerSuggestionVolumeName,
MountPath: consts.DefaultContainerSuggestionVolumeMountPath,
MountPath: suggestionConfigData.VolumeMountPath,
},
}
}
Expand All @@ -203,31 +202,20 @@ func (g *General) desiredContainer(s *suggestionsv1beta1.Suggestion, suggestionC
// DesiredVolume returns desired PVC and PV for suggestion.
// If StorageClassName != DefaultSuggestionStorageClassName returns only PVC.
func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.PersistentVolumeClaim, *corev1.PersistentVolume, error) {
persistentVolumeName := util.GetAlgorithmPersistentVolumeName(s)

// TODO (andreyvelich): Enable to specify these values from Katib config
storageClassName := consts.DefaultSuggestionStorageClassName
persistentVolumePath := consts.DefaultSuggestionVolumeLocalPathPrefix + persistentVolumeName
volumeAccessModes := consts.DefaultSuggestionVolumeAccessMode
suggestionConfigData, err := katibconfig.GetSuggestionConfigData(s.Spec.AlgorithmName, g.Client)
if err != nil {
return nil, nil, err
}

volumeStorage, _ := resource.ParseQuantity(consts.DefaultSuggestionVolumeStorage)
persistentVolumeName := util.GetAlgorithmPersistentVolumeName(s)

pvc := &corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: util.GetAlgorithmPersistentVolumeClaimName(s),
Namespace: s.Namespace,
},
Spec: corev1.PersistentVolumeClaimSpec{
StorageClassName: &storageClassName,
AccessModes: []corev1.PersistentVolumeAccessMode{
volumeAccessModes,
},
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: volumeStorage,
},
},
},
Spec: suggestionConfigData.PersistentVolumeClaimSpec,
}

// Add owner reference to the pvc so that it could be GC after the suggestion is deleted
Expand All @@ -237,28 +225,22 @@ func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.Persi

var pv *corev1.PersistentVolume
// Create PV with local hostPath by default
if storageClassName == consts.DefaultSuggestionStorageClassName {
if *pvc.Spec.StorageClassName == consts.DefaultSuggestionStorageClassName {
localLabel := map[string]string{"type": "local"}

pv = &corev1.PersistentVolume{
ObjectMeta: metav1.ObjectMeta{
Name: persistentVolumeName,
Labels: localLabel,
},
Spec: corev1.PersistentVolumeSpec{
StorageClassName: consts.DefaultSuggestionStorageClassName,
AccessModes: []corev1.PersistentVolumeAccessMode{
volumeAccessModes,
},
PersistentVolumeSource: corev1.PersistentVolumeSource{
HostPath: &corev1.HostPathVolumeSource{
Path: persistentVolumePath,
},
},
Capacity: corev1.ResourceList{
corev1.ResourceStorage: volumeStorage,
},
},
Spec: suggestionConfigData.PersistentVolumeSpec,
}

// If default host path is specified attach pv name to the path.
// Full default local path = DefaultSuggestionVolumeLocalPathPrefix<suggestion-name>-<suggestion-algorithm>-<suggestion-namespace>
if pv.Spec.PersistentVolumeSource.HostPath != nil &&
pv.Spec.PersistentVolumeSource.HostPath.Path == consts.DefaultSuggestionVolumeLocalPathPrefix {
pv.Spec.PersistentVolumeSource.HostPath.Path = pv.Spec.PersistentVolumeSource.HostPath.Path + persistentVolumeName
}

// Add owner reference to the pv so that it could be GC after the suggestion is deleted
Expand Down
Loading

0 comments on commit 282b71e

Please sign in to comment.