Scheduling Pods with Taints and Tolerations in Kubernetes

Taint one of the worker nodes to repel work

Use the following command to taint the node:

kubectl get nodes
kubectl taint node $nodeName node-type=prod:NoSchedule

Schedule a pod to the dev environment

Use the following YAML to specify a pod that will be scheduled to the dev environment:

dev-pod.yaml

Use the following command to create the pod:

Allow a pod to be scheduled to the prod environment

Use the following YAML to create a deployment and a pod that will tolerate the prod environment:

prod-deployment.yaml

Use the following command to create the pod:

Verify each pod has been scheduled and verify the toleration.

Use the following command to verify the pods have been scheduled:

Scale up the deployment:

We can see the prod pods will be deployed on node .102 or .103 where as the dev-pod would only ever be deployed on .103 because of the taint on node .102

Verify the toleration of the production pod:

I found the video didn't do a great job explaining what was happening but to show it's working, I made a new deployment and tried making pods until it crashed because the tainted node wouldn't accept them,

test.yaml

Use the following command to create the pod:

We can see the test pods won't get deployed on node .102 because unlike the prod code it doesn't have the toleration set to bypass the taint on the node.

Last updated