在节点自动缩放期间,在k8s集群(GCP)上,我的pod会自动重新安排。它们在自动缩放过程中执行计算并将结果保留在内存中的主要问题。由于重新安排时间,广告连播会丢失所有结果和任务。
我想禁用指定Pod的重新计划。我知道一些可能的解决方案:
我已经尝试了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