> ## Documentation Index
> Fetch the complete documentation index at: https://www.latitude.sh/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Node Pools

> Create, scale, label, taint, upgrade, and delete LKS Node Pools

A Node Pool is a group of identical bare metal Nodes. Every Node in a Node Pool shares the same plan. A Cluster can have several Node Pools, letting you run different plans side by side (for example CPU and GPU Nodes) and target Workloads at specific Node Pools with Labels and Taints.

## Add a Node Pool

<Steps>
  <Step title="Open the Node Pools tab">
    Open your Cluster and go to the **Node Pools** tab. Click **Add Node Pool**.
  </Step>

  <Step title="Configure the Node Pool">
    Set:

    * **Plan**: the bare metal server plan for every Node in the Node Pool.
    * **Nodes**: how many Nodes to provision (at least 1).
    * **Description** (optional): a short description of the Node Pool, up to 200 characters.
    * **Max Pods per Node** (optional): the maximum number of Pods that can run on each Node. See [Max Pods per Node](#max-pods-per-node).
    * **Labels** (optional): key-value pairs applied to every Node in the Node Pool.
    * **Taints** (optional): rules that repel Pods from the Node Pool's Nodes unless the Pods tolerate them.
  </Step>

  <Step title="Add the Node Pool">
    Click **Add Node Pool**. The Node Pool provisions its Nodes and joins them to the Cluster.
  </Step>
</Steps>

You can also add multiple Node Pools when you first [create a Cluster](/docs/lks/clusters#create-a-cluster).

## Max Pods per Node

Max Pods per Node sets the maximum number of Pods that can run on each Node in a Node Pool. You set it with the **Max Pods per Node** field when you create the Node Pool. It's optional and can't be changed after the Node Pool is created.

* Enter a whole number between **16 and 500**.
* Leave it blank to use the default of **110**.

The value is shown on the Node Pool's detail view; a Node Pool left at the default shows `110 (default)`.

## Node Pool status

The Node Pools table shows each pool's current state. These are separate from the [Cluster status](/docs/lks/clusters#cluster-status).

| Status       | Meaning                                                              |
| ------------ | -------------------------------------------------------------------- |
| Provisioning | The pool is being created and its Nodes are joining.                 |
| Active       | The pool is ready.                                                   |
| Scaling      | The pool's Node count is changing.                                   |
| Updating     | A change to the pool's Labels or Taints is being applied.            |
| Upgrading    | The pool's Kubernetes version is being upgraded.                     |
| Degraded     | The pool is running with reduced health.                             |
| Paused       | Paused by Latitude support; changes are blocked until it's unpaused. |
| Deleting     | The pool is being removed.                                           |
| Error        | The last operation failed.                                           |

## Scale a Node Pool

Open the **Node Pools** tab, open the Node Pool's actions menu, and click **Scale**. Set the new Node count and confirm. Scaling up provisions and joins new Nodes; scaling down drains and removes Nodes.

A Node Pool must always have at least one Node. You can't scale a Node Pool to 0 Nodes. To remove its capacity entirely, delete the Node Pool instead.

<Note>
  When a Node is removed (scaling down, upgrading a Node Pool, or deleting a Node Pool), LKS drains it first and gives its Pods up to 30 minutes to reschedule elsewhere. If a Pod can't be evicted within that window, for example because of a misconfigured PodDisruptionBudget, the Node is removed once the 30 minutes elapse.
</Note>

## Rename a Node Pool

You can rename a Node Pool after it's created. Open the Node Pool's actions menu and update its **Name**. This changes the display name only.

## Labels and Taints

Labels and Taints steer Workloads to the right Nodes.

* **Labels** are key-value pairs applied to every Node in the Node Pool. Use them as `nodeSelector` or affinity targets. See the Kubernetes guide to [Labels and Selectors](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/).
* **Taints** repel Pods from the Node Pool's Nodes unless a Pod tolerates the Taint. Each Taint has a key, an optional value, and an effect: `NoSchedule`, `PreferNoSchedule`, or `NoExecute`. See the Kubernetes guide to [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).

To change them on an existing Node Pool, open the Node Pool's actions menu and click **Edit Labels & Taints**.

### Rules

* A Node Pool can have up to 50 Labels and up to 50 Taints.
* Keys follow Kubernetes key syntax and may include an optional prefix (`prefix/name`).
* A Taint effect must be `NoSchedule`, `PreferNoSchedule`, or `NoExecute`. The same key can appear with different effects, but not twice with the same effect.
* These key prefixes are reserved and are rejected: `kubernetes.io`, `k8s.io`, `cluster.x-k8s.io`, and `lks.latitude.sh`, along with their subdomains. Keys without a prefix, such as `env` or `team`, are always allowed.

<Warning>
  The `NoExecute` effect evicts running Pods that don't tolerate the Taint from the Node Pool's Nodes.
</Warning>

<Warning>
  Keep at least one Node Pool, with at least one Node, free of `NoExecute` Taints. LKS runs critical Pods such as the Cluster's DNS and load balancing on your Nodes. If every Node Pool carries a `NoExecute` Taint, these Pods have nowhere to run and the Cluster can lose DNS and LoadBalancer functionality.
</Warning>

## Upgrade a Node Pool

A Node Pool runs its own Kubernetes version and can trail the Control Plane by at most one minor version. After you upgrade the Control Plane, upgrade each Node Pool to match.

Open the **Node Pools** tab. When a Node Pool is behind the Cluster version, its row shows **Upgrade available**. Open the Node Pool's actions menu and click **Upgrade version**.

<Warning>
  Upgrading a Node Pool recreates its Nodes and can't be reversed. Run your Workloads with enough replicas to tolerate Nodes being replaced.
</Warning>

## Node images and updates

Node operating system images are provided and owned by Latitude.sh. New images reach your Nodes when you upgrade a Node Pool, scale it, or add a new Node Pool. There's no in-place OS patching for you to run.

## Delete a Node Pool

Open the Node Pool's actions menu and click **Delete Node Pool**, then confirm.

<Warning>
  Deleting a Node Pool destroys its Nodes. Workloads running on them are rescheduled to other Node Pools when capacity is available, or stop if it isn't.
</Warning>
