存在容忍度的 Kubernetes DaemonSets

roo*_*099 7 kubernetes daemonset

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

文档守护进程 pod 尊重污点和容忍度。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只有在我删除节点的污点之后(或者可能是在我向 pod 内的 pod 规范添加了容忍度之后DaemonSet),它才会被重新安排。

那么DaemonSets 和 tolerations 详细来说是如何互操作的。难道某些DaemonSets(比如kube-proxykube-flannel-ds-amd64)被特殊对待了?

swi*_*.op 8

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

以下是我的 canal 守护进程中的几个:

tolerations:
  - effect: NoSchedule
    operator: Exists
  - key: CriticalAddonsOnly
    operator: Exists
  - effect: NoExecute
    operator: Exists
Run Code Online (Sandbox Code Playgroud)

以下是我的主节点之一的污点:

taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/controlplane
    value: "true"
  - effect: NoExecute
    key: node-role.kubernetes.io/etcd
    value: "true"
Run Code Online (Sandbox Code Playgroud)

NoSchedule尽管由于其污点,大多数工作负载不会安排在主服务器上NoExectue,但 Canal Pod 仍将在那里运行,因为守护进程集专门容忍这些污点。

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