Merge pull request #96655 from serathius/kubectl-top-protobuf

Use protobuf for kubectl top
This commit is contained in:
Kubernetes Prow Robot 2021-03-06 05:33:41 -08:00 committed by GitHub
commit a54414e343
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 11 deletions

View File

@ -27,6 +27,7 @@ import (
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
corev1client "k8s.io/client-go/kubernetes/typed/core/v1" corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/klog/v2"
cmdutil "k8s.io/kubectl/pkg/cmd/util" cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/metricsutil" "k8s.io/kubectl/pkg/metricsutil"
"k8s.io/kubectl/pkg/util/i18n" "k8s.io/kubectl/pkg/util/i18n"
@ -42,6 +43,8 @@ type TopNodeOptions struct {
Selector string Selector string
SortBy string SortBy string
NoHeaders bool NoHeaders bool
UseProtocolBuffers bool
NodeClient corev1client.CoreV1Interface NodeClient corev1client.CoreV1Interface
Printer *metricsutil.TopCmdPrinter Printer *metricsutil.TopCmdPrinter
DiscoveryClient discovery.DiscoveryInterface DiscoveryClient discovery.DiscoveryInterface
@ -87,6 +90,7 @@ func NewCmdTopNode(f cmdutil.Factory, o *TopNodeOptions, streams genericclioptio
cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)") cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)")
cmd.Flags().StringVar(&o.SortBy, "sort-by", o.Selector, "If non-empty, sort nodes list using specified field. The field can be either 'cpu' or 'memory'.") cmd.Flags().StringVar(&o.SortBy, "sort-by", o.Selector, "If non-empty, sort nodes list using specified field. The field can be either 'cpu' or 'memory'.")
cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers") cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers")
cmd.Flags().BoolVar(&o.UseProtocolBuffers, "use-protocol-buffers", o.UseProtocolBuffers, "If present, protocol-buffers will be used to request metrics.")
return cmd return cmd
} }
@ -109,6 +113,11 @@ func (o *TopNodeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []
if err != nil { if err != nil {
return err return err
} }
if o.UseProtocolBuffers {
config.ContentType = "application/vnd.kubernetes.protobuf"
} else {
klog.Warning("Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag")
}
o.MetricsClient, err = metricsclientset.NewForConfig(config) o.MetricsClient, err = metricsclientset.NewForConfig(config)
if err != nil { if err != nil {
return err return err

View File

@ -48,6 +48,8 @@ type TopPodOptions struct {
AllNamespaces bool AllNamespaces bool
PrintContainers bool PrintContainers bool
NoHeaders bool NoHeaders bool
UseProtocolBuffers bool
PodClient corev1client.PodsGetter PodClient corev1client.PodsGetter
Printer *metricsutil.TopCmdPrinter Printer *metricsutil.TopCmdPrinter
DiscoveryClient discovery.DiscoveryInterface DiscoveryClient discovery.DiscoveryInterface
@ -106,6 +108,7 @@ func NewCmdTopPod(f cmdutil.Factory, o *TopPodOptions, streams genericclioptions
cmd.Flags().BoolVar(&o.PrintContainers, "containers", o.PrintContainers, "If present, print usage of containers within a pod.") cmd.Flags().BoolVar(&o.PrintContainers, "containers", o.PrintContainers, "If present, print usage of containers within a pod.")
cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.") cmd.Flags().BoolVarP(&o.AllNamespaces, "all-namespaces", "A", o.AllNamespaces, "If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.")
cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers.") cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers.")
cmd.Flags().BoolVar(&o.UseProtocolBuffers, "use-protocol-buffers", o.UseProtocolBuffers, "If present, protocol-buffers will be used to request metrics.")
return cmd return cmd
} }
@ -131,6 +134,11 @@ func (o *TopPodOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s
if err != nil { if err != nil {
return err return err
} }
if o.UseProtocolBuffers {
config.ContentType = "application/vnd.kubernetes.protobuf"
} else {
klog.Warning("Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag")
}
o.MetricsClient, err = metricsclientset.NewForConfig(config) o.MetricsClient, err = metricsclientset.NewForConfig(config)
if err != nil { if err != nil {
return err return err