Skip to content

Commit 15b7b61

Browse files
committed
added pvc accessModes support
Signed-off-by: dandawg <12484302+dandawg@users.noreply.github.com>
1 parent 88a92cf commit 15b7b61

File tree

8 files changed

+103
-5
lines changed

8 files changed

+103
-5
lines changed

infra/feast-operator/api/v1alpha1/featurestore_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ type PvcConfig struct {
249249
// The PVC name is the same as the associated deployment name.
250250
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="PvcCreate is immutable"
251251
type PvcCreate struct {
252+
// AccessModes k8s persistent volume access modes. Default []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}.
253+
AccessModes []corev1.PersistentVolumeAccessMode `json:"accessModes,omitempty"`
252254
// StorageClassName is the name of an existing StorageClass to which this persistent volume belongs. Empty value
253255
// means that this volume does not belong to any StorageClass and the cluster default will be used.
254256
StorageClassName *string `json:"storageClassName,omitempty"`

infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

infra/feast-operator/config/crd/bases/feast.dev_featurestores.yaml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,12 @@ spec:
254254
create:
255255
description: Settings for creating a new PVC
256256
properties:
257+
accessModes:
258+
description: AccessModes k8s persistent volume
259+
access modes. Default [corev1.ReadWriteOnce].
260+
items:
261+
type: string
262+
type: array
257263
resources:
258264
description: |-
259265
Resources describes the storage resource requirements for a volume.
@@ -625,6 +631,12 @@ spec:
625631
create:
626632
description: Settings for creating a new PVC
627633
properties:
634+
accessModes:
635+
description: AccessModes k8s persistent volume
636+
access modes. Default [corev1.ReadWriteOnce].
637+
items:
638+
type: string
639+
type: array
628640
resources:
629641
description: |-
630642
Resources describes the storage resource requirements for a volume.
@@ -1009,6 +1021,12 @@ spec:
10091021
create:
10101022
description: Settings for creating a new PVC
10111023
properties:
1024+
accessModes:
1025+
description: AccessModes k8s persistent
1026+
volume access modes. Default [corev1.ReadWriteOnce].
1027+
items:
1028+
type: string
1029+
type: array
10121030
resources:
10131031
description: |-
10141032
Resources describes the storage resource requirements for a volume.
@@ -1509,6 +1527,12 @@ spec:
15091527
create:
15101528
description: Settings for creating a new PVC
15111529
properties:
1530+
accessModes:
1531+
description: AccessModes k8s persistent
1532+
volume access modes. Default [corev1.ReadWriteOnce].
1533+
items:
1534+
type: string
1535+
type: array
15121536
resources:
15131537
description: |-
15141538
Resources describes the storage resource requirements for a volume.
@@ -1886,6 +1910,12 @@ spec:
18861910
create:
18871911
description: Settings for creating a new PVC
18881912
properties:
1913+
accessModes:
1914+
description: AccessModes k8s persistent
1915+
volume access modes. Default [corev1.ReadWriteOnce].
1916+
items:
1917+
type: string
1918+
type: array
18891919
resources:
18901920
description: |-
18911921
Resources describes the storage resource requirements for a volume.
@@ -2279,6 +2309,12 @@ spec:
22792309
description: Settings for creating a new
22802310
PVC
22812311
properties:
2312+
accessModes:
2313+
description: AccessModes k8s persistent
2314+
volume access modes. Default [corev1.ReadWriteOnce].
2315+
items:
2316+
type: string
2317+
type: array
22822318
resources:
22832319
description: |-
22842320
Resources describes the storage resource requirements for a volume.

infra/feast-operator/dist/install.yaml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,12 @@ spec:
262262
create:
263263
description: Settings for creating a new PVC
264264
properties:
265+
accessModes:
266+
description: AccessModes k8s persistent volume
267+
access modes. Default [corev1.ReadWriteOnce].
268+
items:
269+
type: string
270+
type: array
265271
resources:
266272
description: |-
267273
Resources describes the storage resource requirements for a volume.
@@ -633,6 +639,12 @@ spec:
633639
create:
634640
description: Settings for creating a new PVC
635641
properties:
642+
accessModes:
643+
description: AccessModes k8s persistent volume
644+
access modes. Default [corev1.ReadWriteOnce].
645+
items:
646+
type: string
647+
type: array
636648
resources:
637649
description: |-
638650
Resources describes the storage resource requirements for a volume.
@@ -1017,6 +1029,12 @@ spec:
10171029
create:
10181030
description: Settings for creating a new PVC
10191031
properties:
1032+
accessModes:
1033+
description: AccessModes k8s persistent
1034+
volume access modes. Default [corev1.ReadWriteOnce].
1035+
items:
1036+
type: string
1037+
type: array
10201038
resources:
10211039
description: |-
10221040
Resources describes the storage resource requirements for a volume.
@@ -1517,6 +1535,12 @@ spec:
15171535
create:
15181536
description: Settings for creating a new PVC
15191537
properties:
1538+
accessModes:
1539+
description: AccessModes k8s persistent
1540+
volume access modes. Default [corev1.ReadWriteOnce].
1541+
items:
1542+
type: string
1543+
type: array
15201544
resources:
15211545
description: |-
15221546
Resources describes the storage resource requirements for a volume.
@@ -1894,6 +1918,12 @@ spec:
18941918
create:
18951919
description: Settings for creating a new PVC
18961920
properties:
1921+
accessModes:
1922+
description: AccessModes k8s persistent
1923+
volume access modes. Default [corev1.ReadWriteOnce].
1924+
items:
1925+
type: string
1926+
type: array
18971927
resources:
18981928
description: |-
18991929
Resources describes the storage resource requirements for a volume.
@@ -2287,6 +2317,12 @@ spec:
22872317
description: Settings for creating a new
22882318
PVC
22892319
properties:
2320+
accessModes:
2321+
description: AccessModes k8s persistent
2322+
volume access modes. Default [corev1.ReadWriteOnce].
2323+
items:
2324+
type: string
2325+
type: array
22902326
resources:
22912327
description: |-
22922328
Resources describes the storage resource requirements for a volume.

infra/feast-operator/internal/controller/featurestore_controller_pvc_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
6969
onlineStoreMountPath := "/online"
7070
registryMountPath := "/registry"
7171

72+
accessModes := []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany}
7273
storageClassName := "test"
7374

7475
onlineStoreMountedPath := path.Join(onlineStoreMountPath, onlineStorePath)
@@ -85,6 +86,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
8586
Type: offlineType,
8687
PvcConfig: &feastdevv1alpha1.PvcConfig{
8788
Create: &feastdevv1alpha1.PvcCreate{
89+
AccessModes: accessModes,
8890
StorageClassName: &storageClassName,
8991
},
9092
MountPath: offlineStoreMountPath,
@@ -162,6 +164,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
162164
Expect(resource.Status.Applied.Services.OfflineStore.Persistence.FilePersistence.Type).To(Equal(offlineType))
163165
Expect(resource.Status.Applied.Services.OfflineStore.Persistence.FilePersistence.PvcConfig).NotTo(BeNil())
164166
Expect(resource.Status.Applied.Services.OfflineStore.Persistence.FilePersistence.PvcConfig.Create).NotTo(BeNil())
167+
Expect(resource.Status.Applied.Services.OfflineStore.Persistence.FilePersistence.PvcConfig.Create.AccessModes).To(Equal(accessModes))
165168
Expect(resource.Status.Applied.Services.OfflineStore.Persistence.FilePersistence.PvcConfig.Create.StorageClassName).To(Equal(&storageClassName))
166169
expectedResources := corev1.VolumeResourceRequirements{
167170
Requests: corev1.ResourceList{
@@ -179,6 +182,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
179182
Expect(resource.Status.Applied.Services.OnlineStore.Persistence.FilePersistence.Path).To(Equal(onlineStorePath))
180183
Expect(resource.Status.Applied.Services.OnlineStore.Persistence.FilePersistence.PvcConfig).NotTo(BeNil())
181184
Expect(resource.Status.Applied.Services.OnlineStore.Persistence.FilePersistence.PvcConfig.Create).NotTo(BeNil())
185+
Expect(resource.Status.Applied.Services.OnlineStore.Persistence.FilePersistence.PvcConfig.Create.AccessModes).To(Equal(services.DefaultPVCAccessModes))
182186
Expect(resource.Status.Applied.Services.OnlineStore.Persistence.FilePersistence.PvcConfig.Create.StorageClassName).To(BeNil())
183187
expectedResources = corev1.VolumeResourceRequirements{
184188
Requests: corev1.ResourceList{
@@ -198,6 +202,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
198202
Expect(resource.Status.Applied.Services.Registry.Local.Persistence.FilePersistence.Path).To(Equal(registryPath))
199203
Expect(resource.Status.Applied.Services.Registry.Local.Persistence.FilePersistence.PvcConfig).NotTo(BeNil())
200204
Expect(resource.Status.Applied.Services.Registry.Local.Persistence.FilePersistence.PvcConfig.Create).NotTo(BeNil())
205+
Expect(resource.Status.Applied.Services.Registry.Local.Persistence.FilePersistence.PvcConfig.Create.AccessModes).To(Equal(services.DefaultPVCAccessModes))
201206
Expect(resource.Status.Applied.Services.Registry.Local.Persistence.FilePersistence.PvcConfig.Create.StorageClassName).To(BeNil())
202207
expectedResources = corev1.VolumeResourceRequirements{
203208
Requests: corev1.ResourceList{
@@ -283,6 +288,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
283288
Expect(err).NotTo(HaveOccurred())
284289
Expect(pvc.Name).To(Equal(deploy.Name))
285290
Expect(pvc.Spec.StorageClassName).To(Equal(&storageClassName))
291+
Expect(pvc.Spec.AccessModes).To(Equal(accessModes))
286292
Expect(pvc.Spec.Resources.Requests.Storage().String()).To(Equal(services.DefaultOfflineStorageRequest))
287293
Expect(pvc.DeletionTimestamp).To(BeNil())
288294

@@ -313,6 +319,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
313319
pvc)
314320
Expect(err).NotTo(HaveOccurred())
315321
Expect(pvc.Name).To(Equal(deploy.Name))
322+
Expect(pvc.Spec.AccessModes).To(Equal(services.DefaultPVCAccessModes))
316323
Expect(pvc.Spec.Resources.Requests.Storage().String()).To(Equal(services.DefaultOnlineStorageRequest))
317324
Expect(pvc.DeletionTimestamp).To(BeNil())
318325

@@ -343,6 +350,7 @@ var _ = Describe("FeatureStore Controller-Ephemeral services", func() {
343350
pvc)
344351
Expect(err).NotTo(HaveOccurred())
345352
Expect(pvc.Name).To(Equal(deploy.Name))
353+
Expect(pvc.Spec.AccessModes).To(Equal(services.DefaultPVCAccessModes))
346354
Expect(pvc.Spec.Resources.Requests.Storage().String()).To(Equal(services.DefaultRegistryStorageRequest))
347355
Expect(pvc.DeletionTimestamp).To(BeNil())
348356

infra/feast-operator/internal/controller/services/services.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ func (feast *FeastServices) createNewPVC(pvcCreate *feastdevv1alpha1.PvcCreate,
457457
pvc := feast.initPVC(feastType)
458458

459459
pvc.Spec = corev1.PersistentVolumeClaimSpec{
460-
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
460+
AccessModes: pvcCreate.AccessModes,
461461
Resources: pvcCreate.Resources,
462462
}
463463
if pvcCreate.StorageClassName != nil {

infra/feast-operator/internal/controller/services/services_types.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/feast-dev/feast/infra/feast-operator/api/feastversion"
2121
feastdevv1alpha1 "github.com/feast-dev/feast/infra/feast-operator/api/v1alpha1"
2222
handler "github.com/feast-dev/feast/infra/feast-operator/internal/controller/handler"
23+
corev1 "k8s.io/api/core/v1"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
)
2526

@@ -80,10 +81,11 @@ const (
8081
)
8182

8283
var (
83-
DefaultImage = "feastdev/feature-server:" + feastversion.FeastVersion
84-
DefaultReplicas = int32(1)
85-
NameLabelKey = feastdevv1alpha1.GroupVersion.Group + "/name"
86-
ServiceTypeLabelKey = feastdevv1alpha1.GroupVersion.Group + "/service-type"
84+
DefaultImage = "feastdev/feature-server:" + feastversion.FeastVersion
85+
DefaultReplicas = int32(1)
86+
DefaultPVCAccessModes = []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}
87+
NameLabelKey = feastdevv1alpha1.GroupVersion.Group + "/name"
88+
ServiceTypeLabelKey = feastdevv1alpha1.GroupVersion.Group + "/service-type"
8789

8890
FeastServiceConstants = map[FeastServiceType]deploymentSettings{
8991
OfflineFeastType: {

infra/feast-operator/internal/controller/services/util.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) {
9494
pvc := services.Registry.Local.Persistence.FilePersistence.PvcConfig
9595
if pvc.Create != nil {
9696
ensureRequestedStorage(&pvc.Create.Resources, DefaultRegistryStorageRequest)
97+
if pvc.Create.AccessModes == nil {
98+
pvc.Create.AccessModes = DefaultPVCAccessModes
99+
}
97100
}
98101
}
99102
}
@@ -118,6 +121,9 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) {
118121
pvc := services.OfflineStore.Persistence.FilePersistence.PvcConfig
119122
if pvc.Create != nil {
120123
ensureRequestedStorage(&pvc.Create.Resources, DefaultOfflineStorageRequest)
124+
if pvc.Create.AccessModes == nil {
125+
pvc.Create.AccessModes = DefaultPVCAccessModes
126+
}
121127
}
122128
}
123129
}
@@ -143,6 +149,9 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) {
143149
pvc := services.OnlineStore.Persistence.FilePersistence.PvcConfig
144150
if pvc.Create != nil {
145151
ensureRequestedStorage(&pvc.Create.Resources, DefaultOnlineStorageRequest)
152+
if pvc.Create.AccessModes == nil {
153+
pvc.Create.AccessModes = DefaultPVCAccessModes
154+
}
146155
}
147156
}
148157
}

0 commit comments

Comments
 (0)