Merge pull request #112120 from pohly/klog-flag-removal

logs: remove deprecated klog flags
This commit is contained in:
Kubernetes Prow Robot 2022-09-21 00:44:53 -07:00 committed by GitHub
commit 6dbec8e255
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 73 additions and 77 deletions

View File

@ -66,7 +66,8 @@ cd "${GOPATH}/src/k8s.io/kubernetes"
./hack/install-etcd.sh ./hack/install-etcd.sh
# Run the benchmark tests and pretty-print the results into a separate file. # Run the benchmark tests and pretty-print the results into a separate file.
make test-integration WHAT="$*" KUBE_TEST_ARGS="-run='XXX' -bench=${TEST_PREFIX:-.} -benchtime=${BENCHTIME:-1s} -benchmem -alsologtostderr=false -logtostderr=false -data-items-dir=${ARTIFACTS}" \ # Log output of the tests go to stderr.
make test-integration WHAT="$*" KUBE_TEST_ARGS="-run='XXX' -bench=${TEST_PREFIX:-.} -benchtime=${BENCHTIME:-1s} -benchmem -data-items-dir=${ARTIFACTS}" \
| (go run test/integration/benchmark/extractlog/main.go) \ | (go run test/integration/benchmark/extractlog/main.go) \
| tee \ | tee \
>(prettybench -no-passthrough > "${ARTIFACTS}/BenchmarkResults.txt") \ >(prettybench -no-passthrough > "${ARTIFACTS}/BenchmarkResults.txt") \

View File

@ -162,7 +162,7 @@ if [ "${remote}" = true ] && [ "${remote_mode}" = gce ] ; then
echo "Kubelet Config File: ${kubelet_config_file}" echo "Kubelet Config File: ${kubelet_config_file}"
# Invoke the runner # Invoke the runner
go run test/e2e_node/runner/remote/run_remote.go --logtostderr --vmodule=*=4 --ssh-env="gce" \ go run test/e2e_node/runner/remote/run_remote.go --vmodule=*=4 --ssh-env="gce" \
--zone="${zone}" --project="${project}" --gubernator="${gubernator}" \ --zone="${zone}" --project="${project}" --gubernator="${gubernator}" \
--hosts="${hosts}" --images="${images}" --cleanup="${cleanup}" \ --hosts="${hosts}" --images="${images}" --cleanup="${cleanup}" \
--results-dir="${artifacts}" --ginkgo-flags="${ginkgoflags}" --runtime-config="${runtime_config}" \ --results-dir="${artifacts}" --ginkgo-flags="${ginkgoflags}" --runtime-config="${runtime_config}" \
@ -189,7 +189,7 @@ elif [ "${remote}" = true ] && [ "${remote_mode}" = ssh ] ; then
test_args='--kubelet-flags="--cluster-domain='${KUBE_DNS_DOMAIN:-cluster.local}'" '${test_args} test_args='--kubelet-flags="--cluster-domain='${KUBE_DNS_DOMAIN:-cluster.local}'" '${test_args}
# Invoke the runner # Invoke the runner
go run test/e2e_node/runner/remote/run_remote.go --mode="ssh" --logtostderr --vmodule=*=4 \ go run test/e2e_node/runner/remote/run_remote.go --mode="ssh" --vmodule=*=4 \
--hosts="${hosts}" --results-dir="${artifacts}" --ginkgo-flags="${ginkgoflags}" \ --hosts="${hosts}" --results-dir="${artifacts}" --ginkgo-flags="${ginkgoflags}" \
--test_args="${test_args}" --system-spec-name="${system_spec_name}" \ --test_args="${test_args}" --system-spec-name="${system_spec_name}" \
--runtime-config="${runtime_config}" \ --runtime-config="${runtime_config}" \
@ -222,7 +222,7 @@ else
go run test/e2e_node/runner/local/run_local.go \ go run test/e2e_node/runner/local/run_local.go \
--system-spec-name="${system_spec_name}" --extra-envs="${extra_envs}" \ --system-spec-name="${system_spec_name}" --extra-envs="${extra_envs}" \
--ginkgo-flags="${ginkgoflags}" \ --ginkgo-flags="${ginkgoflags}" \
--test-flags="--alsologtostderr --v 4 --report-dir=${artifacts} --node-name $(hostname) ${test_args}" \ --test-flags="--v 4 --report-dir=${artifacts} --node-name $(hostname) ${test_args}" \
--runtime-config="${runtime_config}" \ --runtime-config="${runtime_config}" \
--kubelet-config-file="${kubelet_config_file}" \ --kubelet-config-file="${kubelet_config_file}" \
--build-dependencies=true 2>&1 | tee -i "${artifacts}/build-log.txt" --build-dependencies=true 2>&1 | tee -i "${artifacts}/build-log.txt"

