metrics-server: kubectl top pod responding with "Metrics not available for pod xxx"

What happened: After applying the deployment for metrics-server, and adding the --kubelet-insecure-tls arg to the container, I am seeing “Metrics not available for pod xxx” as output to kubectl top pod.

What you expected to happen: Metrics to successfully be reported for pods.

Anything else we need to know?:

PS C:\Users\nater\source\repos\local-kube> kubectl top pod -A
error: Metrics not available for pod default/kube-auto-apply-deployment-b7bb5c779-kwbpd, age: 2m8.0911182s

I am able to successfully see the metrics for my node(via kubectl top node), but nothing else.

Environment:

  • Kubernetes distribution (GKE, EKS, Kubeadm, the hard way, etc.): Docker Desktop 4.10.1

  • Container Network Setup (flannel, calico, etc.): None

  • Kubernetes version (use kubectl version): 1.24

  • Metrics Server version: v0.6.1

  • Metrics Server manifest

spoiler for Metrics Server manifest:
  • Kubelet config:
spoiler for Kubelet config:
  • Metrics server logs:
spoiler for Metrics Server logs:
I0718 22:09:16.573813       1 requestheader_controller.go:169] Starting RequestHeaderAuthRequestController
I0718 22:09:16.573938       1 shared_informer.go:240] Waiting for caches to sync for RequestHeaderAuthRequestController
I0718 22:09:16.573963       1 configmap_cafile_content.go:201] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::client-ca-file"
I0718 22:09:16.573971       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I0718 22:09:16.573984       1 configmap_cafile_content.go:201] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file"
I0718 22:09:16.573995       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I0718 22:09:16.574655       1 dynamic_serving_content.go:131] "Starting controller" name="serving-cert::/tmp/apiserver.crt::/tmp/apiserver.key"
I0718 22:09:16.575678       1 secure_serving.go:266] Serving securely on [::]:4443
I0718 22:09:16.575724       1 tlsconfig.go:240] "Starting DynamicServingCertificateController"
W0718 22:09:16.575841       1 shared_informer.go:372] The sharedIndexInformer has started, run more than once is not allowed
I0718 22:09:16.674734       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file 
I0718 22:09:16.674754       1 shared_informer.go:247] Caches are synced for RequestHeaderAuthRequestController 
I0718 22:09:16.674760       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file 
  • Status of Metrics API:
spolier for Status of Metrics API:
kubectl describe apiservice v1beta1.metrics.k8s.io
Name:         v1beta1.metrics.k8s.io
Namespace:
Labels:       k8s-app=metrics-server
Annotations:  <none>
API Version:  apiregistration.k8s.io/v1
Kind:         APIService
Metadata:
  Creation Timestamp:  2022-07-17T18:30:39Z
  Managed Fields:
    API Version:  apiregistration.k8s.io/v1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          .:
          k:{"type":"Available"}:
            .:
            f:lastTransitionTime:
            f:message:
            f:reason:
            f:status:
            f:type:
    Manager:      kube-apiserver
    Operation:    Update
    Subresource:  status
    Time:         2022-07-17T18:30:39Z
    API Version:  apiregistration.k8s.io/v1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
        f:labels:
          .:
          f:k8s-app:
      f:spec:
        f:group:
        f:groupPriorityMinimum:
        f:insecureSkipTLSVerify:
        f:service:
          .:
          f:name:
          f:namespace:
          f:port:
        f:version:
        f:versionPriority:
    Manager:         kubectl-client-side-apply
    Operation:       Update
    Time:            2022-07-17T18:30:39Z
  Resource Version:  1187400
  UID:               118eff22-1c09-417a-af48-7cb661511225
Spec:
  Group:                     metrics.k8s.io
  Group Priority Minimum:    100
  Insecure Skip TLS Verify:  true
  Service:
    Name:            metrics-server
    Namespace:       kube-system
    Port:            443
  Version:           v1beta1
  Version Priority:  100
