# K8s 容忍和污点

Taint 指定服务器上打上污点,让不能容忍这个污点的 Pod 不能部署在打了污点的服务器上。Toleration 是让 Pod 容忍节点上配置的污点,可以让一些需要特殊配置的 Pod 能够调用到具有污点和特殊配置的节点上。

# 1. Taint 配置解析

#1.Taint语法
# kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT

#2.创建Taint示例
# kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule

#3.查看污点
# kubectl describe node k8s-node01 | grep Taints -A 10

#4.删除污点
# kubectl taint nodes k8s-node01 ssd-                   #基于Key删除
# kubectl taint nodes k8s-node01 ssd:PreferNoSchedule-  #基于Key+Effect删除

#5.修改污点(Key和Effect相同)
# kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule --overwrite

EFFECT 排斥等级:

  • NoSchedule:禁止调度到该节点,已经在该节点上的 Pod 不受影响
  • NoExecute:禁止调度到该节点,如果不符合这个污点,会立马被驱逐(或在一段时间后)
  • PreferNoSchedule:尽量避免将 Pod 调度到指定的节点上,如果没有更合适的节点,可以部署到该节点

# 2.Toleration 配置解析

#1.完全匹配
tolerations:
- key: "taintKey"
  operator: "Equal"
  value: "taintValue"
  effect: "NoSchedule
 
#2.不完全匹配 
tolerations:
- key: "taintKey"
  operator: "Exists"
  effect: "NoSchedule"
  
#3.大范围匹配(不推荐key为内置Taint,会导致节点故障pod无法漂移)
tolerations:
- key: "taintKey"
  operator: "Exists
  
#4.容忍时间配置
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

# 3. Taint、Toleration 配置示例

有一个 K8s 节点是纯 SSD 硬盘的节点,现需要只有一些需要高性能存储的 Pod 才能调度到该节点上。

#1.给节点打上污点和标签
# kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule
# kubectl label node k8s-node01 ssd=true

#2.配置Toleration:
# cat nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx-deploy
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx-deploy
  replicas: 5
  template:
    metadata:
      labels:
        app: nginx-deploy
    spec:
      containers:
        - name: nginx-deploy
          image: nginx
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: 1024Mi
              cpu: 1
            requests:
              memory: 128Mi
              cpu: 100m
      nodeSelector:
        ssd: 'true'
      tolerations:
        - key: ssd
          operator: Exists
          effect: NoSchedule

# 4. K8s 内置污点

1.png

Deployment 创建后 K8s 默认为 Pod 添加容忍,当 Pod 所在的节点宕机,300 秒后 pod 会漂移,默认容忍时间 300 秒。

# 5. 节点宕机快速恢复业务应用

节点不健康,180 秒后再驱逐(默认是 300 秒)

# cat nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx-deploy
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx-deploy
  replicas: 5
  template:
    metadata:
      labels:
        app: nginx-deploy
    spec:
      containers:
        - name: nginx-deploy
          image: nginx
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: 1024Mi
              cpu: 1
            requests:
              memory: 128Mi
              cpu: 100m
      tolerations:
        - key: node.kubernetes.io/unreachable
          operator: Exists
          effect: NoExecute
          tolerationSeconds: 180
        - key: node.kubernetes.io/not-ready
          operator: Exists
          effect: NoExecute
          tolerationSeconds: 180

本文出自于:https://edu.51cto.com/course/23845.html

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