View File

@ -78,7 +78,7 @@ runTests() {
make -C "${KUBE_ROOT}" test \ make -C "${KUBE_ROOT}" test \
WHAT="${WHAT:-$(kube::test::find_integration_test_dirs | paste -sd' ' -)}" \ WHAT="${WHAT:-$(kube::test::find_integration_test_dirs | paste -sd' ' -)}" \
GOFLAGS="${GOFLAGS:-}" \ GOFLAGS="${GOFLAGS:-}" \
KUBE_TEST_ARGS="--alsologtostderr=true ${SHORT:--short=true} --vmodule=${KUBE_TEST_VMODULE} ${KUBE_TEST_ARGS:-}" \ KUBE_TEST_ARGS="${SHORT:--short=true} --vmodule=${KUBE_TEST_VMODULE} ${KUBE_TEST_ARGS:-}" \
KUBE_TIMEOUT="${KUBE_TIMEOUT}" \ KUBE_TIMEOUT="${KUBE_TIMEOUT}" \
KUBE_RACE="" KUBE_RACE=""

View File

@ -84,7 +84,6 @@ kube::log::status "Starting kube-apiserver"
--service-account-lookup="${SERVICE_ACCOUNT_LOOKUP}" \ --service-account-lookup="${SERVICE_ACCOUNT_LOOKUP}" \
--service-account-issuer="https://kubernetes.default.svc" \ --service-account-issuer="https://kubernetes.default.svc" \
--service-account-signing-key-file="${SERVICE_ACCOUNT_KEY}" \ --service-account-signing-key-file="${SERVICE_ACCOUNT_KEY}" \
--logtostderr \
--v=2 \ --v=2 \
--service-cluster-ip-range="10.0.0.0/24" >"${API_LOGFILE}" 2>&1 & --service-cluster-ip-range="10.0.0.0/24" >"${API_LOGFILE}" 2>&1 &
APISERVER_PID=$! APISERVER_PID=$!

View File

@ -62,7 +62,7 @@ func TestAddGlobalFlags(t *testing.T) {
}{ }{
{ {
// Happy case // 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, matchExpected: false,
}, },
{ {

View File

@ -20,7 +20,6 @@ import (
"flag" "flag"
"fmt" "fmt"
"math" "math"
"sort"
"strings" "strings"
"time" "time"
@ -32,6 +31,7 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
cliflag "k8s.io/component-base/cli/flag" cliflag "k8s.io/component-base/cli/flag"
"k8s.io/component-base/featuregate" "k8s.io/component-base/featuregate"
"k8s.io/component-base/logs/klogflags"
) )
const ( const (
@ -183,12 +183,8 @@ func apply(c *LoggingConfiguration, featureGate featuregate.FeatureGate) error {
// AddFlags adds command line flags for the configuration. // AddFlags adds command line flags for the configuration.
func AddFlags(c *LoggingConfiguration, fs *pflag.FlagSet) { 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() 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 // No new log formats should be added after generation is of flag options
logRegistry.freeze() logRegistry.freeze()
@ -236,14 +232,13 @@ var loggingFlags pflag.FlagSet
func init() { func init() {
var fs flag.FlagSet var fs flag.FlagSet
klog.InitFlags(&fs) klogflags.Init(&fs)
loggingFlags.AddGoFlagSet(&fs) loggingFlags.AddGoFlagSet(&fs)
} }
// List of logs (k8s.io/klog + k8s.io/component-base/logs) flags supported by all logging formats // List of logs (k8s.io/klog + k8s.io/component-base/logs) flags supported by all logging formats
var supportedLogsFlags = map[string]struct{}{ var supportedLogsFlags = map[string]struct{}{
"v": {}, "v": {},
// TODO: support vmodule after 1.19 Alpha
} }
// unsupportedLoggingFlags lists unsupported logging flags. The normalize // unsupportedLoggingFlags lists unsupported logging flags. The normalize
@ -268,15 +263,3 @@ func unsupportedLoggingFlags(normalizeFunc func(f *pflag.FlagSet, name string) p
}) })
return allFlags 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
}

View File

@ -39,9 +39,7 @@ func TestFlags(t *testing.T) {
fs.SetOutput(&output) fs.SetOutput(&output)
fs.PrintDefaults() fs.PrintDefaults()
want := ` --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) want := ` --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s)
--logging-format string Sets the log format. Permitted formats: "text". --logging-format string Sets the log format. Permitted formats: "text". (default "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")
-v, --v Level number for the log level verbosity -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) --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
` `

View File

@ -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)
}
})
}