Status:
  Conditions:
    Last Transition Time:  2022-07-18T22:09:43Z
    Message:               all checks passed
    Reason:                Passed
    Status:                True
    Type:                  Available
Events:                    <none>

/kind bug

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 15 (4 by maintainers)

Most upvoted comments

I met the same bug, after some searching, I found a related issue.

Root cause: This problem is caused by a bug in Mirantis/cri-dockerd, which is the replacement of the deprecated dockershim. Specifically, this bug is fixed in cri-dockerd v2.3.0, (see this commit 5576d3c5d4b030b2feb24ebb79640932c5838f6a). However, the cri-dockered integrated in OSX Docker Desktop 4.10/11 is v2.1.0.

Solution: Download cri-dockerd v2.3.0 from the releases page and overwrite the lower-version binary in Docker VM. Commands:

Step 1: Login Docker VM:

wei@MacBook-Pro:~$ docker run -it --privileged --pid=host ubuntu nsenter -t 1 -m -u -n -i sh

Step2: Download cri-dockerd v2.3.0

/ # cd /tmp/
/tmp # wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.3/cri-dockerd-0.2.3.arm64.tgz
/tmp # tar zxvf cri-dockerd-0.2.3.arm64.tgz
cri-dockerd/
cri-dockerd/cri-dockerd

Step3: Find cri-dockerd binaries

/tmp # cd /
/ # find . -name "cri-dockerd"
./var/lib/kube-binary-cache-debian/cri-dockerd
./var/lib/mount-services-cache/entries/services.tar/9da163909d8622e45752ff9b241a8b501c257a1b58e00f84a8e82ab1b26328b0/containers/services/docker/rootfs/usr/bin/cri-dockerd
./var/lib/mount-services-cache/entries/services.tar/9da163909d8622e45752ff9b241a8b501c257a1b58e00f84a8e82ab1b26328b0/containers/services/docker/tmp/upper/usr/bin/cri-dockerd
./var/lib/docker/overlay2/1232faa5cebc012b3c04a8c1f3722a564e813a27826720cbd7461871e8382ed6/diff/binaries/cri-dockerd
./var/lib/docker/overlay2/726cc85d374cac802da0a88aaaae0e65b558c742e4d8b1a5c9a2d37426332d0d/diff/binaries/cri-dockerd
./var/lib/cri-dockerd
./tmp/cri-dockerd
./tmp/cri-dockerd/cri-dockerd
./containers/services/docker/rootfs/usr/bin/cri-dockerd
./containers/services/docker/tmp/upper/usr/bin/cri-dockerd

These binaries are of old version (0.2.1)

/ # ./containers/services/docker/tmp/upper/usr/bin/cri-dockerd --version
cri-dockerd 0.2.1 (HEAD)

Step4: Overwrite found all cri-dockerd binaries with v2.3.0, (actually I think it’s unnecessary to cover all of them, do it just for simplicity)

/ # cp /tmp/cri-dockerd/cri-dockerd /containers/services/docker/rootfs/usr/bin
/ # cp /tmp/cri-dockerd/cri-dockerd /var/lib/kube-binary-cache-debian/cri-dockerd
...

Step 5: Restart Docker Desktop.

Finally, kubectl top pods -A works!

wei@MacBook-Pro:~/Test/k8s$ kubectl top pods -A
NAMESPACE              NAME                                        CPU(cores)   MEMORY(bytes)
kube-system            coredns-6d4b75cb6d-6bf5n                    8m           45Mi
kube-system            coredns-6d4b75cb6d-ztnp6                    7m           17Mi
kube-system            etcd-docker-desktop                         60m          68Mi
kube-system            kube-apiserver-docker-desktop               85m          376Mi
kube-system            kube-controller-manager-docker-desktop      53m          112Mi
kube-system            kube-proxy-xs29b                            1m           50Mi
kube-system            kube-scheduler-docker-desktop               12m          55Mi
kube-system            metrics-server-658867cdb7-v6pdp             11m          53Mi

So with the new Docker Desktop 4.12.0 release, this should no longer be an issue, since they upgraded the cri-dockerd version to 0.2.5 which includes the fix @weicao mentioned.

