From e8a12773c9dd72788959c474fd6d69ff812f2ba4 Mon Sep 17 00:00:00 2001 From: Jose Valdes Date: Sat, 7 Mar 2026 22:53:52 -0500 Subject: [PATCH 1/3] feature: promote NodeLogQuery to GA and lock default --- pkg/features/kube_features.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 9798965ba47..1a5d69e56f5 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -1609,6 +1609,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate NodeLogQuery: { {Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.36"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.39, locked to default in 1.36 }, NodeSwap: { From cda2805fa6cc84ef0bca7e9f2485b5dce98a313f Mon Sep 17 00:00:00 2001 From: Jose Valdes Date: Sat, 7 Mar 2026 22:59:10 -0500 Subject: [PATCH 2/3] test: adjust NodeLogQuery feature enabled by default --- .../apis/config/validation/validation_test.go | 23 ++++++++++++++++--- .../reference/feature_list.md | 2 +- .../reference/versioned_feature_list.yaml | 4 ++++ test/e2e/feature/feature.go | 5 +++- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/pkg/kubelet/apis/config/validation/validation_test.go b/pkg/kubelet/apis/config/validation/validation_test.go index b6b2e3f947a..0f6b7a5503a 100644 --- a/pkg/kubelet/apis/config/validation/validation_test.go +++ b/pkg/kubelet/apis/config/validation/validation_test.go @@ -610,21 +610,38 @@ func TestValidateKubeletConfiguration(t *testing.T) { }, errMsg: "invalid configuration: Specifying shutdownGracePeriodByPodPriority requires feature gate GracefulNodeShutdownBasedOnPodPriority", }, { - name: "enableSystemLogQuery is enabled without NodeLogQuery feature gate", + name: "enableSystemLogQuery is enabled with explicit default NodeLogQuery feature gate enabled", configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { + conf.FeatureGates = map[string]bool{"NodeLogQuery": true} + conf.EnableSystemLogHandler = true conf.EnableSystemLogQuery = true return conf }, - errMsg: "invalid configuration: NodeLogQuery feature gate is required for enableSystemLogQuery", + errMsg: "", + }, { + name: "enableSystemLogQuery is enabled without NodeLogQuery feature gate", + configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { + conf.FeatureGates = map[string]bool{"NodeLogQuery": false} + conf.EnableSystemLogQuery = true + return conf + }, + errMsg: "cannot set feature gate NodeLogQuery to false, feature is locked to true", }, { name: "enableSystemLogQuery is enabled without enableSystemLogHandler", configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { - conf.FeatureGates = map[string]bool{"NodeLogQuery": true} conf.EnableSystemLogHandler = false conf.EnableSystemLogQuery = true return conf }, errMsg: "invalid configuration: enableSystemLogHandler is required for enableSystemLogQuery", + }, { + name: "enableSystemLogQuery is enabled with enableSystemLogHandler", + configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { + conf.EnableSystemLogHandler = true + conf.EnableSystemLogQuery = true + return conf + }, + errMsg: "", }, { name: "imageMaximumGCAge should not be negative", configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { diff --git a/test/compatibility_lifecycle/reference/feature_list.md b/test/compatibility_lifecycle/reference/feature_list.md index 3eee52ce13e..d3f0e5ba412 100644 --- a/test/compatibility_lifecycle/reference/feature_list.md +++ b/test/compatibility_lifecycle/reference/feature_list.md @@ -129,7 +129,7 @@ | NFTablesProxyMode | :ballot_box_with_check: 1.31+ | :closed_lock_with_key: 1.33+ | 1.29–1.30 | 1.31–1.32 | 1.33– | | | [code](https://cs.k8s.io/?q=%5CbNFTablesProxyMode%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNFTablesProxyMode%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | NodeDeclaredFeatures | :ballot_box_with_check: 1.36+ | | 1.35 | 1.36– | | | | [code](https://cs.k8s.io/?q=%5CbNodeDeclaredFeatures%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNodeDeclaredFeatures%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | NodeInclusionPolicyInPodTopologySpread | :ballot_box_with_check: 1.26+ | :closed_lock_with_key: 1.33+ | 1.25 | 1.26–1.32 | 1.33– | | | [code](https://cs.k8s.io/?q=%5CbNodeInclusionPolicyInPodTopologySpread%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNodeInclusionPolicyInPodTopologySpread%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | -| NodeLogQuery | | | 1.27–1.29 | 1.30– | | | | [code](https://cs.k8s.io/?q=%5CbNodeLogQuery%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNodeLogQuery%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | +| NodeLogQuery | :ballot_box_with_check: 1.36+ | :closed_lock_with_key: 1.36+ | 1.27–1.29 | 1.30–1.35 | 1.36– | | | [code](https://cs.k8s.io/?q=%5CbNodeLogQuery%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNodeLogQuery%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | NodeSwap | :ballot_box_with_check: 1.30+ | :closed_lock_with_key: 1.34+ | 1.22–1.27 | 1.28–1.33 | 1.34– | | | [code](https://cs.k8s.io/?q=%5CbNodeSwap%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNodeSwap%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | NominatedNodeNameForExpectation | :ballot_box_with_check: 1.35+ | | 1.34 | 1.35– | | | | [code](https://cs.k8s.io/?q=%5CbNominatedNodeNameForExpectation%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbNominatedNodeNameForExpectation%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | OpenAPIEnums | :ballot_box_with_check: 1.24+ | | 1.23 | 1.24– | | | | [code](https://cs.k8s.io/?q=%5CbOpenAPIEnums%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbOpenAPIEnums%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | diff --git a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml index 3657e0b8fce..8b2bbef3e31 100644 --- a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml +++ b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml @@ -1267,6 +1267,10 @@ lockToDefault: false preRelease: Beta version: "1.30" + - default: true + lockToDefault: true + preRelease: GA + version: "1.36" - name: NodeSwap versionedSpecs: - default: false diff --git a/test/e2e/feature/feature.go b/test/e2e/feature/feature.go index 0fe79f69b4f..e1f1d5d4e67 100644 --- a/test/e2e/feature/feature.go +++ b/test/e2e/feature/feature.go @@ -311,7 +311,10 @@ var ( // TODO: document the feature (owning SIG, when to use this feature for a test) NodeAuthorizer = framework.WithFeature(framework.ValidFeatures.Add("NodeAuthorizer")) - // TODO: document the feature (owning SIG, when to use this feature for a test) + // Owner: sig-windows, sig-node + // kep: https://kep.k8s.io/2271 + // Marks tests that require the kubelet to have enableSystemLogQuery set to true + // in the kubelet configuration. This handler is off by default. NodeLogQuery = framework.WithFeature(framework.ValidFeatures.Add("NodeLogQuery")) // Owner: sig-node From b12bcfda036fe71799d92bcb0f41b557df7d33cb Mon Sep 17 00:00:00 2001 From: Jose Valdes Date: Thu, 19 Mar 2026 08:58:33 -0400 Subject: [PATCH 3/3] types: remove +featureGate=NodeLogQuery as defaults to enabled --- pkg/kubelet/apis/config/types.go | 1 - staging/src/k8s.io/kubelet/config/v1beta1/types.go | 1 - 2 files changed, 2 deletions(-) diff --git a/pkg/kubelet/apis/config/types.go b/pkg/kubelet/apis/config/types.go index 9914cc103f4..ffee5272f43 100644 --- a/pkg/kubelet/apis/config/types.go +++ b/pkg/kubelet/apis/config/types.go @@ -451,7 +451,6 @@ type KubeletConfiguration struct { // EnableSystemLogHandler has to be enabled in addition for this feature to work. // Enabling this feature has security implications. The recommendation is to enable it on a need basis for debugging // purposes and disabling otherwise. - // +featureGate=NodeLogQuery // +optional EnableSystemLogQuery bool // ShutdownGracePeriod specifies the total duration that the node should delay the shutdown and total grace period for pod termination during a node shutdown. diff --git a/staging/src/k8s.io/kubelet/config/v1beta1/types.go b/staging/src/k8s.io/kubelet/config/v1beta1/types.go index dae3fe95c2a..5343a264068 100644 --- a/staging/src/k8s.io/kubelet/config/v1beta1/types.go +++ b/staging/src/k8s.io/kubelet/config/v1beta1/types.go @@ -792,7 +792,6 @@ type KubeletConfiguration struct { // Enabling this feature has security implications. The recommendation is to enable it on a need basis for debugging // purposes and disabling otherwise. // Default: false - // +featureGate=NodeLogQuery // +optional EnableSystemLogQuery *bool `json:"enableSystemLogQuery,omitempty"` // shutdownGracePeriod specifies the total duration that the node should delay the