mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Add a flag to enable "Capacity" instead of "Allocatable" for an actual node memory total usage.
If "Allocatable" is used to a node total memory size, under high memory pressure or pre-reserved memory value is bigger, the "MEMORY%" can be bigger than 100%. For suppressing the confusing, add a option to show node real memory usage based on "Capacity". * Reference: https://github.com/kubernetes/kubernetes/issues/86499
This commit is contained in:
parent
f363322d4a
commit
862937bf1c
@ -43,6 +43,7 @@ type TopNodeOptions struct {
|
|||||||
SortBy string
|
SortBy string
|
||||||
NoHeaders bool
|
NoHeaders bool
|
||||||
UseProtocolBuffers bool
|
UseProtocolBuffers bool
|
||||||
|
ShowCapacity bool
|
||||||
|
|
||||||
NodeClient corev1client.CoreV1Interface
|
NodeClient corev1client.CoreV1Interface
|
||||||
Printer *metricsutil.TopCmdPrinter
|
Printer *metricsutil.TopCmdPrinter
|
||||||
@ -91,6 +92,7 @@ func NewCmdTopNode(f cmdutil.Factory, o *TopNodeOptions, streams genericclioptio
|
|||||||
cmd.Flags().StringVar(&o.SortBy, "sort-by", o.SortBy, "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.SortBy, "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, "Enables using protocol-buffers to access Metrics API.")
|
cmd.Flags().BoolVar(&o.UseProtocolBuffers, "use-protocol-buffers", o.UseProtocolBuffers, "Enables using protocol-buffers to access Metrics API.")
|
||||||
|
cmd.Flags().BoolVar(&o.ShowCapacity, "show-capacity", o.ShowCapacity, "Print node resources based on Capacity instead of Allocatable(default) of the nodes.")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
@ -186,13 +188,17 @@ func (o TopNodeOptions) RunTopNode() error {
|
|||||||
nodes = append(nodes, nodeList.Items...)
|
nodes = append(nodes, nodeList.Items...)
|
||||||
}
|
}
|
||||||
|
|
||||||
allocatable := make(map[string]v1.ResourceList)
|
availableResources := make(map[string]v1.ResourceList)
|
||||||
|
|
||||||
for _, n := range nodes {
|
for _, n := range nodes {
|
||||||
allocatable[n.Name] = n.Status.Allocatable
|
if !o.ShowCapacity {
|
||||||
|
availableResources[n.Name] = n.Status.Allocatable
|
||||||
|
} else {
|
||||||
|
availableResources[n.Name] = n.Status.Capacity
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return o.Printer.PrintNodeMetrics(metrics.Items, allocatable, o.NoHeaders, o.SortBy)
|
return o.Printer.PrintNodeMetrics(metrics.Items, availableResources, o.NoHeaders, o.SortBy)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNodeMetricsFromMetricsAPI(metricsClient metricsclientset.Interface, resourceName string, selector labels.Selector) (*metricsapi.NodeMetricsList, error) {
|
func getNodeMetricsFromMetricsAPI(metricsClient metricsclientset.Interface, resourceName string, selector labels.Selector) (*metricsapi.NodeMetricsList, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user