Skip to Content

NodePool Field Reference

A NodePool defines which capacity CloudPilot can create and which Pods can use it. A NodeClass defines the provider-specific machine configuration. Pool constraints, Pod scheduling requirements, available cloud capacity, and the referenced NodeClass must all be compatible.

This reference covers the Console’s visual field groups and their read representation. Raw YAML is validated by the installed provider CRD; the existence of a field in another provider or newer release does not make it available on your cluster. Add-ons require compatible server, Agent, provider, and node images.

Read the effective configuration

Use list_node_pools for discovery and get_node_pool with organization_id, cluster_id, and name for details. Set default: true instead of name to inspect the provider default. Defaults returned for this cluster are more authoritative than examples or a blank form.

The MCP result’s data.configuration contains the CloudPilot pool object. All field paths below are relative to that object. For example, nodePoolSpec.weight means data.configuration.nodePoolSpec.weight; the native Kubernetes equivalent is NodePool.spec.weight. A list with detail: "summary" deliberately omits configuration; use the named get or detail: "full". Continue list cursors until data.complete is true.

Read fieldMeaning
data.name, data.provider, data.enabledNormalized identity, provider, and provisioning switch; not proof that nodes are Ready.
data.lifecycleState, data.nodeCountCloudPilot lifecycle and associated node count.
data.defaultWhether this is the default template rather than a saved named pool.
data.revisionRead-side configuration fingerprint; not the native Kubernetes resource version or a write authorization.
data.configuration.nodeNamesReported associated nodes; use list_cluster_nodes for their health and resources.

The pool read does not currently expose the full native NodePool.status. Use NodeClass readiness, instance candidates, node health, controller events, and NodeClaim events together; an enabled pool can still be unable to provision.

Identity, activation, and scheduling

Console field / pathValue and default sourceEffect and precautions
Name / nameRequired resource name; fixed identity after creation.A rename is a different pool, not an in-place rename.
Enabled / enableBoolean; general-purpose preset true.Controls new provisioning. Turning it off does not itself drain existing nodes. Decommissioning also disables provisioning.
NodeClass / nodePoolSpec.template.spec.nodeClassRef.{group,kind,name}Same-provider class reference; preset name cloudpilot.The class must exist and resolve successfully. Changing it affects replacement/new capacity.
Provisioning weight / nodePoolSpec.weightOptional integer, installed schema range 1–100; general preset 2, GPU preset can differ.Higher weight is considered first among compatible pools; it is not a replica count, guaranteed placement, or workload priority.
Labels / nodePoolSpec.template.metadata.labelsString map; preset includes CloudPilot management labels.Labels propagate to nodes and participate in compatibility with Pod selectors. Preserve system-managed entries.
Template annotations / nodePoolSpec.template.metadata.annotationsString map, typically YAML-level advanced configuration.Propagates node-template metadata; do not overwrite CloudPilot-managed add-on annotations.
Taints / nodePoolSpec.template.spec.taints[]key, optional value, and effect: NoSchedule, PreferNoSchedule, or NoExecute.Pods need matching tolerations. A toleration permits placement but does not force it.
Startup taints / nodePoolSpec.template.spec.startupTaints[]Same shape as taints; omitted unless needed.Temporary initialization barriers. Identify the component responsible for removing each taint; otherwise nodes can remain unusable.

AWS reads may also contain the compatibility wrapper nodePoolAnnotation. It is not the same path as template annotations; preserve existing compatibility metadata rather than moving it between these fields.

ProviderNodeClass kindReference group
AWS EKSEC2NodeClasskarpenter.k8s.aws
AlibabaCloud ACKECSNodeClasskarpenter.k8s.alibabacloud
GKEGCENodeClasskarpenter.k8s.gcp
AKSAKSNodeClasskarpenter.azure.com

Capacity and placement requirements

The array nodePoolSpec.template.spec.requirements[] contains key, operator, and, where required, values. Requirements are combined, not independent preferences. The common operators are In, NotIn, Exists, DoesNotExist, Gt, and Lt; numeric comparisons use one integer string and are exclusive. Provider-specific minValues is an advanced, version-dependent diversity constraint, not a minimum node count.

