1

我正在考虑将我的 Kubernetes 集群划分为专用节点区域,供专用用户集独家使用,如此所述。我想知道污染节点会如何影响DaemonSets,包括那些对集群操作至关重要的节点(例如kube-proxykube-flannel-ds-amd64)?

文档说守护进程 pod 尊重 taints 和 tolerations。kubectl taint nodes node-x zone=zone-y:NoSchedule但如果是这样,当 Pod(不受我控制但由 Kubernetes 自己拥有DaemonSet kube-proxy)不携带相应的容忍度时,系统如何在受污染的节点上调度例如 kube-proxy Pod 。

到目前为止,我凭经验发现 Kubernetes 1.14 重新安排了一个 kube-proxy pod(在我在 tainted 上删除它之后node-x),这似乎与文档相矛盾。另一方面,我自己的情况似乎并非如此DaemonSet。当我杀死它的 pod 时node-x,只有在我删除节点的 taint 之后(或者大概是在我在 pod 的规范中添加容忍度之后)才会重新安排它DaemonSet

那么DaemonSets 和 tolerations 如何在细节上进行互操作。会不会是某些DaemonSets(例如kube-proxy, kube-flannel-ds-amd64)被特殊对待?

4

2 回答 2

3

kube-proxy和 flannel 守护程序集将在其清单中定义许多容忍度,这意味着它们即使在受污染的节点上也会被安排。

这是我的运河守护进程中的一对:

tolerations:
  - effect: NoSchedule
    operator: Exists
  - key: CriticalAddonsOnly
    operator: Exists
  - effect: NoExecute
    operator: Exists

以下是来自我的一个主节点的污点:

taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/controlplane
    value: "true"
  - effect: NoExecute
    key: node-role.kubernetes.io/etcd
    value: "true"

尽管大多数工作负载由于其NoScheduleNoExectue污点而不会被安排在主服务器上,但一个 canal pod 将在那里运行,因为守护程序集专门容忍这些污点。

您已经链接到的文档详细说明。

于 2019-07-12T18:44:51.927 回答
0

我遇到过同样的问题。我的守护进程有必要在每个节点上运行其 pod(关键 pod 定义)。我有这个守护进程容忍定义:

spec:
  template:
    spec:
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists

它在唯一没有污点定义的节点上运行......

我检查了我的 kube-proxy,这只是一条不同的线:

spec:
  template:
    spec:
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists
      - operator: Exists

所以我在我的守护进程定义中添加了这个“- operator: Exists”行(我不太明白它的作用和方式),现在它工作正常。我的守护进程在集群的每个节点上启动 pod...

于 2020-11-13T10:23:35.840 回答