Pods default to Linux/x86 nodes; configure scheduling to target other architectures or zones.
In ACK Serverless clusters, all pods are Elastic Container Instance (ECI)-based pods that run on virtual nodes. ACK Serverless supports three Kubernetes scheduling primitives: nodeSelector, nodeAffinity/podAffinity, and topologySpreadConstraints.
Virtual node types
ACK Serverless clusters provide three virtual node types:
| Node type | CPU architecture | Operating system |
|---|---|---|
| Default virtual nodes | x86 | Linux |
| ARM-based virtual nodes | ARM | Linux |
| Windows virtual nodes | — | Windows |
Choose a scheduling method
Each primitive offers a different constraint level and fallback behavior.
| Method | Use when | Constraint type |
|---|---|---|
nodeSelector |
Target a specific CPU architecture or OS | Hard (required) |
nodeAffinity and podAffinity |
Prefer a zone or architecture, or co-locate pods — with fallback options | Hard or soft (preferred) |
topologySpreadConstraints |
Spread pods evenly across zones for high availability | Distribution control |
Key distinction: nodeSelector is a hard requirement — pods fail to schedule without a match. nodeAffinity with preferredDuringSchedulingIgnoredDuringExecution is a soft preference — pods still schedule without a preferred match. Use soft affinity for multi-architecture images that prefer ARM.
ACK Serverless Basic clusters support only nodeSelector, and only for the kubernetes.io/arch and kubernetes.io/os labels. Zone affinity, pod affinity, and topology spreading require an ACK Serverless Pro cluster, which provides enhanced reliability, higher SLA guarantees, and larger cluster capacity. See Hot migration from ACK Serverless Basic to Pro.
Cluster scheduling capabilities
| Scheduling method | ACK Serverless Basic | ACK Serverless Pro |
|---|---|---|
nodeSelector (kubernetes.io/arch, kubernetes.io/os) |
Supported | Supported |
nodeAffinity |
Not supported | Supported |
podAffinity |
Not supported | Supported |
topologySpreadConstraints |
Not supported | Supported |
Scheduling methods
nodeSelector
Add a nodeSelector field to target virtual nodes with a specific CPU architecture or OS.
spec:
nodeSelector:
kubernetes.io/arch: arm64 # Target ARM-based virtual nodes
# kubernetes.io/os: windows # Uncomment to target Windows virtual nodes
References:
nodeAffinity and podAffinity
Use nodeAffinity to constrain pods to specific zones or preferred architectures. Use podAffinity to co-locate related pods.
This example uses soft node affinity to prefer ARM nodes for a multi-architecture workload:
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
References:
topologySpreadConstraints
Spread pods across zones for high availability. maxSkew controls the maximum allowed imbalance between zones.
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: my-app
With maxSkew: 1, no zone has more than one extra pod compared to the least-loaded zone.
References: