From b768c1d1d5b618406343dd5530eb3f59f9517209 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 9 Jul 2025 15:45:20 +0200 Subject: [PATCH] DRA API: bump storage version to v1beta2 This avoids the overhead for the more complex conversion to v1beta1 and might make it a bit more realistic to get rid of the v1beta1 eventually. The expected GVK must be set explicitly because when emulating 1.33, v1beta1 is the default although the fixed storage version is v1beta2. --- api/discovery/apis__resource.k8s.io__v1.json | 8 +++---- .../apis__resource.k8s.io__v1beta1.json | 8 +++---- .../apis__resource.k8s.io__v1beta2.json | 8 +++---- pkg/apis/resource/install/install.go | 5 ++-- .../storageversionhashdata/data.go | 4 ++++ test/integration/etcd/data.go | 23 ++++++++++++------- 6 files changed, 33 insertions(+), 23 deletions(-) diff --git a/api/discovery/apis__resource.k8s.io__v1.json b/api/discovery/apis__resource.k8s.io__v1.json index 314ad1a95fd..41f94705265 100644 --- a/api/discovery/apis__resource.k8s.io__v1.json +++ b/api/discovery/apis__resource.k8s.io__v1.json @@ -8,7 +8,7 @@ "name": "deviceclasses", "namespaced": false, "singularName": "deviceclass", - "storageVersionHash": "OgEE055Fbnc=", + "storageVersionHash": "weQRMT6DeYM=", "verbs": [ "create", "delete", @@ -25,7 +25,7 @@ "name": "resourceclaims", "namespaced": true, "singularName": "resourceclaim", - "storageVersionHash": "RnQSwRxMnsw=", + "storageVersionHash": "EJAWH5WrAYg=", "verbs": [ "create", "delete", @@ -53,7 +53,7 @@ "name": "resourceclaimtemplates", "namespaced": true, "singularName": "resourceclaimtemplate", - "storageVersionHash": "F6aZtQPvFlU=", + "storageVersionHash": "24m0okHrUtk=", "verbs": [ "create", "delete", @@ -70,7 +70,7 @@ "name": "resourceslices", "namespaced": false, "singularName": "resourceslice", - "storageVersionHash": "7r9IQQZblMY=", + "storageVersionHash": "z6Bc9vgk6yE=", "verbs": [ "create", "delete", diff --git a/api/discovery/apis__resource.k8s.io__v1beta1.json b/api/discovery/apis__resource.k8s.io__v1beta1.json index a611724ba7e..7be02cb32ef 100644 --- a/api/discovery/apis__resource.k8s.io__v1beta1.json +++ b/api/discovery/apis__resource.k8s.io__v1beta1.json @@ -8,7 +8,7 @@ "name": "deviceclasses", "namespaced": false, "singularName": "deviceclass", - "storageVersionHash": "OgEE055Fbnc=", + "storageVersionHash": "weQRMT6DeYM=", "verbs": [ "create", "delete", @@ -25,7 +25,7 @@ "name": "resourceclaims", "namespaced": true, "singularName": "resourceclaim", - "storageVersionHash": "RnQSwRxMnsw=", + "storageVersionHash": "EJAWH5WrAYg=", "verbs": [ "create", "delete", @@ -53,7 +53,7 @@ "name": "resourceclaimtemplates", "namespaced": true, "singularName": "resourceclaimtemplate", - "storageVersionHash": "F6aZtQPvFlU=", + "storageVersionHash": "24m0okHrUtk=", "verbs": [ "create", "delete", @@ -70,7 +70,7 @@ "name": "resourceslices", "namespaced": false, "singularName": "resourceslice", - "storageVersionHash": "7r9IQQZblMY=", + "storageVersionHash": "z6Bc9vgk6yE=", "verbs": [ "create", "delete", diff --git a/api/discovery/apis__resource.k8s.io__v1beta2.json b/api/discovery/apis__resource.k8s.io__v1beta2.json index 673a127cad2..c263ff9dcaf 100644 --- a/api/discovery/apis__resource.k8s.io__v1beta2.json +++ b/api/discovery/apis__resource.k8s.io__v1beta2.json @@ -8,7 +8,7 @@ "name": "deviceclasses", "namespaced": false, "singularName": "deviceclass", - "storageVersionHash": "OgEE055Fbnc=", + "storageVersionHash": "weQRMT6DeYM=", "verbs": [ "create", "delete", @@ -25,7 +25,7 @@ "name": "resourceclaims", "namespaced": true, "singularName": "resourceclaim", - "storageVersionHash": "RnQSwRxMnsw=", + "storageVersionHash": "EJAWH5WrAYg=", "verbs": [ "create", "delete", @@ -53,7 +53,7 @@ "name": "resourceclaimtemplates", "namespaced": true, "singularName": "resourceclaimtemplate", - "storageVersionHash": "F6aZtQPvFlU=", + "storageVersionHash": "24m0okHrUtk=", "verbs": [ "create", "delete", @@ -70,7 +70,7 @@ "name": "resourceslices", "namespaced": false, "singularName": "resourceslice", - "storageVersionHash": "7r9IQQZblMY=", + "storageVersionHash": "z6Bc9vgk6yE=", "verbs": [ "create", "delete", diff --git a/pkg/apis/resource/install/install.go b/pkg/apis/resource/install/install.go index 114b1d4384b..a747f62003d 100644 --- a/pkg/apis/resource/install/install.go +++ b/pkg/apis/resource/install/install.go @@ -40,7 +40,6 @@ func Install(scheme *runtime.Scheme) { utilruntime.Must(v1beta1.AddToScheme(scheme)) utilruntime.Must(v1beta2.AddToScheme(scheme)) utilruntime.Must(v1.AddToScheme(scheme)) - // TODO(https://github.com/kubernetes/kubernetes/issues/129889) We should - // change the serialization version to v1beta2 for 1.34. - utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion, v1beta2.SchemeGroupVersion, v1.SchemeGroupVersion, v1alpha3.SchemeGroupVersion)) + // TODO (https://github.com/kubernetes/kubernetes/issues/133131): put v1 first in 1.35 + utilruntime.Must(scheme.SetVersionPriority(v1beta2.SchemeGroupVersion, v1.SchemeGroupVersion, v1beta1.SchemeGroupVersion, v1alpha3.SchemeGroupVersion)) } diff --git a/pkg/controlplane/storageversionhashdata/data.go b/pkg/controlplane/storageversionhashdata/data.go index 7c18d3e42e8..ee708036cf4 100644 --- a/pkg/controlplane/storageversionhashdata/data.go +++ b/pkg/controlplane/storageversionhashdata/data.go @@ -70,6 +70,10 @@ var GVRToStorageVersionHash = map[string]string{ "rbac.authorization.k8s.io/v1/clusterroles": "bYE5ZWDrJ44=", "rbac.authorization.k8s.io/v1/rolebindings": "eGsCzGH6b1g=", "rbac.authorization.k8s.io/v1/roles": "7FuwZcIIItM=", + "resource.k8s.io/v1/deviceclasses": "weQRMT6DeYM=", + "resource.k8s.io/v1/resourceclaims": "EJAWH5WrAYg=", + "resource.k8s.io/v1/resourceclaimtemplates": "24m0okHrUtk=", + "resource.k8s.io/v1/resourceslices": "z6Bc9vgk6yE=", "scheduling.k8s.io/v1/priorityclasses": "1QwjyaZjj3Y=", "storage.k8s.io/v1/csidrivers": "hL6j/rwBV5w=", "storage.k8s.io/v1/csinodes": "Pe62DkZtjuo=", diff --git a/test/integration/etcd/data.go b/test/integration/etcd/data.go index 8f020996e41..1296bed6234 100644 --- a/test/integration/etcd/data.go +++ b/test/integration/etcd/data.go @@ -597,55 +597,62 @@ func GetEtcdStorageDataForNamespaceServedAt(namespace string, v string, isEmulat gvr("resource.k8s.io", "v1beta1", "deviceclasses"): { Stub: `{"metadata": {"name": "class2name"}}`, ExpectedEtcdPath: "/registry/deviceclasses/class2name", + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "DeviceClass"), IntroducedVersion: "1.32", RemovedVersion: "1.38", }, gvr("resource.k8s.io", "v1beta1", "resourceclaims"): { Stub: `{"metadata": {"name": "claim2name"}, "spec": {"devices": {"requests": [{"name": "req-0", "deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}]}}}`, ExpectedEtcdPath: "/registry/resourceclaims/" + namespace + "/claim2name", + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaim"), IntroducedVersion: "1.32", RemovedVersion: "1.38", }, gvr("resource.k8s.io", "v1beta1", "resourceclaimtemplates"): { Stub: `{"metadata": {"name": "claimtemplate2name"}, "spec": {"spec": {"devices": {"requests": [{"name": "req-0", "deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}]}}}}`, ExpectedEtcdPath: "/registry/resourceclaimtemplates/" + namespace + "/claimtemplate2name", + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaimTemplate"), IntroducedVersion: "1.32", RemovedVersion: "1.38", }, gvr("resource.k8s.io", "v1beta1", "resourceslices"): { Stub: `{"metadata": {"name": "node2slice"}, "spec": {"nodeName": "worker1", "driver": "dra.example.com", "pool": {"name": "worker1", "resourceSliceCount": 1}}}`, ExpectedEtcdPath: "/registry/resourceslices/node2slice", + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceSlice"), IntroducedVersion: "1.32", RemovedVersion: "1.38", }, // -- // k8s.io/kubernetes/pkg/apis/resource/v1beta2 + // + // The expected GVK must be set explicitly because when emulating 1.33, + // v1beta1 is the default although the actual storage version is v1beta2. gvr("resource.k8s.io", "v1beta2", "deviceclasses"): { Stub: `{"metadata": {"name": "class3name"}}`, ExpectedEtcdPath: "/registry/deviceclasses/class3name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "DeviceClass"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "DeviceClass"), IntroducedVersion: "1.33", RemovedVersion: "1.39", }, gvr("resource.k8s.io", "v1beta2", "resourceclaims"): { Stub: `{"metadata": {"name": "claim3name"}, "spec": {"devices": {"requests": [{"name": "req-0", "exactly": {"deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}}]}}}`, ExpectedEtcdPath: "/registry/resourceclaims/" + namespace + "/claim3name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceClaim"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaim"), IntroducedVersion: "1.33", RemovedVersion: "1.39", }, gvr("resource.k8s.io", "v1beta2", "resourceclaimtemplates"): { Stub: `{"metadata": {"name": "claimtemplate3name"}, "spec": {"spec": {"devices": {"requests": [{"name": "req-0", "exactly": {"deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}}]}}}}`, ExpectedEtcdPath: "/registry/resourceclaimtemplates/" + namespace + "/claimtemplate3name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceClaimTemplate"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaimTemplate"), IntroducedVersion: "1.33", RemovedVersion: "1.39", }, gvr("resource.k8s.io", "v1beta2", "resourceslices"): { Stub: `{"metadata": {"name": "node3slice"}, "spec": {"nodeName": "worker1", "driver": "dra.example.com", "pool": {"name": "worker1", "resourceSliceCount": 1}}}`, ExpectedEtcdPath: "/registry/resourceslices/node3slice", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceSlice"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceSlice"), IntroducedVersion: "1.33", RemovedVersion: "1.39", }, @@ -655,25 +662,25 @@ func GetEtcdStorageDataForNamespaceServedAt(namespace string, v string, isEmulat gvr("resource.k8s.io", "v1", "deviceclasses"): { Stub: `{"metadata": {"name": "class4name"}}`, ExpectedEtcdPath: "/registry/deviceclasses/class4name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "DeviceClass"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "DeviceClass"), IntroducedVersion: "1.34", }, gvr("resource.k8s.io", "v1", "resourceclaims"): { Stub: `{"metadata": {"name": "claim4name"}, "spec": {"devices": {"requests": [{"name": "req-0", "exactly": {"deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}}]}}}`, ExpectedEtcdPath: "/registry/resourceclaims/" + namespace + "/claim4name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceClaim"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaim"), IntroducedVersion: "1.34", }, gvr("resource.k8s.io", "v1", "resourceclaimtemplates"): { Stub: `{"metadata": {"name": "claimtemplate4name"}, "spec": {"spec": {"devices": {"requests": [{"name": "req-0", "exactly": {"deviceClassName": "example-class", "allocationMode": "ExactCount", "count": 1}}]}}}}`, ExpectedEtcdPath: "/registry/resourceclaimtemplates/" + namespace + "/claimtemplate4name", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceClaimTemplate"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceClaimTemplate"), IntroducedVersion: "1.34", }, gvr("resource.k8s.io", "v1", "resourceslices"): { Stub: `{"metadata": {"name": "node4slice"}, "spec": {"nodeName": "worker1", "driver": "dra.example.com", "pool": {"name": "worker1", "resourceSliceCount": 1}}}`, ExpectedEtcdPath: "/registry/resourceslices/node4slice", - ExpectedGVK: gvkP("resource.k8s.io", "v1beta1", "ResourceSlice"), + ExpectedGVK: gvkP("resource.k8s.io", "v1beta2", "ResourceSlice"), IntroducedVersion: "1.34", }, // --