<p>With the support of Windows server 2019 in Kubernetes 1.14 it seems possible to have nodes of different OS. For example a Ubuntu 18.04 Node, RHEL 7 Node, Windows Server Node within one cluster.</p>

<p>In my use case I would like to have pre-configured queue system with a queue per OS type. The nodes would feed off their specific queues processing the job.</p>

<p>With the above in my mind is it possible to configure a Job to go to a specific queue and in turn a specific OS node?</p>

<p>Kubernetes nodes come populated with a standard set of labels, this includes <code>kubernetes.io/os</code></p>

<p><a href="https://kubernetes.io/docs/concepts/configuration/assign-pod-node/" rel="nofollow noreferrer">Pods can then be assigned</a> to certain places via a <code>nodeSelector</code>, <code>podAffinity</code> and <code>podAntiAffinity</code>.</p>

<pre><code>apiVersion: extensions/v1beta1
kind: Pod
metadata:
  name: anapp
spec:
  containers:
  - image: docker.io/me/anapp
    name: anapp
    ports:
     - containerPort: 8080
  nodeSelector:
    kubernetes.io/os: linux
</code></pre>

<p>If you need finer grained control (for example choosing between Ubuntu/RHEL) you will need to add custom labels in your kubernetes node deployment to select from. This level of selection is rare as container runtimes try and hide most of the differences from you, but if you have a particular case then add extra label metadata to the nodes.</p>

<p>I would recommend using the <code>ID</code> and <code>VERSION_ID</code> fields from <code>cat /etc/*release*</code> as most Linux distros populate this information in some form. </p>

<pre><code>kubectl label node thenode softey.com/release-id=debian
kubectl label node thenode softey.com/release-version-id=9
</code></pre>
