BookmarkSubscribeRSS Feed
StefanGiuros
Calcite | Level 5

I want to deploy SAS Viya LTS 2025.09 on a RedHat OCP cluster. I have the following infrastructure constrains: (1) five identical nodes; (2) first three are master nodes, but i need to also place Viya workload on them (they are quite big).
I cannot apply additional taints.

The plan is to run on the three master nodes three CAS workers AND stateful services, compute on first worker and CAS controller on the second worker node.
My idea is to label the three master nodes as workload.sas.com=casworker, the first worker node as workload.sas.com=compute and the last worker node as workload.sas.com=cascontroller. Then to add tolerations on master nodes for casworker and stateful workload.
The problem is that documentation simply says: "To obtain further granularity for scheduling your CAS controllers and CAS workers, divide your CAS workloads between cascontroller and casworker workload groups.". There is no indication how to achieve that, as, in tests, CAS pods are still labelled as "cas".
Any ideas?

1 REPLY 1
gwootton
SAS Super FREQ
The cas controller template include a toleration for workload.sas.com/class=cascontroller, and the worker template one for workload.sas.com/class=casworker, so you could use node taints to control the placement of one versus the other.

Outside of the taints and tolerations, workload placement is done using affinity. The CAS controller for example has a node affinity for the workload.sas.com/class=cas label and against nodes with the compute/stateful/stateless class labels. There is also an anti-affinity for other CAS pods, to prevent multiple CAS pods from running on the same node.

In your case you've stated:
- You have 5 nodes, 3 of which are master nodes.
- You would like to run CAS workers and stateful services on the three master nodes.
- You would like to run compute on one of the worker nodes and the controller on the other worker node.

Because the label workload.sas.com/class can only have one value, you would only be able to use that for the compute worker node.

The label workload.sas.com/class=cas would apply to both the workers and the controller, so either a worker or the controller would end up on the other worker node.

You could modify the nodeAffinity of the controllerTemplate and workerTemplate in the CASDeployment object using a transformer to have these target casworker and cascontroller labels, then use those to label the master nodes and worker node.

You could then similarly patch the statefulsets to have an affinity for the casworker label.

These are affinities without taints on the node and accompanying tolerations on the pods, so these workloads could still end up on other nodes.
--
Greg Wootton | Principal Systems Technical Support Engineer