DRA: lock to default-on

The core functionality was enabled by default in 1.34 without any issues that
would have suggested turning it off, so now we can lock it to on-by-default.

Tests which cover disabling the feature must use version emulation.
This commit is contained in:
Patrick Ohly 2025-10-07 11:03:49 +02:00
parent 83e8760449
commit 8b6f98b06e
10 changed files with 33 additions and 2 deletions

View file

@ -1058,6 +1058,9 @@ func TestDropDynamicResourceAllocation(t *testing.T) {
for _, tc := range testcases {
t.Run(tc.description, func(t *testing.T) {
if !tc.enabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGatesDuringTest(t, utilfeature.DefaultFeatureGate, featuregatetesting.FeatureOverrides{
features.DynamicResourceAllocation: tc.enabled,
features.DRAExtendedResource: tc.extendedEnabled,

View file

@ -1196,7 +1196,9 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
DynamicResourceAllocation: {
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Beta},
{Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA}, // lock to default in 1.35
{Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA},
{Version: version.MustParse("1.35"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
// TODO (https://github.com/kubernetes/kubernetes/issues/134459): remove completely in 1.38
},
EnvFiles: {
{Version: version.MustParse("1.34"), Default: false, PreRelease: featuregate.Alpha},

View file

@ -4141,6 +4141,9 @@ func TestStatusPrepareForUpdate(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
if draEnabled, draExists := tc.features[features.DynamicResourceAllocation]; draExists && !draEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGatesDuringTest(t, utilfeature.DefaultFeatureGate, tc.features)
StatusStrategy.PrepareForUpdate(genericapirequest.NewContext(), tc.newPod, tc.oldPod)
if !cmp.Equal(tc.expected, tc.newPod) {

View file

@ -20,6 +20,7 @@ import (
"testing"
"github.com/google/go-cmp/cmp"
"k8s.io/apimachinery/pkg/util/version"
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/component-base/featuregate"
featuregatetesting "k8s.io/component-base/featuregate/testing"
@ -101,6 +102,9 @@ func TestApplyFeatureGates(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if draEnabled, draExists := test.features[features.DynamicResourceAllocation]; draExists && !draEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGatesDuringTest(t, feature.DefaultFeatureGate, test.features)
gotConfig := getDefaultPlugins()

View file

@ -558,6 +558,9 @@ func TestAddAllEventHandlers(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if !tt.enableDRA {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGatesDuringTest(t, utilfeature.DefaultFeatureGate, featuregatetesting.FeatureOverrides{
features.DynamicResourceAllocation: tt.enableDRA,
features.DRADeviceTaints: tt.enableDRADeviceTaints,

View file

@ -26,6 +26,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/version"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
fwk "k8s.io/kube-scheduler/framework"
@ -466,6 +467,9 @@ func Test_podSchedulingPropertiesChange(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.draDisabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DynamicResourceAllocation, !tt.draDisabled)
got := PodSchedulingPropertiesChange(tt.newPod, tt.oldPod)
if diff := cmp.Diff(tt.want, got, cmpopts.EquateComparable(fwk.ClusterEvent{})); diff != "" {

View file

@ -1006,7 +1006,7 @@ func Test_UnionedGVKs(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
pluginConfig := defaults.PluginConfigsV1
if !tt.enableSchedulerQueueingHints {
if !tt.enableSchedulerQueueingHints || !tt.enableDynamicResourceAllocation {
// Set emulated version before setting other feature gates, since it can impact feature dependencies.
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
}

View file

@ -2555,6 +2555,9 @@ func TestAdmitResourceSlice(t *testing.T) {
attributes := admission.NewAttributesRecord(
test.obj, test.oldObj, schema.GroupVersionKind{},
"", "foo", apiResource, "", test.operation, test.options, false, mynode)
if !test.featureEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.DynamicResourceAllocation, test.featureEnabled)
a := &admitTestCase{
name: name,

View file

@ -517,6 +517,10 @@
lockToDefault: false
preRelease: GA
version: "1.34"
- default: true
lockToDefault: true
preRelease: GA
version: "1.35"
- name: EnvFiles
versionedSpecs:
- default: false

View file

@ -47,6 +47,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/version"
utilfeature "k8s.io/apiserver/pkg/util/feature"
resourceapiac "k8s.io/client-go/applyconfigurations/resource/v1"
"k8s.io/client-go/informers"
@ -337,6 +338,10 @@ func TestDRA(t *testing.T) {
sort.Strings(entries)
t.Logf("Config: %s", strings.Join(entries, ","))
// We need to set emulation version for DynamicResourceAllocation feature gate, which is locked at 1.35.
if draEnabled, draExists := tc.features[features.DynamicResourceAllocation]; draExists && !draEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.34"))
}
featuregatetesting.SetFeatureGatesDuringTest(t, utilfeature.DefaultFeatureGate, tc.features)
etcdOptions := framework.SharedEtcd()