K8S的污点,Taint

本文介绍了Kubernetes中Node节点的污点(Taints)和容忍(Tolerations)机制,以及它们在Pod调度中的作用。NoSchedule策略使得新Pod尽量避免调度到有污点的节点,但不影响已存在的Pod;而NoExecute策略则会驱逐未容忍污点的Pod,确保节点仅运行特定的Pod。通过结合使用,可以实现特定Pod的独占节点调度并排除普通Pod的调度。
摘要由CSDN通过智能技术生成

添加污点的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节点上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值