前言

我们都知道, kubernetes的daemonset控制器,可以将副本每个运行在集群中的所有节点中,并且 daemonset 控制器 默认会对Pod添加污点容忍度

容忍度健名

效果

版本

描述

node.kubernetes.io/not-ready

NoExecute

1.13+

当出现类似网络断开的情况导致节点问题时,DaemonSet Pod 不会被逐出。

node.kubernetes.io/unreachable

NoExecute

1.13+

当出现类似于网络断开的情况导致节点问题时,DaemonSet Pod 不会被逐出。

node.kubernetes.io/disk-pressure

NoSchedule

1.8+

node.kubernetes.io/memory-pressure

NoSchedule

1.8+

node.kubernetes.io/unschedulable

NoSchedule

1.12+

DaemonSet Pod 能够容忍默认调度器所设置的 unschedulable 属性.

node.kubernetes.io/network-unavailable

NoSchedule

1.12+

DaemonSet 在使用宿主网络时,能够容忍默认调度器所设置的 network-unavailable 属性

这些容忍度可以保证Pod可以允许在集群中的每个节点.

但是, 如果是我们用户自定义的Taint呢?

将Pod容忍所有的Taint

我们这时候就会发现一个有意思的事情, 如果我们将集群中的某个节点打上Taint, 就会发现我们自己设置的daemonset副本全部被驱逐,并且无法被调度回来. 而kube-system下的daemonset 如:kube-proxy就不会出现这种问题.

我们也可以在用户自己的daemonset当中设置容忍, 解决这个问题,但是kube-proxy到底是怎么做的呢?

通过观察,kube-proxy的配置,我们发现了关键

kube-proxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- operator: Exists
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/disk-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/pid-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/unschedulable
operator: Exists

用户自己的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/disk-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/pid-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/unschedulable
operator: Exists

可以发现,对比下来,我们发现kube-proxy多了一个operator,查询文档以后,发现原来

  1. 如果key留空,只保留operator的值为Exists,则匹配所有的keys,values,effects.
  2. 如果effect留空,则会匹配对应key的所有effects

参考文档