1

[SOLVED] Node had taints, that the pod didn’t tolerate

 1 year ago
source link: https://www.shellhacks.com/solved-node-had-taints-that-the-pod-didnt-tolerate/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

[SOLVED] Node had taints, that the pod didn’t tolerate

Kubernetes (K8s) has a feature, that allows to mark (taint) a Node, so that no Pods can be scheduled on it, unless a Pod explicitly tolerates the taint.

If you try to deploy the Pod that doesn’t tolerate any of the K8s Nodes’ taints, you will get an error as follows:

0/5 nodes are available: 1 node(s) had taint {node-role.node-role.kubernetes.io/master: }, that the pod didn’t tolerate, 2 node(s) had taint {dedicated: agents}, that the pod didn’t tolerate, 2 node(s) had taint {dedicated: controllers}, that the pod didn’t tolerate.

To tolerate the K8s Nodes’ taints, it is required to specify a toleration for the Pod in the PodSpec, and below I will show the examples of how to do this.

Cool Tip: Get Pod’s logs using the kubectl command! Read more →

Tolerate K8s Nodes’ Taints

To list taints on the Nodes, execute:

$ kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints --no-headers
- sample output -
node-0   [map[effect:NoSchedule key:node-role.kubernetes.io/master]]
node-1   [map[effect:NoSchedule key:dedicated value:agents]]
node-2   [map[effect:NoSchedule key:dedicated value:controllers]]

The toleration is a key-value pair that matches the taint on the Node.

For example, if you have a Node with the taint as highlighted above, you can create a Pod that can be scheduled on that Node by adding the toleration as follows:

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
    tolerations:
      operator: "Exists"
      key: "dedicated"
      value: "agents"
      effect: "NoSchedule"

You can use the operator “Exists” to match any value or effect for a given key:

tolerations:
  operator: "Exists"
  key: "<taintKey>"

For example, to allow the Pod to be scheduled on the K8s master Nodes, add:

tolerations:
  operator: "Exists"
  key: "node-role.kubernetes.io/master"

You can also match any taint by simply defining the “Exists” operator, as follows:

tolerations:
  operator: "Exists"

To ensure that the taint toleration has been applied to the Pod, execute:

$ kubectl get pod <podName> -o jsopath='{.spec.tolerations}'
Was it useful? Share this post with the world!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK