Kubernetes-完全避免带有PreferNoSchedule污染的节点
问题是: 我们在kubernetes中有一些节点,它们偶尔会受到Kubernetes-完全避免带有PreferNoSchedule污染的节点,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,问题是: 我们在kubernetes中有一些节点,它们偶尔会受到PreferNoSchedule的影响。当这种情况发生时,我们希望我们的POD完全避免在这些节点上进行调度(换句话说,就像污染的效果实际上是NoSchedule)。这些污点不是我们应用的——我们使用的是GKE,这是一个自动化的东西,所以我们被困在PreferNoSchedule行为中 我们能控制的是吊舱的规格。我希望在它们上使用nodeAffinity可以做到这一点,但是关于这一点的文档非常稀少:参见例如。我能找到的所有例子都引用了
PreferNoSchedule
的影响。当这种情况发生时,我们希望我们的POD完全避免在这些节点上进行调度(换句话说,就像污染的效果
实际上是NoSchedule
)。这些污点不是我们应用的——我们使用的是GKE,这是一个自动化的东西,所以我们被困在PreferNoSchedule
行为中
我们能控制的是吊舱的规格。我希望在它们上使用nodeAffinity
可以做到这一点,但是关于这一点的文档非常稀少:参见例如。我能找到的所有例子都引用了标签的亲和性,所以我不确定这个逻辑是否可以看到/访问污染
实际上,在我的pod规范中,我想写一些如下内容:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/taints *I've invented this, it doesn't work
operator: NotIn
values:
- DeletionCandidateOfClusterAutoscaler
其中,DeletionCandidateOfClusterAutoscaler
是我们看到应用的污点。有没有办法让这一切顺利进行
我们考虑过的另一种方法是cronjob,它查找PreferNoSchedule
污点,并在顶部添加我们自己的NoSchedule
污点。。。但这感觉有点恶心
任何简洁的建议/解决方法都将不胜感激
长版本(如果您感兴趣):
autoscaler应用了这个污点,表示节点将在30分钟左右消失。这个问题更详细地描述了有相同问题的人:我已经测试了相同的场景,事实上,GKE在autoscaler开始启动时协调了当前的节点配置。这是为了确保在POD/工作负载可调度的节点中缺少资源时不会停机。我相信没有办法把这一棘手的问题弄得一干二净
因此,使用autoscaler时要记住的关键信息是:
- 如果常规节点中有可用资源,则不会将POD调度到软污染节点POOL
- 如果常规节点中没有足够的可用资源,那么它们将被调度到受软污染的nodepool
- 如果nodepool中没有足够的资源,则无论污染程度如何,节点类型最小的nodepool都将自动缩放
正如您所提到的,一个棘手的解决办法是:
A.-创建一个cron或daemon来设置NoSchedule并覆盖autoscaler设置的软命令
B.-A.-通过设置完美的资源限制和请求来确保资源的可居住性。您好,我没有得到您确切需要的,为什么不设置一个NoSchedule污点呢。NoSchedule和PreferNoSchedule的区别在于前者在调度周期的过滤阶段被考虑,而PreferNoSchedule在评分阶段被考虑@Jujosiga正如我在我的原始帖子中解释的那样,污染不是由我们应用的,而是由autoscaler自动应用的。如果我们想设置我们自己的NoSchedule
taint,我们需要通过cronjob或其他方式来完成,它轮询节点的状态以获取autoscaler taint,并在发现时应用我们自己的。这当然是一种选择(也是我在专栏文章中提到的),但我希望有一种更整洁的方式。