在节点自动缩放期间,在k8s集群(GCP)上,我的pod会自动重新安排。它们在自动缩放过程中执行计算并将结果保留在内存中的主要问题。由于重新安排时间,广告连播会丢失所有结果和任务。

我想禁用指定Pod的重新计划。我知道一些可能的解决方案:

  • nodeSelector(由于集群的动态特性,因此不太灵活)
  • pods 中断预算PDB

  • 我已经尝试了PDB并将minAvailable设置为1,但是没有用。我发现您还可以设置maxUnavailable = 0,会更有效吗?将maxUnavailable设置为0时,我无法确切了解其行为。您能进一步解释一下吗?谢谢!

    链接以获取更多详细信息-https://github.com/dask/dask-kubernetes/issues/112

    最佳答案

    将max unavailable设置为0是一种可行的方法,而且,使用节点池也是一个很好的解决方法。

    gcloud container node-pools create <nodepool> --node-taints=app=dask-scheduler:NoSchedule
    gcloud container node-pools create <nodepool> --node-labels app=dask-scheduler
    

    这将使用标签app = dask-scheduler创建节点池,在pod规范中,您可以执行以下操作:
    nodeSelector:
      app: dask-scheduler
    

    并将dask调度程序放在不会自动扩展的节点池中。

    有一个名为PDB的对象,您可以在其规范中设置maxUnavailable
    在maxUnavailable = 1的示例中,这意味着如果您定义了100个 pods ,请始终确保一次仅删除/排水/重新安排一个 pods
    对于maxUnavailable,如果您有2个容器,并且将maxUnavailable设置为0,则它​​将永远不会删除您的容器。它是调度程序
    apiVersion: policy/v1beta1
    kind: PodDisruptionBudget
    metadata:
      name: zk-pdb
    spec:
      maxUnavailable: 1
      selector:
        matchLabels:
          app: zookeeper
    

    08-03 13:13