集群自动缩放器部署失败,显示“1 太多 pods,3 个节点与 Pod 的节点不匹配 affinity/selector”

cluster-autoscaler deployment fails with "1 Too many pods, 3 node(s) didn't match Pod's node affinity/selector"

我已经在 AWS 上根据 docs on autoscaler 创建了一个带有 kops (1.21.4) 的 k8s 集群。我已经对我的集群进行了必要的更改,但是当集群启动时,cluster-autoscaler pod 无法在任何节点上进行调度。当我描述 pod 时,我看到以下内容:

Events:
  Type     Reason            Age                   From               Message
  ----     ------            ----                  ----               -------
  Warning  FailedScheduling  4m31s (x92 over 98m)  default-scheduler  0/4 nodes are available: 1 Too many pods, 3 node(s) didn't match Pod's node affinity/selector.

查看集群的部署,我看到以下内容 podAntiAffinity

      affinity:                                                                 
        podAntiAffinity:                                                        
          preferredDuringSchedulingIgnoredDuringExecution:                      
          - podAffinityTerm:                                                    
              labelSelector:                                                    
                matchExpressions:                                               
                - key: app                                                      
                  operator: In                                                  
                  values:                                                       
                  - cluster-autoscaler                                          
              topologyKey: topology.kubernetes.io/zone                          
            weight: 100                                                         
          requiredDuringSchedulingIgnoredDuringExecution:                       
          - labelSelector:                                                      
              matchExpressions:                                                 
              - key: app                                                        
                operator: In                                                    
                values:                                                         
                - cluster-autoscaler                                            
            topologyKey: kubernetes.com/hostname

由此我了解到,它想要阻止 运行 pod 在已经具有集群自动缩放器 运行 的同一节点上。但这似乎并不能证明在 pod 状态中看到的错误是合理的。

编辑:自动缩放器的 pod 具有以下 nodeSelectorstolerations

Node-Selectors:              node-role.kubernetes.io/master=
Tolerations:                 node-role.kubernetes.io/master op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s

这么清楚,应该也可以调度到master节点上了。

我不确定我还需要做些什么来组装 pod 和 运行。

您需要检查 pod/deployment nodeSelector 属性。确保您所需的节点具有此标签。

另外,如果要调度pods在主节点上,必须先去除污点

kubectl taint nodes --all node-role.kubernetes.io/master-

正在发布评论中的答案。


podAffinity 条规则,因此首先要检查的是日程安排中是否存在任何错误。情况是这样的:

0/4 nodes are available: 1 Too many pods, 3 node(s) didn't match Pod's node affinity/selector.

由于有 1 个控制平面(应该在其上调度 pod)和 3 个工作节点,这导致与控制平面相关的错误 1 Too many pods


由于集群在 AWS 中是 运行,因此每个机器类型的 network interfacesprivate IP addresses 数量存在已知限制 - IP addresses per network interface per instance type.

t3.small 使用了 3 个接口,每个接口 4 个 IP = 总共 12 个,这还不够。

扩大到 t3.medium 解决了这个问题。


感谢 关于根本原因。