Console fieldRequirement keyUnit / interpretation
Architecturekubernetes.io/archamd64 or arm64, subject to image and instance support. General preset uses detected cluster architectures, fallback amd64.
Capacity typekarpenter.sh/capacity-typeon-demand, spot, or both. General preset is on-demand. Allowing both is not a fixed percentage split.
Zonestopology.kubernetes.io/zoneCloud zone names. Omission does not override subnet, disk, or Pod topology constraints. Older GCP configurations may use topology.k8s.gcp/zone-id; the Console normalizes this to the common key on save.
Instance typesnode.kubernetes.io/instance-typeExact cloud instance/SKU names, when configured in requirements/YAML.
OSkubernetes.io/osGeneral preset linux. Must match image and workload support.
AKS pool modekubernetes.azure.com/modeCloudPilot optimized AKS capacity uses user, not system pools.
ProviderFamily keyCPU key, in coresMemory key, in MiB
AWSkarpenter.k8s.aws/instance-familykarpenter.k8s.aws/instance-cpukarpenter.k8s.aws/instance-memory
AlibabaCloudkarpenter.k8s.alibabacloud/instance-familykarpenter.k8s.alibabacloud/instance-cpukarpenter.k8s.alibabacloud/instance-memory
GCPkarpenter.k8s.gcp/instance-familykarpenter.k8s.gcp/instance-cpukarpenter.k8s.gcp/instance-memory
Azurekarpenter.azure.com/sku-familykarpenter.azure.com/sku-cpukarpenter.azure.com/sku-memory

Azure also exposes SKU series through karpenter.azure.com/sku-series. GPU category, model, count, accelerator memory, hypervisor, and local-storage constraints are provider-specific native requirements; preserve existing requirements when editing a visual field. The general preset excludes GPU instances and can exclude other incompatible families, so an empty family selector does not mean every cloud instance is eligible.

The general-purpose preset’s upper bounds are CPU Lt: ["17"] and memory Lt: ["32769"]: at most 16 cores and 32768 MiB. The current editor labels these inputs Minimum (exclusive) and Maximum (exclusive). Entering 16 as the maximum excludes 16-core instances. A cleared range input removes that bound; it is not a zero-resource machine.

Use list_node_pool_candidates with node_pool_name to inspect compatible instance types. Check data.status, reason, and computedAt before treating an empty candidate list as proof that nothing matches. Candidates are not a reservation or a guarantee of real-time cloud capacity.

Pool-wide limits

Console field / pathUnit / defaultMeaning
CPU / nodePoolSpec.limits.cpuKubernetes quantity, e.g. "100" cores; unset means no explicit pool cap.Aggregate provisioned CPU for this pool, not per-node size.
Memory / nodePoolSpec.limits.memoryQuantity, e.g. "256Gi"; unset means no explicit pool cap.Aggregate capacity, not workload memory usage or a container limit.
Nodes / nodePoolSpec.limits.nodesWhole-node quantity, where supported by installed schema.Aggregate node cap, not a minimum warm-node count.

Limits do not proactively shrink a pool already above a reduced cap. Provisioning is eventually consistent, so do not use a pool limit as an exact spending or instantaneous safety boundary.

Lifecycle and disruption

Console field / pathValue / presetEffect
Expire after / nodePoolSpec.template.spec.expireAfterDuration such as 720h, or Never; CloudPilot general preset Never. Native CRD omission may default to 720h.Maximum node lifetime, not a maintenance window. A change can mark existing claims as drifted.
Termination grace period / nodePoolSpec.template.spec.terminationGracePeriodOptional duration, advanced/YAML-level field.Upper bound on draining before forced termination; leave enough time for application shutdown. It is distinct from Pod terminationGracePeriodSeconds.
Consolidation policy / nodePoolSpec.disruption.consolidationPolicyWhenEmpty or WhenEmptyOrUnderutilized; general preset latter.Which nodes native consolidation can consider.
Consolidate after / nodePoolSpec.disruption.consolidateAfterDuration or Never; general preset 60m.Eligibility delay for consolidation, not a fixed rebalance schedule.
Disruption cooldown / nodePoolSpec.disruption.disruptionCooldownNon-negative duration when supported; omission inherits a configured cluster default, otherwise no added delay.Minimum interval after a voluntary disruption batch completes. Budgets still determine batch size.
Budgets / nodePoolSpec.disruption.budgets[]Up to 50 entries. General preset has nodes: "2"; Alibaba also limits Drifted to "1".Native voluntary disruption limits. These presets differ from the native CRD’s usual omitted-budget 10% default.

