---
title: "Creates a Kubernetes node pool in the project and returns the async operation."
method: POST
path: "/projects/{project_id}/kubernetes/nodepools"
tags: ["Kubernetes Node Pools"]
---

# Creates a Kubernetes node pool in the project and returns the async operation.

`POST /projects/{project_id}/kubernetes/nodepools`

## Path parameters

- `project_id` string, required

## Request body

- KubernetesNodePoolPostRequest
  - `cluster_id` string, required — ID of the cluster the new node pool belongs to.
  - `count` integer, required — Number of nodes to create.
  - `ephemeral_storage_for_containerd` boolean — Whether the first local ephemeral NVMe disk is used for containerd storage.
  - `ib_partition_id` string — Deprecated: Use transport_partition_id instead.
  - `name` string, required — Name of the Kubernetes node pool.
  - `node_labels` object — Labels to assign to nodes in the new node pool.
  - `node_pool_version` string — Version of the Kubernetes node pool.
  - `node_taints` KubernetesNodeTaint[] — Taints applied to nodes in the node pool. Each (key, effect) pair must be unique within the list. The list may contain at most 50 taints.
    - `effect` 'NoSchedule' | 'PreferNoSchedule' | 'NoExecute', required — Taint effect, controlling how pods are treated on matching nodes: NoSchedule: new pods are not scheduled unless they tolerate. PreferNoSchedule: new pods avoid the node if possible. NoExecute: new pods are not scheduled AND existing non-tolerating pods are evicted.
    - `key` string, required — Taint key. Follows the Kubernetes qualified-name format: an optional DNS subdomain prefix (up to 253 characters) followed by a '/', then a name segment (up to 63 characters). Allowed characters: alphanumerics, '-', '_', and '.'. Must start and end with an alphanumeric character. Keys beginning with "crusoe.ai/" are reserved for internal use.
    - `value` string — Taint value. May be empty. Follows the same format rules as a Kubernetes label value: up to 63 characters, alphanumerics and '-', '_', '.'.
  - `nvlink_domain_id` string — NVLink domain ID to assign to nodes in the new node pool.
  - `placement_policy` 'spread' | 'unspecified' — Placement policy for VMs in the node pool: spread or unspecified. Ignored for GPU node types (one VM per host is already enforced for GPUs).
  - `product_name` string, required — Product name of the VM type to create within the new node pool.
  - `public_ip_type` string — Public IP type for the node pool's nodes: dynamic, static, or none.
  - `reservation_specification` ReservationSpecification
    - `id` string — ID of the reservation to use for the VM. Incompatible with selection_strategy.
    - `selection_strategy` 'lowest_cost' | 'on_demand' — Strategy for automatically selecting a reservation: lowest_cost or on_demand. Use on_demand to opt out of reservation usage. Incompatible with id.
  - `ssh_public_key` string — SSH public key to use for all VMs created from the new node pool.
  - `subnet_id` string — ID of the subnet to create the node pool in. Must be in the location of the cluster if specified. If not provided, the default subnet for the location is used, if there is one.
  - `transport_partition_id` string — ID of the InfiniBand or RoCE partition to create the node pool in. Must be in the location of the cluster if specified.

## Response `200`

- AsyncOperationResponse
  - `operation` Operation, required — Individual resources that use Operations should populate the `metadata` field with resource-specific information.
    - `completed_at` string, required
    - `metadata` string, required
    - `operation_id` string, required
    - `result` string
    - `started_at` string, required
    - `state` 'IN_PROGRESS' | 'SUCCEEDED' | 'FAILED', required

## Other responses

- `400` — Error Bad Request
- `401` — Error Authentication Failed
- `403` — Error Permissions
- `500` — Error Internal Server

---

[API](https://skmtc.net/crusoecloud/apis/crusoe-cloud-api-gateway.md) · [All operations](https://skmtc.net/crusoecloud/apis/crusoe-cloud-api-gateway/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/crusoecloud/crusoe-cloud-api-gateway/revisions/a3fd2dedc72b/schema)
