Choose Node Class

Some zones of APPUiO Cloud provide two or more node classes you can choose from to schedule your workload. For an explanation of what node classes are and which ones are available, please have a look at Node Classes.

This page will explain how to have workloads scheduled on a specific node class. This works for all workloads within a given namespace, but it can also be done for a single Pod. It’s also possible to set a node class as default for a namespace, while selected Pods run on another node class.

Your workload might get stuck with Pods in the Pending status with the following error message:

0/X nodes are available: […] X node(s) didn't match Pod's node affinity/selector.

This happens, when you set a node class that doesn’t exist on the system.

Setting Namespace Defaults

You can set the node class on a namespace level by setting the appuio.io/default-node-selector annotation on the namespace. The value of the annotation is a comma-separated list of key-value pairs that are expanded to a node selector.

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    appuio.io/default-node-selector: "appuio.io/node-class=plus" (1)
  name: my-namespace
1 The node class to use for workloads in this namespace.

Setting Workload Node Selector

Single Pods and their controllers can override the node class by setting the .spec.nodeSelector field.

Setting a node selector here overrides the namespace default and the cluster default.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-deployment
  template:
    metadata:
      labels:
        app: my-deployment
    spec:
      nodeSelector:
        appuio.io/node-class: plus (1)
      containers:
      - name: my-deployment
        image: my-image
1 The node class to use for this workload.