mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +00:00
logs: remove deprecated klog flags
This completes the deprecation of klog flags which are no longer supported. klog itself continues to support them, but Kubernetes components don't. This makes the command line interfaces simpler and reduces the attack surface because less functionality is exposed. For example, kube-controller-manager now has: Logs flags: --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) --log-json-info-buffer-size quantity [Alpha] In JSON format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this. --log-json-split-stream [Alpha] In JSON format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this. --logging-format string Sets the log format. Permitted formats: "json" (gated by LoggingBetaOptions), "text". (default "text") -v, --v Level number for the log level verbosity --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format) Misc flags: --kubeconfig string Path to kubeconfig file with authorization and master location information. --master string The address of the Kubernetes API server (overrides any value in kubeconfig). Global flags: -h, --help help for kube-controller-manager --version version[=true] Print version information and quit For details see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components
This commit is contained in:
parent
41619ace15
commit
2f762e4788
@ -62,7 +62,7 @@ func TestAddGlobalFlags(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
// Happy case
|
||||
expectedFlag: []string{"add-dir-header", "alsologtostderr", "help", "log-backtrace-at", "log-dir", "log-file", "log-file-max-size", "log-flush-frequency", "logtostderr", "one-output", "skip-headers", "skip-log-headers", "stderrthreshold", "v", "vmodule"},
|
||||
expectedFlag: []string{"help", "log-flush-frequency", "v", "vmodule"},
|
||||
matchExpected: false,
|
||||
},
|
||||
{
|
||||
|
@ -20,7 +20,6 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"math"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@ -32,6 +31,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
cliflag "k8s.io/component-base/cli/flag"
|
||||
"k8s.io/component-base/featuregate"
|
||||
"k8s.io/component-base/logs/klogflags"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -183,12 +183,8 @@ func apply(c *LoggingConfiguration, featureGate featuregate.FeatureGate) error {
|
||||
|
||||
// AddFlags adds command line flags for the configuration.
|
||||
func AddFlags(c *LoggingConfiguration, fs *pflag.FlagSet) {
|
||||
// The help text is generated assuming that flags will eventually use
|
||||
// hyphens, even if currently no normalization function is set for the
|
||||
// flag set yet.
|
||||
unsupportedFlags := strings.Join(unsupportedLoggingFlagNames(cliflag.WordSepNormalizeFunc), ", ")
|
||||
formats := logRegistry.list()
|
||||
fs.StringVar(&c.Format, "logging-format", c.Format, fmt.Sprintf("Sets the log format. Permitted formats: %s.\nNon-default formats don't honor these flags: %s.\nNon-default choices are currently alpha and subject to change without warning.", formats, unsupportedFlags))
|
||||
fs.StringVar(&c.Format, "logging-format", c.Format, fmt.Sprintf("Sets the log format. Permitted formats: %s.", formats))
|
||||
// No new log formats should be added after generation is of flag options
|
||||
logRegistry.freeze()
|
||||
|
||||
@ -236,14 +232,13 @@ var loggingFlags pflag.FlagSet
|
||||
|
||||
func init() {
|
||||
var fs flag.FlagSet
|
||||
klog.InitFlags(&fs)
|
||||
klogflags.Init(&fs)
|
||||
loggingFlags.AddGoFlagSet(&fs)
|
||||
}
|
||||
|
||||
// List of logs (k8s.io/klog + k8s.io/component-base/logs) flags supported by all logging formats
|
||||
var supportedLogsFlags = map[string]struct{}{
|
||||
"v": {},
|
||||
// TODO: support vmodule after 1.19 Alpha
|
||||
}
|
||||
|
||||
// unsupportedLoggingFlags lists unsupported logging flags. The normalize
|
||||
@ -268,15 +263,3 @@ func unsupportedLoggingFlags(normalizeFunc func(f *pflag.FlagSet, name string) p
|
||||
})
|
||||
return allFlags
|
||||
}
|
||||
|
||||
// unsupportedLoggingFlagNames lists unsupported logging flags by name, with
|
||||
// optional normalization and sorted.
|
||||
func unsupportedLoggingFlagNames(normalizeFunc func(f *pflag.FlagSet, name string) pflag.NormalizedName) []string {
|
||||
unsupportedFlags := unsupportedLoggingFlags(normalizeFunc)
|
||||
names := make([]string, 0, len(unsupportedFlags))
|
||||
for _, f := range unsupportedFlags {
|
||||
names = append(names, "--"+f.Name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
return names
|
||||
}
|
||||
|
@ -39,9 +39,7 @@ func TestFlags(t *testing.T) {
|
||||
fs.SetOutput(&output)
|
||||
fs.PrintDefaults()
|
||||
want := ` --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s)
|
||||
--logging-format string Sets the log format. Permitted formats: "text".
|
||||
Non-default formats don't honor these flags: --add-dir-header, --alsologtostderr, --log-backtrace-at, --log-dir, --log-file, --log-file-max-size, --logtostderr, --one-output, --skip-headers, --skip-log-headers, --stderrthreshold, --vmodule.
|
||||
Non-default choices are currently alpha and subject to change without warning. (default "text")
|
||||
--logging-format string Sets the log format. Permitted formats: "text". (default "text")
|
||||
-v, --v Level number for the log level verbosity
|
||||
--vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
|
||||
`
|
||||
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
Copyright 2022 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package klogflags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
// Init is a replacement for klog.InitFlags which only adds those flags
|
||||
// that are still supported for Kubernetes components (i.e. -v and -vmodule).
|
||||
// See
|
||||
// https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components.
|
||||
func Init(fs *flag.FlagSet) {
|
||||
var allFlags flag.FlagSet
|
||||
klog.InitFlags(&allFlags)
|
||||
if fs == nil {
|
||||
fs = flag.CommandLine
|
||||
}
|
||||
allFlags.VisitAll(func(f *flag.Flag) {
|
||||
switch f.Name {
|
||||
case "v", "vmodule":
|
||||
fs.Var(f.Value, f.Name, f.Usage)
|
||||
}
|
||||
})
|
||||
}
|
@ -27,16 +27,11 @@ import (
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
logsapi "k8s.io/component-base/logs/api/v1"
|
||||
"k8s.io/component-base/logs/klogflags"
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
const deprecated = "will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components"
|
||||
|
||||
// TODO (https://github.com/kubernetes/kubernetes/issues/105310): once klog
|
||||
// flags are removed, stop warning about "Non-default formats don't honor these
|
||||
// flags" in config.go and instead add this remark here.
|
||||
//
|
||||
// const vmoduleUsage = " (only works for the default text log format)"
|
||||
const vmoduleUsage = " (only works for the default text log format)"
|
||||
|
||||
var (
|
||||
packageFlags = flag.NewFlagSet("logging", flag.ContinueOnError)
|
||||
@ -47,7 +42,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
klog.InitFlags(packageFlags)
|
||||
klogflags.Init(packageFlags)
|
||||
packageFlags.DurationVar(&logFlushFreq, logsapi.LogFlushFreqFlagName, logsapi.LogFlushFreqDefault, "Maximum number of seconds between log flushes")
|
||||
}
|
||||
|
||||
@ -81,42 +76,29 @@ var NewOptions = logsapi.NewLoggingConfiguration
|
||||
//
|
||||
// May be called more than once.
|
||||
func AddFlags(fs *pflag.FlagSet, opts ...Option) {
|
||||
// Determine whether the flags are already present by looking up one
|
||||
// which always should exist.
|
||||
if fs.Lookup("logtostderr") != nil {
|
||||
return
|
||||
}
|
||||
|
||||
o := addFlagsOptions{}
|
||||
for _, opt := range opts {
|
||||
opt(&o)
|
||||
}
|
||||
|
||||
// Add flags with pflag deprecation remark for some klog flags.
|
||||
// Add all supported flags.
|
||||
packageFlags.VisitAll(func(f *flag.Flag) {
|
||||
pf := pflag.PFlagFromGoFlag(f)
|
||||
switch f.Name {
|
||||
case "v":
|
||||
// unchanged, potentially skip it
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
case logsapi.LogFlushFreqFlagName:
|
||||
case "v", logsapi.LogFlushFreqFlagName:
|
||||
// unchanged, potentially skip it
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
case "vmodule":
|
||||
// TODO: see above
|
||||
// pf.Usage += vmoduleUsage
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
default:
|
||||
// deprecated, but not hidden
|
||||
pf.Deprecated = deprecated
|
||||
pf.Usage += vmoduleUsage
|
||||
}
|
||||
if fs.Lookup(pf.Name) == nil {
|
||||
fs.AddFlag(pf)
|
||||
}
|
||||
fs.AddFlag(pf)
|
||||
})
|
||||
}
|
||||
|
||||
@ -137,24 +119,16 @@ func AddGoFlags(fs *flag.FlagSet, opts ...Option) {
|
||||
packageFlags.VisitAll(func(f *flag.Flag) {
|
||||
usage := f.Usage
|
||||
switch f.Name {
|
||||
case "v":
|
||||
// unchanged
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
case logsapi.LogFlushFreqFlagName:
|
||||
case "v", logsapi.LogFlushFreqFlagName:
|
||||
// unchanged
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
case "vmodule":
|
||||
// TODO: see above
|
||||
// usage += vmoduleUsage
|
||||
if o.skipLoggingConfigurationFlags {
|
||||
return
|
||||
}
|
||||
default:
|
||||
usage += " (DEPRECATED: " + deprecated + ")"
|
||||
usage += vmoduleUsage
|
||||
}
|
||||
fs.Var(f.Value, f.Name, usage)
|
||||
})
|
||||
|
1
vendor/modules.txt
vendored
1
vendor/modules.txt
vendored
@ -2029,6 +2029,7 @@ k8s.io/component-base/logs
|
||||
k8s.io/component-base/logs/api/v1
|
||||
k8s.io/component-base/logs/json
|
||||
k8s.io/component-base/logs/json/register
|
||||
k8s.io/component-base/logs/klogflags
|
||||
k8s.io/component-base/logs/logreduction
|
||||
k8s.io/component-base/logs/testinit
|
||||
k8s.io/component-base/metrics
|
||||
|
Loading…
Reference in New Issue
Block a user