agiann
agiann

Reputation: 15

Match Deployment to specific nodepool

I am looking to find out if there is a way I can assign a specific Deployment to a specific node pool.

I am planning to deploy a big-size application using kubernetes. I am wondering if there is a way we can assign deployments to specific node pools. In other words, we have 3 types of services:

So obviously we would like to best allocate nodes to specific deployments so no resources go wasted, for example low tier servers node pool X would be only utilized by General service deployments, high tier servers node pool Y would be only utilized by the monitor services, and the highest tier servers would only be utilized by the Module services.

I understand that there is a huge number of articles that talks about pod affinity and other related things, but what I seem to not be able to find anything that matches the following: How to assign Deployment to specific node pool

Thanks in advance!

Upvotes: 1

Views: 1944

Answers (2)

meaningqo
meaningqo

Reputation: 1918

Another way (in addition to what Yayotrón proposed) would be to work with NodeAffinity and AntiAffinity. For more information check the official documentation here: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

Taints and tolerations very strict and scheduling on other nodes would not be possible at all. With Affinity and Antiaffinity you can specify wheter you want it to be strict (RequiredDuringSchedulingIgnoredDuringExecution) or a soft restriction (PreferredDuring....)

Upvotes: 3

Yayotrón
Yayotrón

Reputation: 1859

This can be achieved using Taints and Tolerations. A quick summary of what they are (from their documentation):

Node affinity, is a property of Pods that attracts them to a set of nodes (either as a preference or a hard requirement). Taints are the opposite -- they allow a node to repel a set of pods.

Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.

Taints and tolerations work together to ensure that pods are not scheduled onto inappropriate nodes. One or more taints are applied to a node; this marks that the node should not accept any pods that do not tolerate the taints.

Or simply by using NodeSelector

When you register a node to join the kubernetes cluster you can specify the taints and labels using kubelet --register-with-taints label=value --node-labels=label2=value2.

Or you can use kubectl taint for already registered nodes.

Then when you're going to deploy a pod/deployment/statefulset you can specify its nodeSelector and Tolerations

spec:
  nodeSelector:
    label2: value2
  tolerations:
    - key: "label"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"

Upvotes: 2

Related Questions