# Node group view

{% hint style="info" %}
To customize tables and focus on the data that matters most, use the Columns menu. Learn more about table customization [here](/customize-workflow/tables-customization.md).
{% endhint %}

This view provides a comprehensive and granular breakdown of all node groups within a cluster. It facilitates immediate identification of resource inefficiencies, enables quick prioritization of optimization tasks for optimal results, and unlocks further deep investigation.

<figure><img src="/files/hQ44h9NH86PUOFqPGKXU" alt=""><figcaption><p>Node group view</p></figcaption></figure>

## Data table

{% hint style="info" %}
Node group **`<none>`** contains nodes whose labels were not identified (for example, custom labels). In that case, we recommend you group such nodes manually by configuring the [**`Label Customizations Profile`**](/customize-workflow/label-customizations.md#node_group_labels).\
\
![](/files/DSOGazmslIlIbFhsMbTQ)
{% endhint %}

<table><thead><tr><th width="201.2119140625">Column</th><th>Description</th></tr></thead><tbody><tr><td>Node Group</td><td>This displays the Node Group Name. To sort or filter data, click on a column title or use a drop-down list.</td></tr><tr><td>Architecture</td><td>This displays the Node Architecture (ARM, x86). You can sort or filter data by clicking on a column title or using a drop-down list.</td></tr><tr><td>Nodes (avg &#x26; max)</td><td>This displays the average and maximum number of nodes in a specific node group. Click on a column title to sort the data.</td></tr><tr><td>Reservation</td><td>Display the reservation type of nodes in the group. To sort or filter data, click on a column title or use a drop-down list.</td></tr><tr><td>Avg Cost/h</td><td>Displays the average node group cost per hour. Click on a column title to sort data.</td></tr><tr><td>Total Cost</td><td>Displays the total node group cost. Click on a column title to sort data.</td></tr><tr><td>Idle Cost</td><td>Displays the cost of the space in a node group that has never been used. Click on a column title to sort the data.</td></tr><tr><td>Potential savings</td><td>Displays the estimated dollar savings by applying <a href="#node-recommendations">node recommendations</a>.</td></tr><tr><td>Last Seen</td><td>Displays the last time PerfectScale observed the Node Group.</td></tr><tr><td>Utilization</td><td>A visual representation of CPU and Memory Utilization (allocation, request, and usage) based on the <a href="/pages/91TaMCFHVCh5GRouOVBx#id-2.-utilization">selected usage percentile.</a> Use a drop-down list to filter data with the needed value.</td></tr></tbody></table>

**Node Groups Total**

Shows the total cost and idle of the nodes.

## Diving into the node group

By clicking on the node group, you will be navigated to the Node Group Details screen. Here, you can get a detailed view of the running workloads within this group or review the distribution of node types along with relevant data for further analysis.

Once you are in the Node Group, you can easily explore the data with various levels of granularity based on your needs:

* [Node Types](#node-recommendations)
* [Workloads](#workloads-view)
* [Workloads Chart](#workloads-chart-view)
* [Unevictable Pods](#unevictable-pods-view)

{% hint style="info" %}
PerfectScale automatically detects if a cluster autoscaler, for example, Karpenter, is running within a specific node group. When detected, a corresponding label is displayed next to the node group name in the top panel:

* Karpenter
* ClusterAutoscaler
* Unknown

<p align="center"><img src="/files/ZYOPnz4ApVLRQRorPttN" alt="" data-size="original"></p>
{% endhint %}

### ⚡️ **Node recommendations**

{% hint style="info" %}
Node recommendations **are not available when Karpenter is installed** in the cluster.

:bulb: If the current setup is cost-optimal, PerfectScale will not display recommendations, as the environment is considered well-balanced. In this case, a **`No new recommendations available`** banner will be shown. However, you can still access node recommendations by clicking **`Compare All`**.
{% endhint %}

<figure><img src="/files/pR3is0NwYwRl9QrSVI03" alt=""><figcaption><p>Node recommendations</p></figcaption></figure>

**Node Recommendations** is a powerful feature that provides actionable, data-driven insights to help you choose the optimal node type for your workloads and streamline the overall optimization process. Also, this view delivers the estimated savings you can achieve by applying the recommendations, enabling better forecasting and budget planning.

PerfectScale continuously analyzes your node groups and recommends alternative instance types that can run the same workloads at a lower cost. It takes into account workload resource requests, DaemonSet overhead, scheduling constraints, and instance compatibility to ensure accurate and reliable recommendations.

{% hint style="warning" %}
Node recommendations are optimized for steady-state workloads (*e.g., Deployments, StatefulSets*). Bursty workloads like *Jobs* or *CI pipelines* may yield less accurate results due to their ephemeral nature.
{% endhint %}

Click the `Show` button to expand the view and see the top four best-fit node type recommendations, ranked by achievable savings, with the best match listed first.

<figure><img src="/files/VWDtPjoi1cGqOOuEDYHL" alt=""><figcaption><p>Top ranked node recommendations</p></figcaption></figure>

#### **Understanding recommendations**

PerfectScale provides tailored node recommendations to help you optimize costs while ensuring your workloads run efficiently. The following outlines how these recommendations are calculated:

* Only instance types from compatible families are considered (for example, general-purpose remains within general-purpose, etc.).
* Each instance takes into account the largest single workload, including DaemonSet overhead.
* PerfectScale simulates scheduling before providing the recommendation, ensuring all workloads can be successfully placed on the recommended number of nodes.

{% hint style="warning" %}
GPU-aware recommendations are not currently supported. If a GPU workload is detected, a disclaimer will be displayed to indicate this limitation.

<p align="center"><img src="/files/Fam8Iqih2Q3Vj0h2XwmZ" alt="" data-size="line"></p>
{% endhint %}

<figure><img src="/files/FmluLKvcS9ARlxQy8p3w" alt="" width="424"><figcaption><p>Node recommendation - best match</p></figcaption></figure>

The recommendations widget provides a recommended node type as well as node details, including instance type, resource allocation, average number of nodes, and the listed hourly node cost. &#x20;

PerfectScale also displays the projected cost impact, both hourly and monthly, after implementing the recommendations, along with the percentage difference compared to current costs. These values are calculated over a 30-day period using list pricing.

{% hint style="warning" %}
The price comparison between the original and recommended nodes is performed on a like-for-like basis: on-demand to on-demand and spot to spot. PerfectScale does not factor in any discounts the customer currently has on their existing nodes, as we cannot predict what discounts will apply to the recommended nodes if the change is made.
{% endhint %}

{% hint style="success" %}
PerfectScale highly values your feedback on node recommendations — don’t forget to click the **"Is this helpful?"** button to let us know!
{% endhint %}

<figure><img src="/files/Ifx5aiIfc6ixWxBhgfc3" alt=""><figcaption><p>Feedback button</p></figcaption></figure>

#### **Accessing the full recommendations list**

To view all available node recommendations, click the **`Compare All`** button. This will open the complete list, which you can search by instance family or type and sort by potential savings, projected cost, and other criteria to quickly find the nodes that best fit your needs.

<figure><img src="/files/uXzuMzkU1VRfYCpuNJ8X" alt=""><figcaption><p>Compare all recommendations</p></figcaption></figure>

#### **Muting the recommendations**

To hide recommendations for a specific node group, click the **`Mute`** button for that node group. PerfectScale will stop displaying recommendations for it. You can restore them at any time by clicking **`Unmute`**.

<figure><img src="/files/AYvEfro3XHqi1m6qK98e" alt=""><figcaption><p>Mute recommendations</p></figcaption></figure>

### **Node group details**

#### **Upper panel**

**Node Group** indicates the name of the node group associated with the displayed data.

**Optimization Policy** indicates the cluster policy that specifies how your resources should be allocated to support the individual needs of your workloads. Learn more about policies [here](/visibility-and-optimization/clusters-metrics-overview.md#optimization-policy).

**Timeframe** allows you to check the data for a specific time period: click on the drop-down list in the upper right corner and select one of the existing options.

Seamlessly **Export** and effortlessly share your data by exporting it into a .csv file for further analysis.

**Node Group Resources Utilization**

To view data at a specific percentile, use the Utilization filter. The filter will impact both the charts and the table.

<figure><img src="/files/dqZT6bqBie1RsWsA13lS" alt="" width="375"><figcaption><p>Percentile</p></figcaption></figure>

#### **Charts**

<figure><img src="/files/ZhO0H9N27zS5hJe6oymw" alt=""><figcaption><p>Charts</p></figcaption></figure>

**Cost per Node Type** displays the cost trend of the Node Types over the selected timeframe.

**CPU** displays the allocated, requested, and used amount of CPU (cores) with the selected usage percentile in the group over time.

**Memory** displays the allocated, requested, and used amount of Memory (GB)  with the selected usage percentile in the group over time.

#### **Node group data table**

<table><thead><tr><th width="215">Column</th><th>Description</th></tr></thead><tbody><tr><td>Node Type</td><td>Instance Type Name. Click on a column title or use a drop-down list to sort or filter data.</td></tr><tr><td>Architecture</td><td>Node Architecture. Click on a column title or use a drop-down list to sort or filter data.</td></tr><tr><td>Reservation</td><td>Node reservation type. Click on a column title or use a drop-down list to sort or filter data.</td></tr><tr><td>CPU/Mem (node)</td><td>Node size. Click on a column title to sort data.</td></tr><tr><td>Nodes avg/max</td><td>Average and maximum number of nodes with a specific type. Click on a column title to sort data.</td></tr><tr><td>Avg Pods per Node</td><td>Current average number of pods per the node in the node group.</td></tr><tr><td>Max Pods per Node</td><td>The maximum possible pods that can be scheduled on the node.</td></tr><tr><td>Running Hours</td><td>Total instance running hours. </td></tr><tr><td>Avg Cost/h</td><td>Average cost per hour of the instance with the specific type. Click on a column title to sort data.</td></tr><tr><td>Total Cost</td><td>Total cost of nodes with the specific type. Click on a column title to sort data.</td></tr><tr><td>Idle Cost</td><td>Cost of the space in nodes with the specific types that has never been used. Click on a column title to sort the data.</td></tr><tr><td>Last Seen</td><td>Last time PerfectScale observed node with a specific type.</td></tr><tr><td>Utilization</td><td>CPU and Memory Utilization (allocation, request, and usage) based on the <a href="#id-2.-node-group-resources-utilization">selected usage percentile</a>. Use a drop-down list to filter data with the needed value.</td></tr></tbody></table>

{% hint style="info" %}
Clicking on a specific node type will navigate you to the workloads table, displaying the workloads associated with that node type. \
![](/files/MzrUat6pje36SnXiFydi)\
This view is particularly helpful for identifying the most wasteful workload running on the node with the selected type and providing data-driven recommendations on how to eliminate it in a few clicks.\
To explore the workload details at a deeper level, click on the specific workload to open a [Zoom-in](/visibility-and-optimization/podfit-or-vertical-pod-right-sizing.md#zoom-in-window) window that provides an in-depth view.
{% endhint %}

## Workloads view

Diving into the workloads running on a specific node enables you to seamlessly identify which workloads contribute the most to resource waste due to over-provisioning and adjust resource allocations with data-driven recommendations, creating new opportunities to optimize your underlying Kubernetes infrastructure.

<figure><img src="/files/FlqjokZbn50pg1cxlKgK" alt=""><figcaption><p>Workloads view</p></figcaption></figure>

<table><thead><tr><th width="172">Column</th><th>Description</th></tr></thead><tbody><tr><td>Workload</td><td>Indicates the name of the workload.</td></tr><tr><td>Automation</td><td><p>Displays the automation status of a particular workload. You can easily sort the data by automation status to focus on the most relevant information for further investigation.</p><p><img src="https://docs.perfectscale.io/~gitbook/image?url=https%3A%2F%2F1573387604-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FABMqnYtsOO44JmQTVSnn%252Fuploads%252FHtTSjwEEyi7MfOyhNuy8%252FFrame%2520313942.png%3Falt%3Dmedia%26token%3Df9aa4f84-f8bb-4408-bb8a-50db719c2721&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=509adac&#x26;sv=1" alt=""></p></td></tr><tr><td>Type</td><td>Indicates the type of the workload.</td></tr><tr><td>Namespace</td><td>Indicates the workloads' namespace.</td></tr><tr><td>Running Hours</td><td>The workload running hours.</td></tr><tr><td>Total Cost</td><td>The total cost of allocated resources of the workload.</td></tr><tr><td>Pod Waste</td><td>The total cost of reducible workload resources.</td></tr><tr><td>Increase Needed</td><td>An estimated cost increase associated with implementing the recommendation to resolve resiliency risks caused by underprovisioned resources.</td></tr><tr><td>Potential Savings</td><td>An estimated dollar savings by applying workload sizing recommendations.</td></tr><tr><td>Container</td><td>Indicates the container of the workload.</td></tr></tbody></table>

**Labels and Policies view**

<figure><img src="/files/U853GaFSmp1ASwGr37be" alt="" width="563"><figcaption><p><strong>Labels and policies view</strong></p></figcaption></figure>

<table><thead><tr><th width="173">Column</th><th>Description</th></tr></thead><tbody><tr><td>Optimization Policy</td><td><p></p><p>Displays the Optimization policy associated with the workload:</p><ul><li>MaxSavings - maximum cost savings, the best for non-production environments</li><li>Balanced (default) - optimally balances cost and resiliency</li><li>ExtraHeadroom - the best fit for latency-sensitive environments</li><li>MaxHeadroom - keeps the environment above the highest spikes</li></ul></td></tr><tr><td>Labels</td><td>Displays the label associated with the workload. You can select up to two labels to display.</td></tr></tbody></table>

{% hint style="info" %}
To configure the label, click on the gear button. Then, choose the desired labels to be displayed and click the **`Apply`** button. Once the changes are applied, the values corresponding to the selected workload keys will be displayed.
{% endhint %}

{% hint style="warning" %}
The Workload labels have higher precedence than Namespace labels. If the Workload label and Namespace label have the same name, only the Workload label will display.
{% endhint %}

**HPA view**

The HPA view provides a clear overview of workloads utilizing Horizontal Pod Autoscaler (HPA). This feature enables users to quickly identify the workloads where HPA has been introduced and adjust HPA thresholds with provided informative tooltips that offer tailored recommendations. These recommendations are particularly helpful in optimizing scaling decisions, minimizing resource waste, and ensuring efficient operation of workloads.

<figure><img src="/files/Y9CaQyZswDFgYTwmYuBb" alt="" width="563"><figcaption><p>HPA view</p></figcaption></figure>

<table><thead><tr><th width="174">Column</th><th>Description</th></tr></thead><tbody><tr><td>HPA</td><td>Indicates whether HPA has been introduced for the workload. You can easily sort the column by clicking the header or apply specific filters.</td></tr><tr><td>CPU (%)</td><td><p>Displays the trigger for HPA by CPU. For insights on threshold recommendations, simply hover over the warning tooltip. You can easily sort the column by its values by clicking the header.</p><p><br>There are two types of indicators to be aware of:</p><ul><li>A red indication signifies that the threshold is below 60%, indicating potential significant CPU waste.</li><li>A yellow indication suggests that the threshold falls between 60% and 80%, pointing to potential moderate CPU waste.</li></ul></td></tr><tr><td>Memory (%)</td><td><p>Displays the trigger for HPA by Memory. For insights on threshold recommendations, simply hover over the warning tooltip. You can easily sort the column by its values by clicking on the header.</p><p><br>There are two types of indicators to be aware of:</p><ul><li>A red indication signifies that the threshold is below 60%, indicating potential significant Memory waste.</li><li>A yellow indication suggests that the threshold falls between 60% and 80%, pointing to potential moderate Memory waste.</li></ul></td></tr><tr><td>Custom metric</td><td>Indicates whether a Custom metric has been detected. You can easily sort the column by clicking the header or apply specific filters.</td></tr></tbody></table>

## Workloads Chart view

The workloads trend chart helps you identify waste and cost trends within the Node Group, directing your focus to the most critical and valuable aspects.

<figure><img src="/files/PqJco573zcoNj0ItkVMU" alt=""><figcaption><p>Workloads chart</p></figcaption></figure>

#### 1. Scope

Select whether you want to display the workload data by waste or cost using this selector.

#### 2. Workload Type

Filter the data by the workload type.

#### 3. Interval

Select the interval for data display based on your desired data granularity.

#### 4. Legend

Use the workloads legend to include or exclude the particular workloads from the chart.

{% hint style="info" %}
Maximize your productivity by utilizing **Shortcuts**.

* **`Ctrl`**/**`Command`**+ **`Click`** legend entity = Select/Deselect the entity. Allows to do a multi-select.
* **`Click`** chart/legend entity = select one or all entities.
  {% endhint %}

#### 5. Limit Selector

Choose a limit from the dropdown (from 1 to 15) to exhibit only the top N entities

{% hint style="info" %}
The entities not falling within the specified limit will be consolidated to **`Other`** on the diagram. To view entities beyond the limit, use the **`Previous`** and **`Next`** buttons.
{% endhint %}

## Unevictable Pods view

Unevictable Pods provides you clear visibility into the workloads preventing nodes from being removed from a cluster. In the Unevictable Pods view, you can explore nodes and their pods, quickly identify pods that cannot be evicted, and access the detailed pod and node data for further investigation. By combining a cluster-wide view with node-level detail, it helps you seamlessly identify and address scale-down blockers, improve bin-packing, maximize the efficiency of your cluster autoscaling solution (like Karpenter, or Cluster Autoscaler), and ultimately optimize your K8s cloud costs.

<figure><img src="/files/xMdeLVPfw3W6CoOGp9wg" alt=""><figcaption><p>Unevictable pods view</p></figcaption></figure>

### Getting started

In Infrafit, select the desired node group and switch to the **Unevictable Pods** view. The chart displays all nodes from the currently selected node group, using the latest available snapshot by default.

#### Snapshot selector

Use the date picker in the top-right corner to select a specific snapshot (up to one month back).

<figure><img src="/files/ffBKioRITZ0ubmzEp4jV" alt=""><figcaption><p>Snapshot</p></figcaption></figure>

#### Top panel summary

The **top panel** shows a summary of the selected node group across node types, including total running pods, as well as the number of unevictable pods. This helps you identify whether unevictable pods are present and could affect scale-down, highlighting savings opportunities.

<figure><img src="/files/gF2vByPyNd0egYYOpaBm" alt=""><figcaption><p>Unevictable Pods - top panel</p></figcaption></figure>

### Instance charts

Use the **Instances charts** for deeper analysis. This view shows which pods are running on each instance, their share of resources, and whether any of them are unevictable, helping you quickly understand if pods may impact scale-down.

<figure><img src="/files/rYU9ol1cw85mPlvFQWzI" alt=""><figcaption><p>Instances charts</p></figcaption></figure>

#### View by resource type

Switch between **CPU**, **Memory**, and **GPU** views using the view selector to display data by a specific resource type.

#### Node cards

<figure><img src="/files/97BW27fhwqWIRll5PB7j" alt="" width="563"><figcaption><p>Node cards</p></figcaption></figure>

Each node is represented as a card displaying the following information:

* **Resource bars:** Horizontal bars showing requested vs. total capacity for CPU, RAM, and GPU.
* **Pod treemap:** Pods inside each node are displayed as a treemap. Unevictable pods are highlighted with a red border for quick identification.
* **Bottom labels:** Each card shows the node's taints and a count of unevictable pods.

By hovering over a pod, you can see its details in the tooltip. However, if you need more extensive view, click on a pod or a specific node, so you can get a full details in the sidebar.

By clicking on any node or pod, you can open the sidebar detail view, which includes:

* **Item info** — name, namespace, resource requests and limits, and other key metadata
* **Resources utilized** — a breakdown of actual resource usage
* **Labels** — all Kubernetes labels applied to the node or pod
* **Annotations** — all Kubernetes annotations associated with the item
* and more

<figure><img src="/files/ArSVc8FrpqWvUIDuDHcv" alt=""><figcaption><p>Pod details</p></figcaption></figure>

#### Filters and sorting

Use the **Filter** sidebar to narrow down the view by node-level or pod-level criteria. Filters allow you to focus on specific subsets of your cluster, such as nodes with taints or pods in a particular namespace, etc.

Use the **Sort** dropdown to reorder nodes based on different criteria, such as idle, resource utilization or unevictable pod count.

#### Summary

<figure><img src="/files/PTIKx2NsIHQusCyoCzSC" alt="" width="563"><figcaption><p>Unevictable pods summary</p></figcaption></figure>

The chart header displays key totals at a glance:

* **Unevictable count** — Total number of unevictable pods across visible nodes.
* **Visible Nodes** — Number of nodes currently displayed (after filters).
* **Visible Pods** — Number of pods currently displayed (after filters).

Unevictable pods report provides a text summary of all unevictable pod issues across the selected node group. The summary consolidates all unevictable pod details into a single document that can be copied out for sharing or further analysis.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.perfectscale.io/visibility-and-optimization/infrafit-or-node-right-sizing/node-group-view.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
