Taints and Toleration

11/4/2020

im practicing with kubernetes taints , i have tainted my node and than make a deploy like this:

apiVersion: apps/v1
kind: Deployment
metadata:
        name: nginx
        labels:
         app: nginx
spec:
        replicas: 3
        selector:
          matchLabels:
               app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx:1.15.4
              ports:
              - containerPort: 80
            tolerations:
            - key: "test"
              operator: "Equal"
              value: "blue"
              effect: "NoSchedule"

kubectl describe nodes knode2 :

Name:               knode2
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=knode2
                    kubernetes.io/os=linux
                    testing=test
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: **********
                    projectcalico.org/IPv4IPIPTunnelAddr: ********
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Tue, 27 Oct 2020 17:23:47 +0200
Taints:             test=blue:NoSchedule

but when i deploy this yaml file the pods are not going only to that tainted node. Why is that?

-- Yahav
devops
kubernetes

1 Answer

11/4/2020

Taints and tolerations work together to ensure that pods are not scheduled onto inappropriate nodes. That's exactly opposite of what you intend to do.

You can constrain a Pod to only be able to run on particular Node(s), or to prefer to run on particular nodes using NodeSelector or NodeAffinity.

NodeSelector example

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

Node affinity is conceptually similar to nodeSelector -- it allows you to constrain which nodes your pod is eligible to be scheduled on, based on labels on the node.

-- Arghya Sadhu
Source: StackOverflow