From 5648d204876f8d1df897afedd3069029e3037753 Mon Sep 17 00:00:00 2001 From: Pierluigi Lenoci Date: Thu, 23 Apr 2026 17:41:18 +0200 Subject: [PATCH 1/2] fix: honor -stderrthreshold when -logtostderr is set klog v2 defaults -logtostderr to true, which silently causes -stderrthreshold to be ignored. klog v2.140.0 introduced the legacy_stderr_threshold_behavior flag that restores the correct interaction between the two flags (see kubernetes/klog#432). This commit: - bumps k8s.io/klog/v2 from v2.130.1 to v2.140.0 - sets legacy_stderr_threshold_behavior=false after klog.InitFlags in both main.go and cmd/daemon/main.go - sets stderrthreshold=INFO so the default behavior is preserved but users can now override it on the command line Ref: kubernetes/klog#212 Signed-off-by: Pierluigi Lenoci Signed-off-by: Pierluigi Lenoci --- cmd/daemon/main.go | 5 +++++ go.mod | 2 +- go.sum | 4 ++-- main.go | 5 +++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go index 8fd6a7d09d..7c1014301a 100644 --- a/cmd/daemon/main.go +++ b/cmd/daemon/main.go @@ -58,6 +58,11 @@ var ( func main() { utilfeature.DefaultMutableFeatureGate.AddFlag(pflag.CommandLine) klog.InitFlags(nil) + // Opt into the new klog behavior so that -stderrthreshold is honored even + // when -logtostderr=true (the default). + // Ref: kubernetes/klog#212, kubernetes/klog#432 + flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck + flag.Set("stderrthreshold", "INFO") //nolint:errcheck pflag.CommandLine.AddGoFlagSet(flag.CommandLine) pflag.Parse() features.SetDefaultFeatureGates() diff --git a/go.mod b/go.mod index f2bad031e4..82432e780c 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( k8s.io/cri-api v0.32.10 k8s.io/cri-client v0.32.10 k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 - k8s.io/klog/v2 v2.130.1 + k8s.io/klog/v2 v2.140.0 k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f k8s.io/kubelet v0.32.10 k8s.io/kubernetes v1.32.10 diff --git a/go.sum b/go.sum index b921d7e75f..bf35dfab35 100644 --- a/go.sum +++ b/go.sum @@ -412,8 +412,8 @@ k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAE k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4= k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= -k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc= +k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0= k8s.io/kms v0.32.10 h1:TOKCISpp+fmWZyHyfNLExW5oeYgFdqHc1j7Ibux+XdQ= k8s.io/kms v0.32.10/go.mod h1:Bk2evz/Yvk0oVrvm4MvZbgq8BD34Ksxs2SRHn4/UiOM= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= diff --git a/main.go b/main.go index 4c7ce5d871..4024fb2bef 100644 --- a/main.go +++ b/main.go @@ -136,6 +136,11 @@ func main() { logOptions := logs.NewOptions() logsapi.AddFlags(logOptions, pflag.CommandLine) klog.InitFlags(nil) + // Opt into the new klog behavior so that -stderrthreshold is honored even + // when -logtostderr=true (the default). + // Ref: kubernetes/klog#212, kubernetes/klog#432 + flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck + flag.Set("stderrthreshold", "INFO") //nolint:errcheck pflag.CommandLine.AddGoFlagSet(flag.CommandLine) pflag.Parse() ctrl.SetLogger(klogr.New()) From ca2d6f5b11151c2fd82e448b0ff7b21c8a82b6a5 Mon Sep 17 00:00:00 2001 From: Pierluigi Lenoci Date: Fri, 24 Apr 2026 13:42:58 +0200 Subject: [PATCH 2/2] address copilot review: handle flag.Set errors Replace //nolint:errcheck suppressions with proper error handling. Both flag.Set calls now fail fast via klog.Fatalf if the flag cannot be set, making misconfiguration immediately visible. Signed-off-by: Pierluigi Lenoci --- cmd/daemon/main.go | 8 ++++++-- main.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go index 7c1014301a..f5e3e556a8 100644 --- a/cmd/daemon/main.go +++ b/cmd/daemon/main.go @@ -61,8 +61,12 @@ func main() { // Opt into the new klog behavior so that -stderrthreshold is honored even // when -logtostderr=true (the default). // Ref: kubernetes/klog#212, kubernetes/klog#432 - flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck - flag.Set("stderrthreshold", "INFO") //nolint:errcheck + if err := flag.Set("legacy_stderr_threshold_behavior", "false"); err != nil { + klog.Fatalf("Failed to set flag %q: %v", "legacy_stderr_threshold_behavior", err) + } + if err := flag.Set("stderrthreshold", "INFO"); err != nil { + klog.Fatalf("Failed to set flag %q: %v", "stderrthreshold", err) + } pflag.CommandLine.AddGoFlagSet(flag.CommandLine) pflag.Parse() features.SetDefaultFeatureGates() diff --git a/main.go b/main.go index 4024fb2bef..0d3db7fb6f 100644 --- a/main.go +++ b/main.go @@ -139,8 +139,12 @@ func main() { // Opt into the new klog behavior so that -stderrthreshold is honored even // when -logtostderr=true (the default). // Ref: kubernetes/klog#212, kubernetes/klog#432 - flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck - flag.Set("stderrthreshold", "INFO") //nolint:errcheck + if err := flag.Set("legacy_stderr_threshold_behavior", "false"); err != nil { + klog.Fatalf("Failed to set flag %q: %v", "legacy_stderr_threshold_behavior", err) + } + if err := flag.Set("stderrthreshold", "INFO"); err != nil { + klog.Fatalf("Failed to set flag %q: %v", "stderrthreshold", err) + } pflag.CommandLine.AddGoFlagSet(flag.CommandLine) pflag.Parse() ctrl.SetLogger(klogr.New())