Scheduling methods in ACK Serverless clusters

更新时间:
复制 MD 格式

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.

Note

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: