diff --git a/test/e2e/common/node/container_probe.go b/test/e2e/common/node/container_probe.go index 239b76aead0..529e2225e31 100644 --- a/test/e2e/common/node/container_probe.go +++ b/test/e2e/common/node/container_probe.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/test/e2e/framework" e2eevents "k8s.io/kubernetes/test/e2e/framework/events" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" + e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" testutils "k8s.io/kubernetes/test/utils" "github.com/onsi/ginkgo" @@ -214,6 +215,9 @@ var _ = SIGDescribe("Probing container", func() { Description: A Pod is created with liveness probe with a Exec action on the Pod. If the liveness probe call does not return within the timeout specified, liveness probe MUST restart the Pod. */ ginkgo.It("should be restarted with an exec liveness probe with timeout [NodeConformance]", func() { + // The ExecProbeTimeout feature gate exists to allow backwards-compatibility with pre-1.20 cluster behaviors, where livenessProbe timeouts were ignored + // If ExecProbeTimeout feature gate is disabled, timeout enforcement for exec livenessProbes is disabled, so we should skip this test + e2eskipper.SkipUnlessExecProbeTimeoutEnabled() cmd := []string{"/bin/sh", "-c", "sleep 600"} livenessProbe := &v1.Probe{ Handler: execHandler([]string{"/bin/sh", "-c", "sleep 10"}), diff --git a/test/e2e/framework/skipper/skipper.go b/test/e2e/framework/skipper/skipper.go index 265dd0afa6e..dbe0214a9fa 100644 --- a/test/e2e/framework/skipper/skipper.go +++ b/test/e2e/framework/skipper/skipper.go @@ -46,7 +46,10 @@ import ( // New local storage types to support local storage capacity isolation var localStorageCapacityIsolation featuregate.Feature = "LocalStorageCapacityIsolation" -var downwardAPIHugePages featuregate.Feature = "DownwardAPIHugePages" +var ( + downwardAPIHugePages featuregate.Feature = "DownwardAPIHugePages" + execProbeTimeout featuregate.Feature = "ExecProbeTimeout" +) func skipInternalf(caller int, format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) @@ -145,6 +148,12 @@ func SkipUnlessDownwardAPIHugePagesEnabled() { } } +func SkipUnlessExecProbeTimeoutEnabled() { + if !utilfeature.DefaultFeatureGate.Enabled(execProbeTimeout) { + skipInternalf(1, "Only supported when %v feature is enabled", execProbeTimeout) + } +} + // SkipIfMissingResource skips if the gvr resource is missing. func SkipIfMissingResource(dynamicClient dynamic.Interface, gvr schema.GroupVersionResource, namespace string) { resourceClient := dynamicClient.Resource(gvr).Namespace(namespace)