Skip to content

Create a node pool

POST
/api/v1/organizations/{orgID}/clusters/{clusterID}/nodepools
curl --request POST \
--url https://api.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/clusters/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/nodepools \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "vcpus": 1, "memory_gb": 1, "disk_gb": 1, "min_nodes": 1, "max_nodes": 1, "desired_nodes": 1, "min_vcpus": 1, "max_vcpus": 1, "min_memory_gb": 1, "max_memory_gb": 1, "node_labels": { "additionalProperty": "example" }, "node_taints": [ { "key": "example", "value": "example", "effect": "NoSchedule" } ] }'

Creates a node pool. Autoscaling is permitted; when min_nodes, desired_nodes, and max_nodes are equal the pool is fixed-size. Omitted bounds default to desired_nodes (which defaults to 1). Returns 202 while the pool provisions.

orgID
required
string format: uuid

Organization UUID.

clusterID
required
string format: uuid

Cluster UUID.

Media type application/json
object
name
required
string
vcpus
required
integer
>= 1 <= 128
memory_gb
required
integer
>= 1 <= 512
disk_gb
required
integer
>= 1 <= 2048
min_nodes
integer | null
max_nodes
integer | null
desired_nodes
integer | null
min_vcpus

Optional per-pool CPU autoscaling budget (total pool vCPUs); max > min ⇒ autoscaling.

integer | null
>= 1
max_vcpus

Optional per-pool CPU autoscaling budget (total pool vCPUs); max > min ⇒ autoscaling.

integer | null
>= 1
min_memory_gb

Optional per-pool memory autoscaling budget (total pool GB); max > min ⇒ autoscaling.

integer | null
>= 1
max_memory_gb

Optional per-pool memory autoscaling budget (total pool GB); max > min ⇒ autoscaling.

integer | null
>= 1
node_labels

Labels applied to the pool’s nodes at bootstrap. Reserved key prefixes (aether.cloud/, kubernetes.io/, k8s.io/, node-role.kubernetes.io/, node.kubernetes.io/) are rejected.

object
key
additional properties
string
node_taints

Taints applied to the pool’s nodes at bootstrap (create-only; immutable thereafter). Reserved key prefixes (aether.cloud/, kubernetes.io/, k8s.io/, node-role.kubernetes.io/, node.kubernetes.io/) are rejected, and a cluster must retain at least one pool with no NoSchedule/NoExecute taint.

Array<object>
object
key
required
string
value
string
effect
required
string
Allowed values: NoSchedule PreferNoSchedule NoExecute

Node pool accepted for provisioning.

Media type application/json
object
id
required
string format: uuid
cluster_id
required
string format: uuid
name
required
string
vcpus
required
integer
memory_gb
required
integer
disk_gb
required
integer
min_nodes
required
integer
max_nodes
required
integer
desired_nodes
required
integer
min_vcpus

Optional per-pool CPU autoscaling budget (total pool vCPUs); max > min ⇒ autoscaling.

integer
max_vcpus

Optional per-pool CPU autoscaling budget (total pool vCPUs); max > min ⇒ autoscaling.

integer
min_memory_gb

Optional per-pool memory autoscaling budget (total pool GB); max > min ⇒ autoscaling.

integer
max_memory_gb

Optional per-pool memory autoscaling budget (total pool GB); max > min ⇒ autoscaling.

integer
node_labels

Labels applied to the pool’s nodes at bootstrap.

object
key
additional properties
string
node_taints

Taints applied to the pool’s nodes at bootstrap (set at create; immutable).

Array<object>
object
key
required
string
value
string
effect
required
string
Allowed values: NoSchedule PreferNoSchedule NoExecute
current_nodes
required
integer
first_ready_at
string | null format: date-time
status
required
string
Allowed values: provisioning ready scaling deleting failed
status_message
string | null
created_at
required
string format: date-time
updated_at
required
string format: date-time
Example
{
"node_taints": [
{
"effect": "NoSchedule"
}
],
"status": "provisioning"
}

Invalid request. Includes no_schedulable_pool when the new pool’s taints would leave the cluster with no pool that can schedule workloads (a cluster must retain at least one pool with no NoSchedule/NoExecute taint).

Media type application/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Example generated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

Missing or invalid credentials.

Media type application/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Example generated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The requested resource was not found.

Media type application/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Example generated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The resource already exists or conflicts with current state.

Media type application/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Example generated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

Request validation failed.

Media type application/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Example generated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}