Kubernetes Metrics Server无法采集Django API Pod指标的原因排查
问题描述
我部署了Django API和Celery两个应用,执行获取Pod资源消耗的命令时,仅能返回Celery Pod的指标,无法获取Django API Pod的指标。相同配置在另一个集群可正常运行,Kubernetes Server Version: v1.22.5。

编辑:补充Metrics Server日志
I0824 13:28:05.498602 1 serving.go:342] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key) I0824 13:28:06.269888 1 requestheader_controller.go:169] Starting RequestHeaderAuthRequestController I0824 13:28:06.269917 1 shared_informer.go:240] Waiting for caches to sync for RequestHeaderAuthRequestController I0824 13:28:06.269966 1 configmap_cafile_content.go:201] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::client-ca-file" I0824 13:28:06.269981 1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0824 13:28:06.270005 1 configmap_cafile_content.go:201] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file" I0824 13:28:06.270025 1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file I0824 13:28:06.270512 1 secure_serving.go:266] Serving securely on [::]:8443 I0824 13:28:06.270577 1 dynamic_serving_content.go:131] "Starting controller" name="serving-cert::apiserver.local.config/certificates/apiserver.crt::apiserver.local.config/certificates/apiserver.key" I0824 13:28:06.270593 1 tlsconfig.go:240] "Starting DynamicServingCertificateController" W0824 13:28:06.270852 1 shared_informer.go:372] The sharedIndexInformer has started, run more than once is not allowed I0824 13:28:06.277601 1 server.go:187] "Failed probe" probe="metric-storage-ready" err="no metrics to serve" I0824 13:28:06.371038 1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file I0824 13:28:06.371093 1 shared_informer.go:247] Caches are synced for RequestHeaderAuthRequestController I0824 13:28:06.371932 1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
潜在原因分析
- Django API Pod未配置资源请求/限制:Metrics Server默认仅采集配置了
resources.requests或resources.limits的Pod指标,若Django API Pod未设置资源配额,可能不会被纳入采集范围。 - Metrics Server存在标签选择器限制:检查Metrics Server的部署配置,是否存在仅采集特定标签Pod的规则,比如Celery Pod携带了匹配的标签,而Django API Pod未携带。
- 节点kubelet指标访问异常:Django API所在节点的kubelet指标端口(默认10250)可能未开放,或Metrics Server无法访问该节点的kubelet。可通过执行
kubectl get --raw "/api/v1/nodes/<节点名称>/proxy/metrics/resource"测试节点指标是否能正常返回。 - Metrics Server版本兼容性问题:尽管集群版本为v1.22.5,但当前集群的Metrics Server版本若与正常集群不一致,可能存在兼容性问题导致部分Pod采集失败。
- Django API Pod状态异常:若Django API Pod处于Pending、CrashLoopBackOff等非Running/Ready状态,Metrics Server不会采集其资源指标,需确认Pod状态是否正常。
- RBAC权限覆盖不全:Metrics Server的ServiceAccount权限可能未覆盖Django API所在的命名空间,检查ClusterRole和ClusterRoleBinding是否包含所有需要采集的命名空间权限。
内容的提问来源于stack exchange,提问作者Kaizendae
相关产品推荐
相关产品推荐

