我是靠谱客的博主 平常咖啡豆,最近开发中收集的这篇文章主要介绍K8S的污点,Taint,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

添加污点的Node节点默认不会参与日常调度,有两种策略分别为“NoSchedule”和“NoExecute”,加入污点的Node只有在Pod的Yaml文件设置相对应的容忍,Pod才会调度到该节点,

NoSchedule:软策略,表示尽量不调度到污点节点上去,只会影响到新的pod而不会对已经运行在该Node节点其他pod造成影响;;;;;Node节点上的旧Pod不会被驱逐
NoExecute:该选项意味着一旦 Taint 生效,如该节点内正在运行的 pod 没有对应 Tolerate 设置,会直接被逐出

NoSchedule

#添加污点到Node节点上
kubectl taint node k8s-03 test=k8s-03:NoSchedule
#查看Node节点污点
kubectl describe node k8s-03

 

#创建测试Pod的yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: taint
  labels:
    app: taint
spec:
  replicas: 3
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: taint
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - name: http
          containerPort: 80
      tolerations:                    #添加容忍
      - key: "test"
        operator: "Equal"  #"Equal"表示key与value之间的关系是等于
        value: "k8s-03"
        effect: "NoSchedule"

结果:原来该Node上的Pod并没有被驱逐,创建没有与该Node污点对应容忍的Pod不会调度到该节点

NoExecute

在给Node节点添加污点后,Node节点上的旧Pod会被驱逐

这里配合调度亲和性的硬策略,可以实现deployment/statefulset下面所有的pod只运行在该节点上,且该节点不参与普通调度旧Pod被驱逐

#Node添加污点
kubectl taint node k8s-04 ceshi=ceshi:NoExecute
#查看Node节点污点
kubectl describe node k8s-04



#创建测试Pod的yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: taint
  labels:
    app: taint
spec:
  replicas: 3
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: taint
    spec:
      affinity:    #指定调度亲和性
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:  #调度硬策略
            nodeSelectorTerms:
              - matchExpressions:      #指定标签,可以写其他该Node的唯一标签
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - k8s-04
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - name: http
          containerPort: 80
      tolerations:                    #指定容忍策略
      - key: "ceshi"
        operator: "Equal"
        value: "ceshi"
        effect: "NoExecute"
结果:

所有的Pod都被调度到了有污点的Node(k8s-04)上,且创建普通pod不会考虑调度到该Node节点上

最后

以上就是平常咖啡豆为你收集整理的K8S的污点,Taint的全部内容,希望文章能够帮你解决K8S的污点,Taint所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部