mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-16 14:45:28 +00:00
e2e node: Update runtime class handler skip logic
There are two runtime class tests which required the container runtime config to include explicit configuration for `test-handler`. The current logic skips these tests in non GCE environments. This skip is too strict since the test is skipped in node e2e environments and in other environments such as kind, which support running the test and also configure `test-handler`. Instead of skipping based on provider, add a new function `NodeSupportsPreconfiguredRuntimeClassHandler` which examines the underlying container runtime config and checks if the config includes `test-handler`. The check is a bit brittle since it assumes container runtime config paths, but it is a net improvement over skipping the test entirely on non GCE environments. This results in the test working in the common test environments, namely GCE kube-up, node e2e, and kind. Signed-off-by: David Porter <david@porter.me>
This commit is contained in:
@@ -35,7 +35,7 @@ import (
|
||||
runtimeclasstest "k8s.io/kubernetes/pkg/kubelet/runtimeclass/testing"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
e2eevents "k8s.io/kubernetes/test/e2e/framework/events"
|
||||
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
|
||||
e2eruntimeclass "k8s.io/kubernetes/test/e2e/framework/node/runtimeclass"
|
||||
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
||||
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
|
||||
admissionapi "k8s.io/pod-security-admission/api"
|
||||
@@ -45,7 +45,7 @@ import (
|
||||
|
||||
var _ = SIGDescribe("RuntimeClass", func() {
|
||||
f := framework.NewDefaultFramework("runtimeclass")
|
||||
f.NamespacePodSecurityEnforceLevel = admissionapi.LevelBaseline
|
||||
f.NamespacePodSecurityEnforceLevel = admissionapi.LevelPrivileged
|
||||
|
||||
/*
|
||||
Release: v1.20
|
||||
@@ -54,7 +54,7 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
*/
|
||||
framework.ConformanceIt("should reject a Pod requesting a non-existent RuntimeClass [NodeConformance]", func(ctx context.Context) {
|
||||
rcName := f.Namespace.Name + "-nonexistent"
|
||||
expectPodRejection(ctx, f, e2enode.NewRuntimeClassPod(rcName))
|
||||
expectPodRejection(ctx, f, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
})
|
||||
|
||||
// The test CANNOT be made a Conformance as it depends on a container runtime to have a specific handler not being installed.
|
||||
@@ -62,7 +62,7 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
handler := f.Namespace.Name + "-handler"
|
||||
rcName := createRuntimeClass(ctx, f, "unconfigured-handler", handler, nil)
|
||||
ginkgo.DeferCleanup(deleteRuntimeClass, f, rcName)
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2enode.NewRuntimeClassPod(rcName))
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
eventSelector := fields.Set{
|
||||
"involvedObject.kind": "Pod",
|
||||
"involvedObject.name": pod.Name,
|
||||
@@ -83,13 +83,13 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
// This test requires that the PreconfiguredRuntimeClassHandler has already been set up on nodes.
|
||||
// The test CANNOT be made a Conformance as it depends on a container runtime to have a specific handler installed and working.
|
||||
ginkgo.It("should run a Pod requesting a RuntimeClass with a configured handler [NodeFeature:RuntimeHandler]", func(ctx context.Context) {
|
||||
// Requires special setup of test-handler which is only done in GCE kube-up environment
|
||||
// see https://github.com/kubernetes/kubernetes/blob/eb729620c522753bc7ae61fc2c7b7ea19d4aad2f/cluster/gce/gci/configure-helper.sh#L3069-L3076
|
||||
e2eskipper.SkipUnlessProviderIs("gce")
|
||||
if err := e2eruntimeclass.NodeSupportsPreconfiguredRuntimeClassHandler(ctx, f); err != nil {
|
||||
e2eskipper.Skipf("Skipping test as node does not have E2E runtime class handler preconfigured in container runtime config: %v", err)
|
||||
}
|
||||
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2enode.PreconfiguredRuntimeClassHandler, nil)
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2eruntimeclass.PreconfiguredRuntimeClassHandler, nil)
|
||||
ginkgo.DeferCleanup(deleteRuntimeClass, f, rcName)
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2enode.NewRuntimeClassPod(rcName))
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
expectPodSuccess(ctx, f, pod)
|
||||
})
|
||||
|
||||
@@ -102,9 +102,9 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
is not being tested here.
|
||||
*/
|
||||
framework.ConformanceIt("should schedule a Pod requesting a RuntimeClass without PodOverhead [NodeConformance]", func(ctx context.Context) {
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2enode.PreconfiguredRuntimeClassHandler, nil)
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2eruntimeclass.PreconfiguredRuntimeClassHandler, nil)
|
||||
ginkgo.DeferCleanup(deleteRuntimeClass, f, rcName)
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2enode.NewRuntimeClassPod(rcName))
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
// there is only one pod in the namespace
|
||||
label := labels.SelectorFromSet(labels.Set(map[string]string{}))
|
||||
pods, err := e2epod.WaitForPodsWithLabelScheduled(ctx, f.ClientSet, f.Namespace.Name, label)
|
||||
@@ -127,14 +127,14 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
is not being tested here.
|
||||
*/
|
||||
framework.ConformanceIt("should schedule a Pod requesting a RuntimeClass and initialize its Overhead [NodeConformance]", func(ctx context.Context) {
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2enode.PreconfiguredRuntimeClassHandler, &nodev1.Overhead{
|
||||
rcName := createRuntimeClass(ctx, f, "preconfigured-handler", e2eruntimeclass.PreconfiguredRuntimeClassHandler, &nodev1.Overhead{
|
||||
PodFixed: v1.ResourceList{
|
||||
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10m"),
|
||||
v1.ResourceName(v1.ResourceMemory): resource.MustParse("1Mi"),
|
||||
},
|
||||
})
|
||||
ginkgo.DeferCleanup(deleteRuntimeClass, f, rcName)
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2enode.NewRuntimeClassPod(rcName))
|
||||
pod := e2epod.NewPodClient(f).Create(ctx, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
// there is only one pod in the namespace
|
||||
label := labels.SelectorFromSet(labels.Set(map[string]string{}))
|
||||
pods, err := e2epod.WaitForPodsWithLabelScheduled(ctx, f.ClientSet, f.Namespace.Name, label)
|
||||
@@ -174,7 +174,7 @@ var _ = SIGDescribe("RuntimeClass", func() {
|
||||
}))
|
||||
})
|
||||
|
||||
expectPodRejection(ctx, f, e2enode.NewRuntimeClassPod(rcName))
|
||||
expectPodRejection(ctx, f, e2eruntimeclass.NewRuntimeClassPod(rcName))
|
||||
})
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user