Worker Pools
2 minute read
Worker pools define the node groups of a cluster. Each pool has its own machine configuration, scaling limits, and can be configured with taints or labels. A cluster can run multiple worker pools with different characteristics.
Basic Structure
spec:
provider:
workers:
- name: worker-default
cri:
name: containerd
machine:
type: SCS-2V:4:100
image:
name: ubuntu
version: 22.4.2
architecture: amd64
minimum: 1
maximum: 5
maxSurge: 1
maxUnavailable: 0
volume:
size: 50Gi
systemComponents:
allow: true
Fields
Scaling
| Field | Type | Description |
|---|---|---|
minimum | integer | Minimum number of nodes in the pool (also applies when autoscaler is active) |
maximum | integer | Maximum number of nodes in the pool |
maxSurge | integer | Additional nodes started during a rolling update |
maxUnavailable | integer | Nodes that may be simultaneously unavailable during an update |
Machine
| Field | Type | Description |
|---|---|---|
machine.type | string | Flavor name (e.g. SCS-2V:4:100) |
machine.image.name | string | Operating system image (e.g. ubuntu) |
machine.image.version | string | Image version |
machine.architecture | string | CPU architecture (amd64 or arm64) |
volume.size | string | Root volume size (e.g. 50Gi) |
volume.type | string | Volume type (default: default) |
Kubernetes Version per Pool
kubernetes:
version: "1.33"
Allows incremental upgrades: one pool can be updated to a newer K8s version while others remain on the previous version.
Taints and Labels
labels:
node-role: gpu
taints:
- key: dedicated
value: gpu
effect: NoSchedule
Labels are propagated to all nodes in the pool and can be used for nodeSelector or nodeAffinity. Taints prevent pods without matching tolerations from being scheduled onto the pool.
System Components
systemComponents:
allow: true
Controls whether Gardener system components (e.g. CoreDNS, kube-proxy) are allowed to run on this pool. For dedicated workload pools, this can be set to false.
Multi-Pool Setup
Typical use case: one pool for general workloads, a second for specialized or resource-intensive workloads.
workers:
- name: worker-general
machine:
type: SCS-2V:4:100
minimum: 2
maximum: 10
systemComponents:
allow: true
- name: worker-gpu
machine:
type: SCS-8V:32:100
minimum: 0
maximum: 4
taints:
- key: dedicated
value: gpu
effect: NoSchedule
labels:
node-role: gpu
systemComponents:
allow: false
Notes
minimum: 0is valid and allows a pool to scale down completely — useful for optional workload pools that are only active on demand.- Changes to
machine.typeormachine.imagetrigger a rolling node replacement. - Each pool must have a unique
name.