Each budget has nodes (count string or percentage), optional reasons (Empty, Underutilized, Drifted), and optional paired schedule and duration. Budget cron windows use UTC, not a configurable timezone. Omit reasons for all reasons; do not use an empty list. Multiple active matching budgets use the most restrictive allowance. See the budget guide for arithmetic and examples.

Budgets do not govern every deletion path: scheduled rebalance, expiration, repair, cloud interruption, and manual deletion have separate controls. A zero native drift budget is not a global disruption freeze.

lifecycleState (active or decommissioning) and decommissionRequestedAt are observed CloudPilot lifecycle fields, not knobs to edit directly. With supported Phase 2 NodePool decommission enabled in cluster settings, deletion disables provisioning and waits for backing capacity to drain. Verify replacement pools can accept pinned workloads before deletion; see safe pool deletion.

CloudPilot add-ons

These are wrapper fields alongside nodePoolSpec, not native NodePool.spec properties. A newer Console may expose them before an older cluster has the required runtime. Verify installed components before recommending activation.

FieldSupported scope / valueMeaning and dependencies
enableImageAcceleratorAWS, GCP, Azure; boolean, opt-in.Enables pool scheduling markers for P2P image acceleration. AWS and GCP also have NodeClass/runtime configuration; Azure does not require a NodeClass switch. See Image Accelerator.
jobNodePoolOptimization.minActiveNodesAWS, GCP, Azure; positive integer.Minimum preferred active nodes for new run-to-completion Pods; not a general always-running replica guarantee.
jobNodePoolOptimization.provisioningDelaySame providers; positive Go duration such as 30s.Per-Pod wait before extra capacity is considered while existing resources may free up. Omission keeps ordinary provisioning behavior.
nriSwapPolicy.enabledVersion-dependent AWS-only integration.Automatic finite container swap allowance on a Memory Extension pool. Requires compatible runtime, EKS 1.34, Linux amd64-only requirements, and Memory Extension on the referenced NodeClass. Not equivalent to generic Memory Extension.
nriSwapPolicy.memoryLimitMultiplierGreater than 1 and at most 10, at most three decimal places; current form initial value 1.5.Runtime policy input, not a Kubernetes request/limit change. Inspect compatibility and runtime readiness before use. This form initial value is not an automatic enabled policy.

For batch configuration, omitting jobNodePoolOptimization on update preserves the current configuration; an empty object clears it. This read reference does not add MCP writes. Follow Batch workload optimization for supported versions, pool isolation, soft-drain behavior, and hard-drain differences.

Safe starting scenarios

Introduce Spot without moving every workload

  1. Keep a compatible On-Demand pool enabled. Start with interruptible, replicated workloads and allow suitable Spot families and zones in a separate pool.
  2. Check workload spotFriendly and minNonSpotReplicas in NA configuration; a Spot-capable NodePool alone does not override workload opt-outs or affinity.
  3. Read candidates, class readiness, the optimization plan, then node/controller events after a limited rollout. Watch pending Pods and application availability; revert placement requirements or disable new provisioning if capacity is unsuitable.

Isolate a dedicated workload or batch pool

Use a dedicated node label plus a NoSchedule taint, and give only the target Pods a matching selector/affinity and toleration. A taint alone does not keep target Pods off other pools. For batch, begin with a small active-node target and short delay; test burst completion latency before expanding. Do not mix ordinary services into a pool whose packing and soft-drain behavior assumes run-to-completion work.

Slow native replacements

Preserve an always-active budget and add a stricter Drifted allowance, then tune cooldown separately. Confirm replicas, PodDisruptionBudgets, replacement candidates, and class readiness first. Validate actual controller events rather than assuming a saved configuration already replaced existing machines.

Last updated on