diff --git a/cmd/descheduler/app/descheduler.go b/cmd/descheduler/app/descheduler.go index 8acc37a21..506e50320 100644 --- a/cmd/descheduler/app/descheduler.go +++ b/cmd/descheduler/app/descheduler.go @@ -2,7 +2,6 @@ package app import ( "context" - "flag" "fmt" "net" "net/http" @@ -17,11 +16,15 @@ import ( "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/term" "k8s.io/klog/v2" "github.com/karmada-io/karmada/cmd/descheduler/app/options" "github.com/karmada-io/karmada/pkg/descheduler" karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned" + "github.com/karmada-io/karmada/pkg/sharedcli" + "github.com/karmada-io/karmada/pkg/sharedcli/klogflag" "github.com/karmada-io/karmada/pkg/version" "github.com/karmada-io/karmada/pkg/version/sharedcommand" ) @@ -55,13 +58,21 @@ karmada-scheduler-estimator to get replica status.`, }, } - // Init log flags - // TODO(@RainbowMango): Group the flags to "logs" flag set. - klog.InitFlags(flag.CommandLine) + fss := cliflag.NamedFlagSets{} + + genericFlagSet := fss.FlagSet("generic") + opts.AddFlags(genericFlagSet) + + // Set klog flags + logsFlagSet := fss.FlagSet("logs") + klogflag.Add(logsFlagSet) - opts.AddFlags(cmd.Flags()) cmd.AddCommand(sharedcommand.NewCmdVersion(os.Stdout, "karmada-descheduler")) - cmd.Flags().AddGoFlagSet(flag.CommandLine) + cmd.Flags().AddFlagSet(genericFlagSet) + cmd.Flags().AddFlagSet(logsFlagSet) + + cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) + sharedcli.SetUsageAndHelpFunc(cmd, fss, cols) return cmd } diff --git a/cmd/descheduler/app/options/options.go b/cmd/descheduler/app/options/options.go index d57cfd58d..87eeda053 100644 --- a/cmd/descheduler/app/options/options.go +++ b/cmd/descheduler/app/options/options.go @@ -71,7 +71,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { } fs.BoolVar(&o.LeaderElection.LeaderElect, "leader-elect", true, "Enable leader election, which must be true when running multi instances.") fs.StringVar(&o.LeaderElection.ResourceNamespace, "leader-elect-resource-namespace", util.NamespaceKarmadaSystem, "The namespace of resource object that is used for locking during leader election.") - fs.StringVar(&o.KubeConfig, "kubeconfig", o.KubeConfig, "Path to a KubeConfig. Only required if out-of-cluster.") + fs.StringVar(&o.KubeConfig, "kubeconfig", o.KubeConfig, "Path to karmada control plane kubeconfig file.") fs.StringVar(&o.Master, "master", o.Master, "The address of the Kubernetes API server. Overrides any value in KubeConfig. Only required if out-of-cluster.") fs.StringVar(&o.BindAddress, "bind-address", defaultBindAddress, "The IP address on which to listen for the --secure-port port.") fs.IntVar(&o.SecurePort, "secure-port", defaultPort, "The secure port on which to serve HTTPS.")