Kubernetes-Taint (污点)和 Toleration(容忍)

目录

一、Taint(污点)

1.污点的组成

2.污点的设置、查看和去除

3.污点实验:

二、Toleration(容忍)

1.容忍设置的方案

2.容忍实验:


Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有匹配 taint 的节点上。

一、Taint(污点)

使用 `kubectl taint` 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去

1.污点的组成

key=value:effect

每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。当前 taint effect 支持如下三个选项:

复制代码
NoSchedule:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上

PreferNoSchedule:表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上

NoExecute:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去。

2.污点的设置、查看和去除

复制代码
kubectl taint nodes node1 key1=value1:NoSchedule
    # 设置污点

kubectl describe node  node-name
    # 节点说明中,查找 Taints 字段

kubectl taint nodes node1 key1:NoSchedule-
    # 去除污点

3.污点实验:

复制代码
kubectl describe node k8s-master01
    #主节点自带污点,所以master节点不能被调度
复制代码
kubectl taint node k8s-master01 node-role.kubernetes.io/master=:NoSchedule-
	#取消master节点的污点

kubectl describe node k8s-master01
    #查看污点已被删除

kubectl create deployment taint_deploy --image=nginx:latest
    #创建名为taint_deploy的deployment,使用nginx:latest作为pod内容器创建的镜像。

kubectl scale deployment taint_deploy --replicas=20
    #设置刚刚创建的deployment的pod副本数为20

kubectl get pod -o wide
    #观察刚刚创建的pod,因为取消了master节点的污点,所以pod可以被调度到master节点运行了
    #master节点没有污点的情况下,运行daemonset,master节点也会运行一个daemonset。

二、Toleration(容忍)

设置了污点的 Node 将根据 taint 的 effect:NoSchedule、PreferNoSchedule、NoExecute 和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。 但我们可以在 Pod 上设置容忍 ( Toleration ) ,意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。

pod.spec.tolerations

1.容忍设置的方案

复制代码
tolerations:	#容忍

第一种方案:
- key: "key1"	#指定污点的key1
  operator: "Equal"	#运算符等于
  value: "value1"	#value是污点value1
  effect: "NoSchedule"	#策略是NoSchedule
#这种写法的含义是key,value,effect必须全部匹配,有一个不一样都匹配不到。

第二种方案:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600	#容忍3600秒

第三种方案:
- key: "key2"		#只要匹配到key和dffect,value是什么无所谓。
  operator: "Exists"
  effect: "NoSchedule"

例:

复制代码
Ⅰ、当不指定 key 值时,表示容忍所有的污点 key:** 
tolerations:
- operator: "Exists"		#只写一个存在,只要有污点,就能容忍

Ⅱ、当不指定 effect 值时,表示容忍所有的污点作用**
tolerations:
- key: "key"
  operator: "Exists"		#只要key匹配到了,其他的无所谓

Ⅲ、有多个 Master 存在时,防止资源浪费,可以如下设置
kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule

2.容忍实验:

复制代码
kubectl taint node k8s-master01 node-role.kibernetes.io/master=:NoSchedule	
	#将主节点的污点恢复回来

kubectl get daemonset -n kube-system
    #查看有哪些daemonset资源

kubectl get daemonset -n kube-system calico-node -o yaml
    #查看calico的容忍
    #策略NoSchedule,运算符Exists(存在),key和value无所谓
	#value和策略无所谓
	#还能容忍NoExecute策略的,value和key无所谓
复制代码
kubectl describe node k8s-master01
    #查询master节点的key

vim tolerations_daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: tolerations-daemonset
  labels:
    app: daemonset
spec:
  selector:
    matchLabels:
      name: tolerations-daemonset-pod
  template:
    metadata:
      labels:
        name: tolerations-daemonset-pod
    spec:
      tolerations:
      - key: "node-role.kubernetes.io/master"    #master节点的污点的key。
        operator: "Exists"    #匹配规则为exists,存在key就容忍。
      containers:
      - name: tolerations-daemonset-pod
        image: nginx:latest
        imagePullPolicy: IfNotPresent

kubectl apply -f tolerations_daemonset.yaml

kubectl get daemonset
    #查看创建的daemonset

kubectl get pod -o wide
    #查看daemonset的pod是否调度在master上。
相关推荐
ghostwritten3 分钟前
春节前夕,运维的「年关」:用 Kubeowler 给集群做一次「年终体检」
运维·云原生·kubernetes
予枫的编程笔记3 分钟前
【Linux进阶篇】Linux后台运行避坑指南:nohup、& 用法及Systemd守护进程实操
linux·进程管理·linux运维·nohup·systemctl·ps命令·kill命令
code monkey.7 分钟前
【Linux之旅】Linux 进程间通信(IPC)全解析:从管道到共享内存,吃透进程协作核心
linux·c++·ipc
匆匆那年96713 分钟前
llamafactory推理消除模型的随机性
linux·服务器·学习·ubuntu
好好学习天天向上~~17 分钟前
5_Linux学习总结_vim
linux·学习·vim
馨谙20 分钟前
Ansible模块化Playbook管理:静态导入与动态包含详解
运维·ansible
聆风吟º5 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客6 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉9 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力9 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim