From 265e5ae0857908849b39cf410bdf09f0c24f50fa Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Wed, 14 Feb 2018 11:17:28 -0500 Subject: [PATCH] Log the command line flags With d7ddcca231612c618dce4e9895478167d397cbd7, we lost the logging of the flags. We should at least log what the command line flags were used to start processes as those incredibly useful for trouble shooting. --- cmd/cloud-controller-manager/app/BUILD | 1 + .../app/controllermanager.go | 2 ++ cmd/kube-apiserver/app/BUILD | 1 + cmd/kube-apiserver/app/server.go | 2 ++ cmd/kube-controller-manager/app/BUILD | 1 + .../app/controllermanager.go | 2 ++ cmd/kube-proxy/app/BUILD | 1 + cmd/kube-proxy/app/server.go | 3 ++ cmd/kube-scheduler/app/BUILD | 1 + cmd/kube-scheduler/app/server.go | 3 ++ cmd/kubelet/app/BUILD | 1 + cmd/kubelet/app/server.go | 6 ++-- cmd/kubelet/kubelet.go | 1 - pkg/util/BUILD | 1 + pkg/util/flag/BUILD | 29 +++++++++++++++++++ pkg/util/flag/flags.go | 29 +++++++++++++++++++ 16 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 pkg/util/flag/BUILD create mode 100644 pkg/util/flag/flags.go diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index 64cae62d6f1..9f2eca3efa9 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/controller/route:go_default_library", "//pkg/controller/service:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/version/verflag:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 879035c175f..5f7c4575cb1 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -44,6 +44,7 @@ import ( routecontroller "k8s.io/kubernetes/pkg/controller/route" servicecontroller "k8s.io/kubernetes/pkg/controller/service" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version/verflag" ) @@ -61,6 +62,7 @@ func NewCloudControllerManagerCommand() *cobra.Command { the cloud specific control loops shipped with Kubernetes.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) c, err := s.Config() if err != nil { diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index 2e48b70b633..ba7fa92a038 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -43,6 +43,7 @@ go_library( "//pkg/quota/install:go_default_library", "//pkg/registry/cachesize:go_default_library", "//pkg/registry/rbac/rest:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/reflector/prometheus:go_default_library", "//pkg/util/workqueue/prometheus:go_default_library", "//pkg/version:go_default_library", diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 206e512e7a4..be44798d9b7 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -91,6 +91,7 @@ import ( "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap" + utilflag "k8s.io/kubernetes/pkg/util/flag" _ "k8s.io/kubernetes/pkg/util/reflector/prometheus" // for reflector metric registration _ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // for workqueue metric registration "k8s.io/kubernetes/pkg/version/verflag" @@ -110,6 +111,7 @@ others. The API Server services REST operations and provides the frontend to the cluster's shared state through which all other components interact.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) stopCh := server.SetupSignalHandler() if err := Run(s, stopCh); err != nil { diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 7df78fa24c6..709331de8ee 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -85,6 +85,7 @@ go_library( "//pkg/quota/install:go_default_library", "//pkg/serviceaccount:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/metrics:go_default_library", "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 5bc5260f0c4..00dbe3d1b00 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -51,6 +51,7 @@ import ( serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" ) @@ -82,6 +83,7 @@ Kubernetes today are the replication controller, endpoints controller, namespace controller, and serviceaccounts controller.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) c, err := s.Config(KnownControllers(), ControllersDisabledByDefault.List()) if err != nil { diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 6a785fa8114..8f389dd6453 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -67,6 +67,7 @@ go_library( "//pkg/proxy/ipvs:go_default_library", "//pkg/proxy/userspace:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/ipset:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/ipvs:go_default_library", diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 3337dcdaa62..442fd3cd817 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -63,6 +63,7 @@ import ( "k8s.io/kubernetes/pkg/proxy/ipvs" "k8s.io/kubernetes/pkg/proxy/userspace" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" utilipset "k8s.io/kubernetes/pkg/util/ipset" utiliptables "k8s.io/kubernetes/pkg/util/iptables" utilipvs "k8s.io/kubernetes/pkg/util/ipvs" @@ -333,6 +334,8 @@ addon that provides cluster DNS for these cluster IPs. The user must create a se with the apiserver API to configure the proxy.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) + cmdutil.CheckErr(opts.Complete()) cmdutil.CheckErr(opts.Validate(args)) cmdutil.CheckErr(opts.Run()) diff --git a/cmd/kube-scheduler/app/BUILD b/cmd/kube-scheduler/app/BUILD index 4e2f786dc37..aac41e86d09 100644 --- a/cmd/kube-scheduler/app/BUILD +++ b/cmd/kube-scheduler/app/BUILD @@ -24,6 +24,7 @@ go_library( "//pkg/scheduler/api/latest:go_default_library", "//pkg/scheduler/factory:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", "//vendor/github.com/golang/glog:go_default_library", diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index 139249b19e6..98b042713eb 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -64,6 +64,7 @@ import ( latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" "k8s.io/kubernetes/pkg/scheduler/factory" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" @@ -331,6 +332,8 @@ interference, deadlines, and so on. Workload-specific requirements will be expos through the API as necessary.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) + cmdutil.CheckErr(opts.Complete()) cmdutil.CheckErr(opts.Validate(args)) cmdutil.CheckErr(opts.Run()) diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index 814a7ce430c..b3108e5e291 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -94,6 +94,7 @@ go_library( "//pkg/kubelet/types:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/filesystem:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/flock:go_default_library", "//pkg/util/io:go_default_library", "//pkg/util/mount:go_default_library", diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 21347dba652..b09b9c871a4 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -31,7 +31,6 @@ import ( "path" "path/filepath" "strconv" - "strings" "time" "github.com/golang/glog" @@ -84,6 +83,7 @@ import ( kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/util/configz" utilfs "k8s.io/kubernetes/pkg/util/filesystem" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/util/flock" kubeio "k8s.io/kubernetes/pkg/util/io" "k8s.io/kubernetes/pkg/util/mount" @@ -154,9 +154,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API // short-circuit on verflag verflag.PrintAndExitIfRequested() - - // log args (separate lines, so we don't overflow line-length limits in logging infrastructure) - glog.V(2).Infof("kubelet flags: %s", strings.Join(args, "\n")) + utilflag.PrintFlags(cleanFlagSet) // set feature gates from initial flags-based config if err := utilfeature.DefaultFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { diff --git a/cmd/kubelet/kubelet.go b/cmd/kubelet/kubelet.go index fea34cd64fe..3f5b2937779 100644 --- a/cmd/kubelet/kubelet.go +++ b/cmd/kubelet/kubelet.go @@ -36,7 +36,6 @@ func main() { rand.Seed(time.Now().UTC().UnixNano()) command := app.NewKubeletCommand() - logs.InitLogs() defer logs.FlushLogs() diff --git a/pkg/util/BUILD b/pkg/util/BUILD index 362af715259..67d1d92a46f 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -20,6 +20,7 @@ filegroup( "//pkg/util/env:all-srcs", "//pkg/util/file:all-srcs", "//pkg/util/filesystem:all-srcs", + "//pkg/util/flag:all-srcs", "//pkg/util/flock:all-srcs", "//pkg/util/goroutinemap:all-srcs", "//pkg/util/hash:all-srcs", diff --git a/pkg/util/flag/BUILD b/pkg/util/flag/BUILD new file mode 100644 index 00000000000..2295ae5fb04 --- /dev/null +++ b/pkg/util/flag/BUILD @@ -0,0 +1,29 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["flags.go"], + importpath = "k8s.io/kubernetes/pkg/util/flag", + deps = [ + "//vendor/github.com/golang/glog:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/util/flag/flags.go b/pkg/util/flag/flags.go new file mode 100644 index 00000000000..e55bac1121c --- /dev/null +++ b/pkg/util/flag/flags.go @@ -0,0 +1,29 @@ +/* +Copyright 2018 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 flag + +import ( + "github.com/golang/glog" + "github.com/spf13/pflag" +) + +// PrintFlags logs the flags in the flagset +func PrintFlags(flags *pflag.FlagSet) { + flags.VisitAll(func(flag *pflag.Flag) { + glog.V(1).Infof("FLAG: --%s=%q", flag.Name, flag.Value) + }) +}