作用说明

准入控制器PodTolerationRestriction检查Pod 的污点容忍度与其名称空间的设置的污点容忍度之间是否存在冲突。 如果存在冲突,则拒绝 Pod调度。如果不存在冲突PodTolerationRestriction控制器接会将名称空间中配置的污点容忍度合并到Pod的污点容忍度中,根据名称空间的污点容忍度白名单检查所得到污点的容忍度结果。 如果检查成功,则将接受Pod调度请求,否则拒绝该请求。

注解说明

scheduler.alpha.kubernetes.io/defaultTolerations:名称空间下pod默认污点容忍度

scheduler.alpha.kubernetes.io/tolerationsWhitelist 可接受的污点容忍度白名单,用来限制该名称空间下的pod能容忍哪些污点

使用示例

apiVersion: v1
kind: Namespace
metadata:
  name: default
  annotations:
    scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": "NoSchedule", "key": "team"}]'
    #scheduler.alpha.kubernetes.io/tolerationsWhitelist: '[{"operator": "Exists", "effect": "NoSchedule", "key": "team"}]'
---
# 创建出来的pod会自动合并上面污点容忍度配置
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
    version: 1.20.2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      version: 1.20.2
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
        version: 1.20.2
    spec:
      containers:
        - name: nginx
          image: registry.cn-shenzhen.aliyuncs.com/huis/nginx:1.20.2-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
      tolerations:
        - key: env
          operator: Equal
          value: beta
          effect: NoSchedule
      restartPolicy: Always

注意事项

PodNodeSelector准入控制器默认情况下是被禁用的,开启方法如下:

# 在kube-apiserver中启用PodNodeSelector控制器插件
kube-apiserver --enable-admission-plugins=PodTolerationRestriction,<其它准入控制器>
文章目录