Skip to content

Commit 4bd11b3

Browse files
authored
Disable default PV for Experiment with resume from volume (#1552)
* Remove default PV creation from resume from volume * Modify error msg * Remove PV check from Suggestion controller test * Use go 1.15.13
1 parent efe8f87 commit 4bd11b3

File tree

10 files changed

+52
-188
lines changed

10 files changed

+52
-188
lines changed

.github/workflows/test-go.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Setup Go
2424
uses: actions/setup-go@v2
2525
with:
26-
go-version: 1.15.8
26+
go-version: 1.15.13
2727

2828
# Verify that go.mod and go.sum is synchronized
2929
- name: Check Go modules

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,7 @@ k8s.io/csi-translation-lib v0.20.4/go.mod h1:WisLItCdoDKB4lr6nkhzQsfgBNBJDI/TD9m
13681368
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
13691369
k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
13701370
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
1371+
k8s.io/gengo v0.0.0-20201113003025-83324d819ded h1:JApXBKYyB7l9xx+DK7/+mFjC7A9Bt5A93FPvFD0HIFE=
13711372
k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
13721373
k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM=
13731374
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=

pkg/controller.v1beta1/consts/const.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,19 +119,12 @@ const (
119119
// DefaultContainerSuggestionVolumeMountPath is the default mount path in suggestion container
120120
DefaultContainerSuggestionVolumeMountPath = "/opt/katib/data"
121121

122-
// DefaultSuggestionStorageClassName is the default value for suggestion's volume storage class name
123-
DefaultSuggestionStorageClassName = "katib-suggestion"
124-
125122
// DefaultSuggestionVolumeStorage is the default value for suggestion's volume storage
126123
DefaultSuggestionVolumeStorage = "1Gi"
127124

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

131-
// DefaultSuggestionVolumeLocalPathPrefix is the default cluster local path prefix for suggestion volume
132-
// Full default local path = /tmp/katib/suggestions/<suggestion-name>-<suggestion-algorithm>-<suggestion-namespace>
133-
DefaultSuggestionVolumeLocalPathPrefix = "/tmp/katib/suggestions/"
134-
135128
// ReconcileErrorReason is the reason when there is a reconcile error.
136129
ReconcileErrorReason = "ReconcileError"
137130

pkg/controller.v1beta1/suggestion/composer/composer.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
appsv1 "k8s.io/api/apps/v1"
2424
corev1 "k8s.io/api/core/v1"
2525
rbacv1 "k8s.io/api/rbac/v1"
26+
"k8s.io/apimachinery/pkg/api/equality"
2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728
"k8s.io/apimachinery/pkg/runtime"
2829
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -257,17 +258,15 @@ func (g *General) desiredContainers(s *suggestionsv1beta1.Suggestion,
257258
return containers
258259
}
259260

260-
// DesiredVolume returns desired PVC and PV for suggestion.
261-
// If StorageClassName != DefaultSuggestionStorageClassName returns only PVC.
261+
// DesiredVolume returns desired PVC and PV for Suggestion.
262+
// If PV doesn't exist in Katib config return nil for PV.
262263
func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.PersistentVolumeClaim, *corev1.PersistentVolume, error) {
263264

264265
suggestionConfigData, err := katibconfig.GetSuggestionConfigData(s.Spec.Algorithm.AlgorithmName, g.Client)
265266
if err != nil {
266267
return nil, nil, err
267268
}
268269

269-
persistentVolumeName := util.GetSuggestionPersistentVolumeName(s)
270-
271270
pvc := &corev1.PersistentVolumeClaim{
272271
ObjectMeta: metav1.ObjectMeta{
273272
Name: util.GetSuggestionPersistentVolumeClaimName(s),
@@ -282,24 +281,19 @@ func (g *General) DesiredVolume(s *suggestionsv1beta1.Suggestion) (*corev1.Persi
282281
}
283282

284283
var pv *corev1.PersistentVolume
285-
// Create PV with local hostPath by default
286-
if *pvc.Spec.StorageClassName == consts.DefaultSuggestionStorageClassName {
287-
localLabel := map[string]string{"type": "local"}
284+
// Create PV if Katib config contains it.
285+
if !equality.Semantic.DeepEqual(suggestionConfigData.PersistentVolumeSpec, corev1.PersistentVolumeSpec{}) {
286+
287+
persistentVolumeName := util.GetSuggestionPersistentVolumeName(s)
288288

289289
pv = &corev1.PersistentVolume{
290290
ObjectMeta: metav1.ObjectMeta{
291291
Name: persistentVolumeName,
292-
Labels: localLabel,
292+
Labels: suggestionConfigData.PersistentVolumeLabels,
293293
},
294294
Spec: suggestionConfigData.PersistentVolumeSpec,
295295
}
296296

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

305299
return pvc, pv, nil

pkg/controller.v1beta1/suggestion/composer/composer_test.go

Lines changed: 20 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ var (
9292

9393
refFlag bool = true
9494

95-
storageClassName = consts.DefaultSuggestionStorageClassName
95+
storageClassName = "test-storage-class"
96+
pvLabels = map[string]string{"type": "local"}
9697
)
9798

9899
func TestMain(m *testing.M) {
@@ -401,106 +402,36 @@ func TestDesiredVolume(t *testing.T) {
401402
suggestion: newFakeSuggestion(),
402403
configMap: newFakeKatibConfig(newFakeSuggestionConfig(), newFakeEarlyStoppingConfig()),
403404
expectedPVC: newFakePVC(),
404-
expectedPV: newFakePV(),
405-
err: false,
406-
testDescription: "Desired Volume valid run with default pvc and pv",
407-
},
408-
{
409-
suggestion: newFakeSuggestion(),
410-
configMap: func() *corev1.ConfigMap {
411-
sc := newFakeSuggestionConfig()
412-
storageClass := "custom-storage-class"
413-
volumeStorage, _ := resource.ParseQuantity("5Gi")
414-
415-
sc.PersistentVolumeClaimSpec = corev1.PersistentVolumeClaimSpec{
416-
StorageClassName: &storageClass,
417-
AccessModes: []corev1.PersistentVolumeAccessMode{
418-
corev1.ReadWriteOnce,
419-
corev1.ReadOnlyMany,
420-
},
421-
Resources: corev1.ResourceRequirements{
422-
Requests: corev1.ResourceList{
423-
corev1.ResourceStorage: volumeStorage,
424-
},
425-
},
426-
}
427-
cm := newFakeKatibConfig(sc, newFakeEarlyStoppingConfig())
428-
return cm
429-
}(),
430-
expectedPVC: func() *corev1.PersistentVolumeClaim {
431-
pvc := newFakePVC()
432-
storageClass := "custom-storage-class"
433-
volumeStorage, _ := resource.ParseQuantity("5Gi")
434-
435-
pvc.Spec.StorageClassName = &storageClass
436-
pvc.Spec.AccessModes = append(pvc.Spec.AccessModes, corev1.ReadOnlyMany)
437-
pvc.Spec.Resources.Requests[corev1.ResourceStorage] = volumeStorage
438-
return pvc
439-
}(),
440405
expectedPV: nil,
441406
err: false,
442-
testDescription: "Custom PVC with not default storage class",
407+
testDescription: "Desired Volume valid run with default PVC",
443408
},
444409
{
445410
suggestion: newFakeSuggestion(),
446411
configMap: func() *corev1.ConfigMap {
447412
sc := newFakeSuggestionConfig()
448-
mode := corev1.PersistentVolumeFilesystem
449-
accessModes := []corev1.PersistentVolumeAccessMode{
450-
corev1.ReadWriteOnce,
451-
corev1.ReadOnlyMany,
452-
}
453-
volumeStorage, _ := resource.ParseQuantity("10Gi")
454-
455-
sc.PersistentVolumeClaimSpec = corev1.PersistentVolumeClaimSpec{
456-
VolumeMode: &mode,
457-
AccessModes: accessModes,
458-
}
459-
460-
sc.PersistentVolumeSpec = corev1.PersistentVolumeSpec{
461-
VolumeMode: &mode,
462-
AccessModes: accessModes,
463-
PersistentVolumeSource: corev1.PersistentVolumeSource{
464-
GCEPersistentDisk: &corev1.GCEPersistentDiskVolumeSource{
465-
PDName: "pd-name",
466-
FSType: "fs-type",
467-
},
468-
},
469-
Capacity: corev1.ResourceList{
470-
corev1.ResourceStorage: volumeStorage,
471-
},
472-
}
413+
414+
sc.PersistentVolumeClaimSpec = newFakePVC().Spec
415+
416+
// Change StorageClass and volume storage.
417+
sc.PersistentVolumeClaimSpec.StorageClassName = &storageClassName
418+
419+
sc.PersistentVolumeSpec = newFakePV().Spec
420+
// This policy will be changed to "Delete".
421+
sc.PersistentVolumeSpec.PersistentVolumeReclaimPolicy = corev1.PersistentVolumeReclaimRetain
422+
sc.PersistentVolumeLabels = pvLabels
423+
473424
cm := newFakeKatibConfig(sc, newFakeEarlyStoppingConfig())
474425
return cm
475426
}(),
476427
expectedPVC: func() *corev1.PersistentVolumeClaim {
477428
pvc := newFakePVC()
478-
mode := corev1.PersistentVolumeFilesystem
479-
480-
pvc.Spec.VolumeMode = &mode
481-
pvc.Spec.AccessModes = append(pvc.Spec.AccessModes, corev1.ReadOnlyMany)
429+
pvc.Spec.StorageClassName = &storageClassName
482430
return pvc
483431
}(),
484-
expectedPV: func() *corev1.PersistentVolume {
485-
pv := newFakePV()
486-
mode := corev1.PersistentVolumeFilesystem
487-
volumeStorage, _ := resource.ParseQuantity("10Gi")
488-
489-
pv.Spec.VolumeMode = &mode
490-
pv.Spec.AccessModes = append(pv.Spec.AccessModes, corev1.ReadOnlyMany)
491-
pv.Spec.PersistentVolumeSource = corev1.PersistentVolumeSource{
492-
GCEPersistentDisk: &corev1.GCEPersistentDiskVolumeSource{
493-
PDName: "pd-name",
494-
FSType: "fs-type",
495-
},
496-
}
497-
pv.Spec.Capacity = corev1.ResourceList{
498-
corev1.ResourceStorage: volumeStorage,
499-
}
500-
return pv
501-
}(),
432+
expectedPV: newFakePV(),
502433
err: false,
503-
testDescription: "Custom PVC and PV with default storage class",
434+
testDescription: "Custom PVC and PV",
504435
},
505436
}
506437

@@ -915,7 +846,6 @@ func newFakePVC() *corev1.PersistentVolumeClaim {
915846
},
916847
},
917848
Spec: corev1.PersistentVolumeClaimSpec{
918-
StorageClassName: &storageClassName,
919849
AccessModes: []corev1.PersistentVolumeAccessMode{
920850
consts.DefaultSuggestionVolumeAccessMode,
921851
},
@@ -934,10 +864,8 @@ func newFakePV() *corev1.PersistentVolume {
934864

935865
return &corev1.PersistentVolume{
936866
ObjectMeta: metav1.ObjectMeta{
937-
Name: pvName,
938-
Labels: map[string]string{
939-
"type": "local",
940-
},
867+
Name: pvName,
868+
Labels: pvLabels,
941869
},
942870
Spec: corev1.PersistentVolumeSpec{
943871
StorageClassName: storageClassName,
@@ -947,7 +875,7 @@ func newFakePV() *corev1.PersistentVolume {
947875
},
948876
PersistentVolumeSource: corev1.PersistentVolumeSource{
949877
HostPath: &corev1.HostPathVolumeSource{
950-
Path: consts.DefaultSuggestionVolumeLocalPathPrefix + pvName,
878+
Path: "tmp/katib/suggestion" + pvName,
951879
},
952880
},
953881
Capacity: corev1.ResourceList{

pkg/controller.v1beta1/suggestion/suggestion_controller_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,6 @@ func TestReconcile(t *testing.T) {
164164
return c.Get(context.TODO(), types.NamespacedName{Namespace: namespace, Name: resourceName}, &corev1.Service{})
165165
}, timeout).Should(gomega.Succeed())
166166

167-
// Expect that PV with appropriate name is created
168-
g.Eventually(func() error {
169-
return c.Get(context.TODO(), types.NamespacedName{Name: resourceName + "-" + namespace}, &corev1.PersistentVolume{})
170-
}, timeout).Should(gomega.Succeed())
171-
172167
// Expect that PVC with appropriate name is created
173168
g.Eventually(func() error {
174169
return c.Get(context.TODO(), types.NamespacedName{Namespace: namespace, Name: resourceName}, &corev1.PersistentVolumeClaim{})

pkg/controller.v1beta1/suggestion/suggestion_controller_util.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ func (r *ReconcileSuggestion) reconcileVolume(
6565
foundPVC := &corev1.PersistentVolumeClaim{}
6666
foundPV := &corev1.PersistentVolume{}
6767

68-
// Try to find/create PV, if PV has to be created
68+
// Try to find/create PV, if PV has to be created.
6969
if pv != nil {
7070
err := r.Get(context.TODO(), types.NamespacedName{Name: pv.Name}, foundPV)
7171
if err != nil && errors.IsNotFound(err) {
7272
logger.Info("Creating Persistent Volume", "name", pv.Name)
7373
err = r.Create(context.TODO(), pv)
74-
// Return only if Create was failed, otherwise try to find/create PVC
74+
// Return only if Create was failed, otherwise try to find/create PVC.
7575
if err != nil {
7676
return nil, nil, err
7777
}
@@ -80,7 +80,7 @@ func (r *ReconcileSuggestion) reconcileVolume(
8080
}
8181
}
8282

83-
// Try to find/create PVC
83+
// Try to find/create PVC.
8484
err := r.Get(context.TODO(), types.NamespacedName{Name: pvc.Name, Namespace: pvc.Namespace}, foundPVC)
8585
if err != nil && errors.IsNotFound(err) {
8686
logger.Info("Creating Persistent Volume Claim", "name", pvc.Name)

0 commit comments

Comments
 (0)