View File

@ -27,16 +27,11 @@ import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
logsapi "k8s.io/component-base/logs/api/v1" logsapi "k8s.io/component-base/logs/api/v1"
"k8s.io/component-base/logs/klogflags"
"k8s.io/klog/v2" "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" const vmoduleUsage = " (only works for the default text log format)"
// 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)"
var ( var (
packageFlags = flag.NewFlagSet("logging", flag.ContinueOnError) packageFlags = flag.NewFlagSet("logging", flag.ContinueOnError)
@ -47,7 +42,7 @@ var (
) )
func init() { func init() {
klog.InitFlags(packageFlags) klogflags.Init(packageFlags)
packageFlags.DurationVar(&logFlushFreq, logsapi.LogFlushFreqFlagName, logsapi.LogFlushFreqDefault, "Maximum number of seconds between log flushes") 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. // May be called more than once.
func AddFlags(fs *pflag.FlagSet, opts ...Option) { 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{} o := addFlagsOptions{}
for _, opt := range opts { for _, opt := range opts {
opt(&o) opt(&o)
} }
// Add flags with pflag deprecation remark for some klog flags. // Add all supported flags.
packageFlags.VisitAll(func(f *flag.Flag) { packageFlags.VisitAll(func(f *flag.Flag) {
pf := pflag.PFlagFromGoFlag(f) pf := pflag.PFlagFromGoFlag(f)
switch f.Name { switch f.Name {
case "v": case "v", logsapi.LogFlushFreqFlagName:
// unchanged, potentially skip it
if o.skipLoggingConfigurationFlags {
return
}
case logsapi.LogFlushFreqFlagName:
// unchanged, potentially skip it // unchanged, potentially skip it
if o.skipLoggingConfigurationFlags { if o.skipLoggingConfigurationFlags {
return return
} }
case "vmodule": case "vmodule":
// TODO: see above
// pf.Usage += vmoduleUsage
if o.skipLoggingConfigurationFlags { if o.skipLoggingConfigurationFlags {
return return
} }
default: pf.Usage += vmoduleUsage
// deprecated, but not hidden
pf.Deprecated = deprecated
} }
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) { packageFlags.VisitAll(func(f *flag.Flag) {
usage := f.Usage usage := f.Usage
switch f.Name { switch f.Name {
case "v": case "v", logsapi.LogFlushFreqFlagName:
// unchanged
if o.skipLoggingConfigurationFlags {
return
}
case logsapi.LogFlushFreqFlagName:
// unchanged // unchanged
if o.skipLoggingConfigurationFlags { if o.skipLoggingConfigurationFlags {
return return
} }
case "vmodule": case "vmodule":
// TODO: see above
// usage += vmoduleUsage
if o.skipLoggingConfigurationFlags { if o.skipLoggingConfigurationFlags {
return return
} }
default: usage += vmoduleUsage
usage += " (DEPRECATED: " + deprecated + ")"
} }
fs.Var(f.Value, f.Name, usage) fs.Var(f.Value, f.Name, usage)
}) })

View File

@ -201,7 +201,6 @@ start_kubelet --kubeconfig "${KUBELET_KUBECONFIG}" \
--system-cgroups=/system \ --system-cgroups=/system \
--cgroup-root=/ \ --cgroup-root=/ \
--v=$log_level \ --v=$log_level \
--logtostderr
wait_kubelet wait_kubelet

View File

@ -33,7 +33,7 @@ TIMEOUT=${TIMEOUT:-"45m"}
mkdir -p "${ARTIFACTS}" mkdir -p "${ARTIFACTS}"
go run test/e2e_node/runner/remote/run_remote.go --test-suite=conformance \ go run test/e2e_node/runner/remote/run_remote.go --test-suite=conformance \
--logtostderr --vmodule=*=4 --ssh-env="gce" --ssh-user="$GCE_USER" \ --vmodule=*=4 --ssh-env="gce" --ssh-user="$GCE_USER" \
--zone="$GCE_ZONE" --project="$GCE_PROJECT" --hosts="$GCE_HOSTS" \ --zone="$GCE_ZONE" --project="$GCE_PROJECT" --hosts="$GCE_HOSTS" \
--images="$GCE_IMAGES" --image-project="$GCE_IMAGE_PROJECT" \ --images="$GCE_IMAGES" --image-project="$GCE_IMAGE_PROJECT" \
--image-config-file="$GCE_IMAGE_CONFIG_PATH" --cleanup="$CLEANUP" \ --image-config-file="$GCE_IMAGE_CONFIG_PATH" --cleanup="$CLEANUP" \

View File

@ -181,7 +181,7 @@ func launchKubelet(host, workspace, results, testArgs, bearerToken string) error
return fmt.Errorf("failed to create kubelet pod manifest path %q: error - %v output - %q", return fmt.Errorf("failed to create kubelet pod manifest path %q: error - %v output - %q",
podManifestPath, err, output) podManifestPath, err, output)
} }
startKubeletCmd := fmt.Sprintf("./%s --run-kubelet-mode --logtostderr --node-name=%s"+ startKubeletCmd := fmt.Sprintf("./%s --run-kubelet-mode --node-name=%s"+
" --bearer-token=%s"+ " --bearer-token=%s"+
" --report-dir=%s %s --kubelet-flags=--pod-manifest-path=%s > %s 2>&1", " --report-dir=%s %s --kubelet-flags=--pod-manifest-path=%s > %s 2>&1",
conformanceTestBinary, host, bearerToken, results, testArgs, podManifestPath, filepath.Join(results, kubeletLauncherLog)) conformanceTestBinary, host, bearerToken, results, testArgs, podManifestPath, filepath.Join(results, kubeletLauncherLog))

View File

@ -200,7 +200,7 @@ func (n *NodeE2ERemote) RunTest(host, workspace, results, imageDesc, junitFilePr
klog.V(2).Infof("Starting tests on %q", host) klog.V(2).Infof("Starting tests on %q", host)
cmd := getSSHCommand(" && ", cmd := getSSHCommand(" && ",
fmt.Sprintf("cd %s", workspace), fmt.Sprintf("cd %s", workspace),
fmt.Sprintf("timeout -k 30s %fs ./ginkgo %s ./e2e_node.test -- --system-spec-name=%s --system-spec-file=%s --extra-envs=%s --runtime-config=%s --logtostderr --v 4 --node-name=%s --report-dir=%s --report-prefix=%s --image-description=\"%s\" %s", fmt.Sprintf("timeout -k 30s %fs ./ginkgo %s ./e2e_node.test -- --system-spec-name=%s --system-spec-file=%s --extra-envs=%s --runtime-config=%s --v 4 --node-name=%s --report-dir=%s --report-prefix=%s --image-description=\"%s\" %s",
timeout.Seconds(), ginkgoArgs, systemSpecName, systemSpecFile, extraEnvs, runtimeConfig, host, results, junitFilePrefix, imageDesc, testArgs), timeout.Seconds(), ginkgoArgs, systemSpecName, systemSpecFile, extraEnvs, runtimeConfig, host, results, junitFilePrefix, imageDesc, testArgs),
) )
return SSH(host, "sh", "-c", cmd) return SSH(host, "sh", "-c", cmd)

View File

@ -15,9 +15,9 @@ limitations under the License.
*/ */
// To run the node e2e tests remotely against one or more hosts on gce: // To run the node e2e tests remotely against one or more hosts on gce:
// $ go run run_remote.go --logtostderr --v 2 --ssh-env gce --hosts <comma separated hosts> // $ go run run_remote.go --v 2 --ssh-env gce --hosts <comma separated hosts>
// To run the node e2e tests remotely against one or more images on gce and provision them: // To run the node e2e tests remotely against one or more images on gce and provision them:
// $ go run run_remote.go --logtostderr --v 2 --project <project> --zone <zone> --ssh-env gce --images <comma separated images> // $ go run run_remote.go --v 2 --project <project> --zone <zone> --ssh-env gce --images <comma separated images>
package main package main
import ( import (

View File

@ -252,7 +252,7 @@ func (e *E2EServices) startKubelet(featureGates map[string]bool) (*server, error
cmdArgs = append(cmdArgs, cmdArgs = append(cmdArgs,
"--kubeconfig", kubeconfigPath, "--kubeconfig", kubeconfigPath,
"--root-dir", KubeletRootDirectory, "--root-dir", KubeletRootDirectory,
"--v", LogVerbosityLevel, "--logtostderr", "--v", LogVerbosityLevel,
) )
// Apply test framework feature gates by default. This could also be overridden // Apply test framework feature gates by default. This could also be overridden

View File

@ -32,7 +32,7 @@ How To Run
```shell ```shell
# In Kubernetes root path # In Kubernetes root path
make test-integration WHAT=./test/integration/scheduler_perf ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-alsologtostderr=false -logtostderr=false -run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling" make test-integration WHAT=./test/integration/scheduler_perf ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling"
``` ```
The benchmark suite runs all the tests specified under config/performance-config.yaml. The benchmark suite runs all the tests specified under config/performance-config.yaml.
@ -47,14 +47,14 @@ Otherwise, the golang benchmark framework will try to run a test more than once
```shell ```shell
# In Kubernetes root path # In Kubernetes root path
make test-integration WHAT=./test/integration/scheduler_perf ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-alsologtostderr=false -logtostderr=false -run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling/SchedulingBasic/5000Nodes/5000InitPods/1000PodsToSchedule" make test-integration WHAT=./test/integration/scheduler_perf ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling/SchedulingBasic/5000Nodes/5000InitPods/1000PodsToSchedule"
``` ```
To produce a cpu profile: To produce a cpu profile:
```shell ```shell
# In Kubernetes root path # In Kubernetes root path
make test-integration WHAT=./test/integration/scheduler_perf KUBE_TIMEOUT="-timeout=3600s" ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-alsologtostderr=false -logtostderr=false -run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling -cpuprofile ~/cpu-profile.out" make test-integration WHAT=./test/integration/scheduler_perf KUBE_TIMEOUT="-timeout=3600s" ETCD_LOGLEVEL=warn KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -benchtime=1ns -bench=BenchmarkPerfScheduling -cpuprofile ~/cpu-profile.out"
``` ```
### How to configure benchmark tests ### How to configure benchmark tests

1
vendor/modules.txt vendored
View File

@ -2014,6 +2014,7 @@ k8s.io/component-base/logs
k8s.io/component-base/logs/api/v1 k8s.io/component-base/logs/api/v1
k8s.io/component-base/logs/json k8s.io/component-base/logs/json
k8s.io/component-base/logs/json/register k8s.io/component-base/logs/json/register
k8s.io/component-base/logs/klogflags
k8s.io/component-base/logs/logreduction k8s.io/component-base/logs/logreduction
k8s.io/component-base/logs/testinit k8s.io/component-base/logs/testinit
k8s.io/component-base/metrics k8s.io/component-base/metrics