【云原生之kubernetes系列】--污点与容忍

污点与容忍

  • 污点(taints):用于node节点排斥Pod调度,与亲和效果相反,即taint的node排斥Pod的创建
  • 容忍(toleration):用于Pod容忍Node节点的污点信息,即node节点有污点,也将新的pod创建到改node上

1.1污点配置

  • NoSchedule:硬限制,不将新创建的Pod调度到具有该污点的Node上.
  • PreferNoSchedule:软限制.避免k8s将尽量避免将Pod调度到具有该污点的Node上.
  • NoExecute:表示K8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod强制驱逐出去.

1.1.1污点配置方法一:

加污点
bash 复制代码
root@k8s-master1:/app/yaml/qhx# kubectl get nodes
NAME           STATUS                     ROLES    AGE   VERSION
172.17.1.101   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.102   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.103   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.107   Ready                      node     10d   v1.22.3
172.17.1.108   Ready                      node     10d   v1.22.3
172.17.1.109   Ready                      node     10d   v1.22.3
root@k8s-master1:/app/yaml/qhx# kubectl cordon 172.17.1.107
node/172.17.1.107 cordoned
root@k8s-master1:/app/yaml/qhx# kubectl get nodes
NAME           STATUS                     ROLES    AGE   VERSION
172.17.1.101   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.102   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.103   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.107   Ready,SchedulingDisabled   node     10d   v1.22.3
172.17.1.108   Ready                      node     10d   v1.22.3
172.17.1.109   Ready                      node     10d   v1.22.3
去污点
bash 复制代码
root@k8s-master1:/app/yaml/qhx# kubectl get nodes
NAME           STATUS                     ROLES    AGE   VERSION
172.17.1.101   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.102   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.103   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.107   Ready,SchedulingDisabled   node     10d   v1.22.3
172.17.1.108   Ready                      node     10d   v1.22.3
172.17.1.109   Ready                      node     10d   v1.22.3
root@k8s-master1:/app/yaml/qhx# kubectl uncordon 172.17.1.107
node/172.17.1.107 uncordoned
root@k8s-master1:/app/yaml/qhx# kubectl get nodes
NAME           STATUS                     ROLES    AGE   VERSION
172.17.1.101   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.102   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.103   Ready,SchedulingDisabled   master   10d   v1.22.3
172.17.1.107   Ready                      node     10d   v1.22.3
172.17.1.108   Ready                      node     10d   v1.22.3
172.17.1.109   Ready                      node     10d   v1.22.3

1.1.2污点配置方法二:

加污点:
bash 复制代码
root@k8s-master1:/app/yaml/qhx# kubectl taint node 172.17.1.107 key1=value:NoSchedule
node/172.17.1.107 tainted
Events:
  Type    Reason              Age    From     Message
  ----    ------              ----   ----     -------
  Normal  NodeNotSchedulable  5m44s  kubelet  Node 172.17.1.107 status is now: NodeNotSchedulable
去污点:
复制代码
root@k8s-master1:/app/yaml/qhx# kubectl taint node 172.17.1.107 key1:NoSchedule-
node/172.17.1.107 untainted

1.2容忍

  • 定义pod的容忍度,可以调度至含有污点的node节点

  • 容忍基于operator的匹配污点

  • 如果operator是Exists,则容忍度不需要value而是直接匹配污点类型

  • 如果operator是Equal,则需要指定value并且value的值需要等于tolerations的key

    root@k8s-master1:/app/yaml/qhx# kubectl cordon 172.17.1.107
    node/172.17.1.107 cordoned
    root@k8s-master1:/app/yaml/qhx# kubectl taint nodes 172.17.1.108 key1=value1:NoSchedule
    node/172.17.1.108 tainted
    root@k8s-master1:/app/yaml/qhx# kubectl describe nodes 172.17.1.108|grep Tain
    Taints: key1=value1:NoSchedule

此时部署pod,就会避开172.17.1.107和172.17.1.108

打开pod的容忍

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-2
  namespace: webwork
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: "key1"
        operator: "Equal"
        value: "value1"
        effect: "NoSchedule"
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

此时172.17.1.107和172.17.1.108就可以被调度了

相关推荐
Sagittarius_A*5 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
成为你的宁宁5 小时前
【Kubernetes集群证书续签】
kubernetes·证书过期
名字还没想好☜8 小时前
Docker 多阶段构建:把镜像从 1.2GB 砍到 15MB
运维·docker·容器·多阶段构建·镜像优化
her_heart8 小时前
ChatGPT 5.6 实战:用 AI 做云成本治理,从账单复盘到 K8s 优化
人工智能·云原生·chatgpt·kubernetes·测试用例
花和满楼8 小时前
K8s 1.36 ImageVolume GA:OCI 镜像不再只能跑容器
java·容器·kubernetes
生活爱好者!9 小时前
NAS还能玩游戏?部署一款 WebGL 3D 赛车小游戏
游戏·docker·容器·玩游戏
DolphinScheduler社区9 小时前
Apache DolphinScheduler 6 月治理优化,补齐调度运维全链路细节
大数据·运维·云原生·apache·海豚调度
hj28625110 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
梦想的颜色18 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
万里侯21 小时前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s