AWS EKS Fargate中kube-system命名空间Pod无法调度到Fargate节点
问题根因
核心问题是你创建的kube-system命名空间Fargate Profile选择器配置范围过窄,无法匹配到aws-load-balancer-controller、metrics-server这类工作负载的Pod。
你当前配置的Selectors块生效规则为:仅同时满足以下两个条件的Pod,才会被Fargate调度器接管:
- 部署在kube-system命名空间下
- 携带标签
k8s-app: kube-dns
按照这个规则,除了CoreDNS(原kube-dns组件)之外,kube-system下其他所有Pod都不符合匹配要求,调度请求不会流转到fargate-scheduler,而是由default-scheduler处理。如果你的集群没有配置EC2类型的节点组,这些Pod就会持续处于Pending状态无法调度。
相同工作负载部署到default命名空间可正常运行,是因为你为default命名空间配置的Fargate Profile没有附加标签匹配限制,只要是该命名空间下的Pod,无论携带什么标签都会被Fargate调度器识别。
修复方案
根据你的实际需求调整Fargate Profile的Selectors配置即可,可选两种调整方式:
- 方案一:允许kube-system下所有Pod调度到Fargate
直接移除Selectors下的Labels配置段,修改后的配置片段如下:Selectors: - Namespace: kube-system - 方案二:仅允许指定系统组件调度到Fargate
在Selectors下追加对应工作负载的标签匹配规则,例如需要兼容kube-dns、aws-load-balancer-controller、metrics-server时,配置如下:
注意不同组件的标签可能随部署版本变化,可通过Selectors: - Namespace: kube-system Labels: - Key: k8s-app Value: kube-dns - Namespace: kube-system Labels: - Key: app.kubernetes.io/name Value: aws-load-balancer-controller - Namespace: kube-system Labels: - Key: k8s-app Value: metrics-serverkubectl get pod -n kube-system --show-labels查看实际Pod携带的标签,对应调整匹配规则即可。
配置生效验证
Fargate Profile更新完成后按以下步骤验证:
- 删除kube-system下原有处于Pending状态的对应工作负载Pod,触发重新调度
- 执行
kubectl get pod -n kube-system -o wide,成功调度到Fargate的Pod会显示以fargate-开头的节点名称 - 执行
kubectl describe pod <目标Pod名称> -n kube-system查看事件流,出现fargate-scheduler相关调度事件即代表匹配规则生效
Fargate Profile匹配规则说明:同一个Selector块内的命名空间、标签条件为AND逻辑,必须全部满足才会匹配;同一个Profile下配置的多个Selector块为OR逻辑,满足任意一个块的条件即可被Fargate接管。
内容的提问来源于stack exchange,提问作者Pavan Kumar Lekkala
相关产品推荐
相关产品推荐