However, I had to do a full restart of the Kubernetes cluster under Docker Desktop --> Kubernetes --> Reset Kubernetes Cluster. Before the restart I was still having the error of pod metrics not being available.

If there are someone struggling with this when using minikube. Don’t be dazed by all above it’s not ur solution… just enable metric server from minikube with minikube addons enable metrics-server

@yangjunmyfm192085 the command you provided returns data in the pods section with cpu and memory values.

kubectl get --raw /api/v1/nodes/docker-desktop/proxy/metrics/resource
# HELP container_cpu_usage_seconds_total [ALPHA] Cumulative cpu time consumed by the container in core-seconds
# TYPE container_cpu_usage_seconds_total counter
container_cpu_usage_seconds_total{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-5v4v5"} 234.0434008 1658319271478
container_cpu_usage_seconds_total{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-qwsln"} 238.6574996 1658319271485
container_cpu_usage_seconds_total{container="dashboard-metrics-scraper",namespace="kubernetes-dashboard",pod="dashboard-metrics-scraper-6f7988986-b7tb7"} 18.8305656 1658319271472
container_cpu_usage_seconds_total{container="etcd",namespace="kube-system",pod="etcd-docker-desktop"} 1893.3861808 1658319271493
container_cpu_usage_seconds_total{container="kube-apiserver",namespace="kube-system",pod="kube-apiserver-docker-desktop"} 4163.6280112 1658319271483
container_cpu_usage_seconds_total{container="kube-auto-apply",namespace="default",pod="kube-auto-apply-deployment-b7bb5c779-kwbpd"} 187944.3032901 1658319271470
container_cpu_usage_seconds_total{container="kube-controller-manager",namespace="kube-system",pod="kube-controller-manager-docker-desktop"} 2128.6971249 1658319271471
container_cpu_usage_seconds_total{container="kube-proxy",namespace="kube-system",pod="kube-proxy-v5xf2"} 23.2462431 1658319271492
container_cpu_usage_seconds_total{container="kube-scheduler",namespace="kube-system",pod="kube-scheduler-docker-desktop"} 348.5756336 1658319271475
container_cpu_usage_seconds_total{container="kubernetes-dashboard",namespace="kubernetes-dashboard",pod="kubernetes-dashboard-695d4d84bc-tmckq"} 43.0985573 1658319271489
container_cpu_usage_seconds_total{container="metrics-server",namespace="kube-system",pod="metrics-server-7cd77845cb-bh5d8"} 338.9882395 1658319271480
container_cpu_usage_seconds_total{container="storage-provisioner",namespace="kube-system",pod="storage-provisioner"} 171.0094138 1658319271487
container_cpu_usage_seconds_total{container="vpnkit-controller",namespace="kube-system",pod="vpnkit-controller"} 0.1635073 1658319271477
# HELP container_memory_working_set_bytes [ALPHA] Current working set of the container in bytes
# TYPE container_memory_working_set_bytes gauge
container_memory_working_set_bytes{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-5v4v5"} 0 1658319271478
container_memory_working_set_bytes{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-qwsln"} 0 1658319271485
container_memory_working_set_bytes{container="dashboard-metrics-scraper",namespace="kubernetes-dashboard",pod="dashboard-metrics-scraper-6f7988986-b7tb7"} 0 1658319271472
container_memory_working_set_bytes{container="etcd",namespace="kube-system",pod="etcd-docker-desktop"} 0 1658319271493
container_memory_working_set_bytes{container="kube-apiserver",namespace="kube-system",pod="kube-apiserver-docker-desktop"} 0 1658319271483
container_memory_working_set_bytes{container="kube-auto-apply",namespace="default",pod="kube-auto-apply-deployment-b7bb5c779-kwbpd"} 0 1658319271470
container_memory_working_set_bytes{container="kube-controller-manager",namespace="kube-system",pod="kube-controller-manager-docker-desktop"} 0 1658319271471
container_memory_working_set_bytes{container="kube-proxy",namespace="kube-system",pod="kube-proxy-v5xf2"} 0 1658319271492
container_memory_working_set_bytes{container="kube-scheduler",namespace="kube-system",pod="kube-scheduler-docker-desktop"} 0 1658319271475
container_memory_working_set_bytes{container="kubernetes-dashboard",namespace="kubernetes-dashboard",pod="kubernetes-dashboard-695d4d84bc-tmckq"} 0 1658319271489
container_memory_working_set_bytes{container="metrics-server",namespace="kube-system",pod="metrics-server-7cd77845cb-bh5d8"} 0 1658319271480
container_memory_working_set_bytes{container="storage-provisioner",namespace="kube-system",pod="storage-provisioner"} 0 1658319271487
container_memory_working_set_bytes{container="vpnkit-controller",namespace="kube-system",pod="vpnkit-controller"} 0 1658319271477
# HELP container_start_time_seconds [ALPHA] Start time of the container since unix epoch in seconds
# TYPE container_start_time_seconds gauge
container_start_time_seconds{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-5v4v5"} 1.658182116e+09 1658182116000
container_start_time_seconds{container="coredns",namespace="kube-system",pod="coredns-6d4b75cb6d-qwsln"} 1.658182119e+09 1658182119000
container_start_time_seconds{container="dashboard-metrics-scraper",namespace="kubernetes-dashboard",pod="dashboard-metrics-scraper-6f7988986-b7tb7"} 1.658182117e+09 1658182117000
container_start_time_seconds{container="etcd",namespace="kube-system",pod="etcd-docker-desktop"} 1.658182107e+09 1658182107000
container_start_time_seconds{container="kube-apiserver",namespace="kube-system",pod="kube-apiserver-docker-desktop"} 1.658182107e+09 1658182107000
container_start_time_seconds{container="kube-auto-apply",namespace="default",pod="kube-auto-apply-deployment-b7bb5c779-kwbpd"} 1.658182119e+09 1658182119000
container_start_time_seconds{container="kube-controller-manager",namespace="kube-system",pod="kube-controller-manager-docker-desktop"} 1.658182107e+09 1658182107000
container_start_time_seconds{container="kube-proxy",namespace="kube-system",pod="kube-proxy-v5xf2"} 1.658182114e+09 1658182114000
container_start_time_seconds{container="kube-scheduler",namespace="kube-system",pod="kube-scheduler-docker-desktop"} 1.658182107e+09 1658182107000
container_start_time_seconds{container="kubernetes-dashboard",namespace="kubernetes-dashboard",pod="kubernetes-dashboard-695d4d84bc-tmckq"} 1.658182156e+09 1658182156000
container_start_time_seconds{container="metrics-server",namespace="kube-system",pod="metrics-server-7cd77845cb-bh5d8"} 1.658182155e+09 1658182155000
container_start_time_seconds{container="storage-provisioner",namespace="kube-system",pod="storage-provisioner"} 1.658182155e+09 1658182155000
container_start_time_seconds{container="vpnkit-controller",namespace="kube-system",pod="vpnkit-controller"} 1.658318851e+09 1658318851000
# HELP node_cpu_usage_seconds_total [ALPHA] Cumulative cpu time consumed by the node in core-seconds
# TYPE node_cpu_usage_seconds_total counter
node_cpu_usage_seconds_total 1.6265153072539e+06 1658319258666
# HELP node_memory_working_set_bytes [ALPHA] Current working set of the node in bytes
# TYPE node_memory_working_set_bytes gauge
node_memory_working_set_bytes 5.5968768e+09 1658319258666
# HELP pod_cpu_usage_seconds_total [ALPHA] Cumulative cpu time consumed by the pod in core-seconds
# TYPE pod_cpu_usage_seconds_total counter
pod_cpu_usage_seconds_total{namespace="default",pod="kube-auto-apply-deployment-b7bb5c779-kwbpd"} 295196.7610715 1658319261078
pod_cpu_usage_seconds_total{namespace="kube-system",pod="coredns-6d4b75cb6d-5v4v5"} 1799.1147093 1658319253700
pod_cpu_usage_seconds_total{namespace="kube-system",pod="coredns-6d4b75cb6d-qwsln"} 1802.8771237 1658319259827
pod_cpu_usage_seconds_total{namespace="kube-system",pod="etcd-docker-desktop"} 14766.4972339 1658319263998
pod_cpu_usage_seconds_total{namespace="kube-system",pod="kube-apiserver-docker-desktop"} 6648.9793102 1658319260699
pod_cpu_usage_seconds_total{namespace="kube-system",pod="kube-controller-manager-docker-desktop"} 15917.215784 1658319260646
pod_cpu_usage_seconds_total{namespace="kube-system",pod="kube-proxy-v5xf2"} 227.1655273 1658319267799
pod_cpu_usage_seconds_total{namespace="kube-system",pod="kube-scheduler-docker-desktop"} 3048.8357546 1658319259131
pod_cpu_usage_seconds_total{namespace="kube-system",pod="metrics-server-7cd77845cb-bh5d8"} 345.5192415 1658319268253
pod_cpu_usage_seconds_total{namespace="kube-system",pod="storage-provisioner"} 1402.1659857 1658319267878
pod_cpu_usage_seconds_total{namespace="kube-system",pod="vpnkit-controller"} 346.3235753 1658319257647
pod_cpu_usage_seconds_total{namespace="kubernetes-dashboard",pod="dashboard-metrics-scraper-6f7988986-b7tb7"} 41.6879481 1658319268572
pod_cpu_usage_seconds_total{namespace="kubernetes-dashboard",pod="kubernetes-dashboard-695d4d84bc-tmckq"} 205.0786958 1658319259905
# HELP pod_memory_working_set_bytes [ALPHA] Current working set of the pod in bytes
# TYPE pod_memory_working_set_bytes gauge
pod_memory_working_set_bytes{namespace="default",pod="kube-auto-apply-deployment-b7bb5c779-kwbpd"} 1.4364672e+07 1658319261078
pod_memory_working_set_bytes{namespace="kube-system",pod="coredns-6d4b75cb6d-5v4v5"} 5.9490304e+07 1658319253700
pod_memory_working_set_bytes{namespace="kube-system",pod="coredns-6d4b75cb6d-qwsln"} 3.008512e+07 1658319259827
pod_memory_working_set_bytes{namespace="kube-system",pod="etcd-docker-desktop"} 2.00323072e+08 1658319263998
pod_memory_working_set_bytes{namespace="kube-system",pod="kube-apiserver-docker-desktop"} 3.80112896e+08 1658319260699
pod_memory_working_set_bytes{namespace="kube-system",pod="kube-controller-manager-docker-desktop"} 1.20131584e+08 1658319260646
pod_memory_working_set_bytes{namespace="kube-system",pod="kube-proxy-v5xf2"} 5.5812096e+07 1658319267799
pod_memory_working_set_bytes{namespace="kube-system",pod="kube-scheduler-docker-desktop"} 6.7878912e+07 1658319259131
pod_memory_working_set_bytes{namespace="kube-system",pod="metrics-server-7cd77845cb-bh5d8"} 3.4721792e+07 1658319268253
pod_memory_working_set_bytes{namespace="kube-system",pod="storage-provisioner"} 3.8375424e+07 1658319267878
pod_memory_working_set_bytes{namespace="kube-system",pod="vpnkit-controller"} 2.7590656e+07 1658319257647
pod_memory_working_set_bytes{namespace="kubernetes-dashboard",pod="dashboard-metrics-scraper-6f7988986-b7tb7"} 2.0529152e+07 1658319268572
pod_memory_working_set_bytes{namespace="kubernetes-dashboard",pod="kubernetes-dashboard-695d4d84bc-tmckq"} 3.6909056e+07 1658319259905
# HELP scrape_error [ALPHA] 1 if there was an error while getting container metrics, 0 otherwise
# TYPE scrape_error gauge
scrape_error 0