集群自动缩放器部署失败,显示“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 具有以下 nodeSelectors
和 tolerations
:
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 interfaces
和 private IP addresses
数量存在已知限制 - IP addresses per network interface per instance type.
t3.small
使用了 3 个接口,每个接口 4 个 IP = 总共 12 个,这还不够。
扩大到 t3.medium
解决了这个问题。
感谢 关于根本原因。
我已经在 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 具有以下 nodeSelectors
和 tolerations
:
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 interfaces
和 private IP addresses
数量存在已知限制 - IP addresses per network interface per instance type.
t3.small
使用了 3 个接口,每个接口 4 个 IP = 总共 12 个,这还不够。
扩大到 t3.medium
解决了这个问题。
感谢