存在容忍的Kubernetes DaemonSets

时间:2019-07-12 11:48:14

标签: kubernetes daemonset

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

documentation说,守护程序吊舱尊重污点和容忍度。但是如果是这样,系统如何安排例如当Pod(不受我控制但由Kubernetes自己的kubectl taint nodes node-x zone=zone-y:NoSchedule拥有)的结节没有相应的容忍度时,结点为DaemonSet kube-proxy的节点上的kube-proxy Pod。

到目前为止,我凭经验发现,Kubernetes 1.14重新计划了一个kube-proxy pod,无论如何(在受污染的node-x上删除它之后),这似乎与文档相矛盾。另一方面,我自己的DaemonSet似乎并非如此。当我在node-x上杀死其吊舱时,只有在删除节点的异味之后(或者大概是在DaemonSet内的吊舱规格中添加了公差之后),才重新安排其时间。

因此DaemonSet和容忍度如何进行详细的互操作。某些DaemonSet(例如kube-proxykube-flannel-ds-amd64)是否受到特殊对待?

2 个答案:

答案 0 :(得分:2)

您的kube-proxy和绒布守护进程将在其清单中定义许多容忍度,这意味着即使在受污染的节点上也将对其进行调度。

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

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污点而不会在主服务器上调度,但由于该守护程序可以容忍这些操作,所以仍会在该主服务器上运行运河吊舱专门污染。

doc you already linked to详细介绍。

答案 1 :(得分:0)

我有同样的问题。我的守护程序有必要在每个节点上运行其Pod(关键Pod定义)。我有这个daemonset公差定义:

        int findMaxSum(int[] array)
        {
            if (array.Length == 0) return 0;

            Array.Sort(array);
            Array.Reverse(array);

            int k = 0;
            int maxSum = 0;
            int currentSum = array[0];

            for (int i = 0; i < array.Length; i++)
            {
                // find the longest subarray starting from i
                while (i + k + 1 < array.Length)
                {
                    if (k > 0 && array[i] > array[i + k] + array[i + k + 1])
                    {
                        // condition not satisfied, so we've found the longest subarray
                        k = k - 1;
                        break;
                    }
                    // grow the subarray and increase the current sum
                    k = k + 1;
                    currentSum = currentSum + array[i + k];
                }
                // check if the sum of the longest subarray starting from i is larger than the largest sum found so far
                maxSum = Math.Max(maxSum, currentSum);
                // subtract the first element to consider subarrays starting from i + 1
                currentSum = currentSum - array[i];
            }

            return maxSum;
        }
 

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

我已经检查了我的kube-proxy,只是另一行不同:

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

因此,我在守护程序定义中添加了“-运算符:存在”行(我不太了解它的作用和方式),现在可以正常使用了。我的守护程序在集群的每个节点上启动了pod ...