EKS Fargate(K8s 1.23) Prometheus监控报错及资源数据缺失排查
EKS Fargate 1.23 Prometheus监控问题排查与解决
错误原因
- EKS Fargate是AWS托管的节点方案,kubelet、cadvisor等核心组件由AWS完全管控,不向外暴露节点级的metrics访问端点,所以执行
kubectl get --raw /metrics或kubectl get --raw /api/v1/nodes/${NODE_NAME}/proxy/metrics/cadvisor会返回NotFound错误。 - kube-state-metrics仅采集Kubernetes资源对象(如Pod、Deployment、Service)的状态元数据,不包含CPU、内存、磁盘I/O等实时资源使用指标,这是你无法获取性能数据的核心原因。
解决方法
1. 利用AWS Container Insights采集指标
AWS Container Insights原生适配EKS Fargate,可自动采集Pod级资源使用数据,还能与Prometheus集成:
- 启用Container Insights:通过AWS控制台或CLI为目标EKS集群开启Fargate的Container Insights功能,AWS会自动部署Fluent Bit等采集组件到Fargate Pod中。
- 对接Prometheus:如果使用自建Prometheus,可通过CloudWatch Exporter将Container Insights的指标导入;如果使用Amazon Managed Prometheus(AMP),可配置远程写入规则直接接收数据。
2. 注入Sidecar采集容器
由于Fargate无法访问节点级组件,可给业务Pod添加Sidecar容器来采集Pod内的资源指标:
- 选择适配Fargate的采集工具,如轻量版cadvisor、或针对Pod优化的node-exporter变体。
- 通过Kubernetes Admission Webhook实现Sidecar自动注入,或手动在Pod模板中添加Sidecar配置。
- 配置Prometheus抓取规则,指向Sidecar容器暴露的metrics端口(如默认的9100、8080)。
3. 部署Fargate兼容的Prometheus Operator
如果使用Prometheus Operator管理监控栈,需调整部署配置适配Fargate:
- 移除依赖节点级访问的组件(如node-exporter DaemonSet),替换为Pod级采集方案。
- 创建Fargate Profile,指定Prometheus所在的命名空间,确保Prometheus Pod能调度到Fargate节点。
- 调整Prometheus的RBAC权限,确保其能访问集群内的metrics端点。
验证操作
- 开启Container Insights后,登录CloudWatch进入
Metrics > Container Insights > EKS Clusters,确认能看到目标Pod的CPU、内存使用率数据。 - 注入Sidecar后,执行命令
kubectl exec <pod-name> -c <sidecar-container-name> -- curl localhost:<metrics-port>/metrics,验证能返回有效指标数据。 - 访问Prometheus UI的
Targets页面,确认新增的采集端点状态为UP。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

