mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Merge pull request #125687 from bart0sh/PR146-DevicePluginCDIDevices-LockToDefault
kube_features: DevicePluginCDIDevices: LockToDefault
This commit is contained in:
commit
7e1a5a0ea8
@ -1020,7 +1020,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
|
|
||||||
DisableNodeKubeProxyVersion: {Default: true, PreRelease: featuregate.Beta},
|
DisableNodeKubeProxyVersion: {Default: true, PreRelease: featuregate.Beta},
|
||||||
|
|
||||||
DevicePluginCDIDevices: {Default: true, PreRelease: featuregate.GA},
|
DevicePluginCDIDevices: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.33
|
||||||
|
|
||||||
DynamicResourceAllocation: {Default: false, PreRelease: featuregate.Alpha},
|
DynamicResourceAllocation: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
|
||||||
|
@ -24,10 +24,7 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
|
||||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
|
||||||
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
|
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/features"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint"
|
"k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
)
|
)
|
||||||
@ -168,44 +165,18 @@ func TestDeviceRunContainerOptions(t *testing.T) {
|
|||||||
)
|
)
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
description string
|
description string
|
||||||
gate bool
|
|
||||||
responsesPerResource map[string]*pluginapi.ContainerAllocateResponse
|
responsesPerResource map[string]*pluginapi.ContainerAllocateResponse
|
||||||
expected *DeviceRunContainerOptions
|
expected *DeviceRunContainerOptions
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
description: "empty response",
|
description: "empty response",
|
||||||
gate: false,
|
|
||||||
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
||||||
resource1: newContainerAllocateResponse(),
|
resource1: newContainerAllocateResponse(),
|
||||||
},
|
},
|
||||||
expected: &DeviceRunContainerOptions{},
|
expected: &DeviceRunContainerOptions{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cdi devices are ingored when feature gate is disabled",
|
description: "cdi devices are handled",
|
||||||
gate: false,
|
|
||||||
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
|
||||||
resource1: newContainerAllocateResponse(
|
|
||||||
withDevices(map[string]string{"/dev/r1": "/dev/r1"}),
|
|
||||||
withMounts(map[string]string{"/home/lib1": "/home/lib1"}),
|
|
||||||
withEnvs(map[string]string{"ENV1": "VALUE1"}),
|
|
||||||
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
expected: &DeviceRunContainerOptions{
|
|
||||||
Devices: []kubecontainer.DeviceInfo{
|
|
||||||
{PathOnHost: "/dev/r1", PathInContainer: "/dev/r1", Permissions: "mrw"},
|
|
||||||
},
|
|
||||||
Mounts: []kubecontainer.Mount{
|
|
||||||
{Name: "/home/lib1", HostPath: "/home/lib1", ContainerPath: "/home/lib1", ReadOnly: true},
|
|
||||||
},
|
|
||||||
Envs: []kubecontainer.EnvVar{
|
|
||||||
{Name: "ENV1", Value: "VALUE1"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
description: "cdi devices are handled when feature gate is enabled",
|
|
||||||
gate: true,
|
|
||||||
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
||||||
resource1: newContainerAllocateResponse(
|
resource1: newContainerAllocateResponse(
|
||||||
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
||||||
@ -222,8 +193,7 @@ func TestDeviceRunContainerOptions(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cdi devices from multiple resources are handled when feature gate is enabled",
|
description: "cdi devices from multiple resources are handled",
|
||||||
gate: true,
|
|
||||||
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
||||||
resource1: newContainerAllocateResponse(
|
resource1: newContainerAllocateResponse(
|
||||||
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
||||||
@ -246,7 +216,6 @@ func TestDeviceRunContainerOptions(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "duplicate cdi devices are skipped",
|
description: "duplicate cdi devices are skipped",
|
||||||
gate: true,
|
|
||||||
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
responsesPerResource: map[string]*pluginapi.ContainerAllocateResponse{
|
||||||
resource1: newContainerAllocateResponse(
|
resource1: newContainerAllocateResponse(
|
||||||
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
withCDIDevices("vendor1.com/class1=device1", "vendor2.com/class2=device2"),
|
||||||
@ -272,7 +241,6 @@ func TestDeviceRunContainerOptions(t *testing.T) {
|
|||||||
t.Run(tc.description, func(t *testing.T) {
|
t.Run(tc.description, func(t *testing.T) {
|
||||||
as := assert.New(t)
|
as := assert.New(t)
|
||||||
|
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DevicePluginCDIDevices, tc.gate)
|
|
||||||
podDevices := newPodDevices()
|
podDevices := newPodDevices()
|
||||||
for resourceName, response := range tc.responsesPerResource {
|
for resourceName, response := range tc.responsesPerResource {
|
||||||
podDevices.insert("pod", "container", resourceName,
|
podDevices.insert("pod", "container", resourceName,
|
||||||
|
Loading…
Reference in New Issue
Block a user