# Error: failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API

- **ID:** `kubernetes/hpa-missing-metrics-server`
- **Domain:** kubernetes
- **Category:** resource_error
- **Verification:** ai_generated
- **Fix Rate:** 85%

## Root Cause

Horizontal Pod Autoscaler (HPA) cannot query CPU/metrics because the metrics-server is not deployed or is not functioning correctly.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| metrics-server v0.6.4 | active | — | — |
| Kubernetes v1.28.3 | active | — | — |
| Kubernetes v1.29.0 | active | — | — |

## Workarounds

1. **Deploy metrics-server using the official manifest: `kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml`** (85% success)
   ```
   Deploy metrics-server using the official manifest: `kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml`
   ```
2. **Check metrics-server pod logs: `kubectl logs -n kube-system deployment/metrics-server` and verify it can connect to kubelets. Common fix: add --kubelet-insecure-tls flag if using self-signed certs.** (80% success)
   ```
   Check metrics-server pod logs: `kubectl logs -n kube-system deployment/metrics-server` and verify it can connect to kubelets. Common fix: add --kubelet-insecure-tls flag if using self-signed certs.
   ```

## Dead Ends

- **Install a custom Prometheus adapter instead of metrics-server** — HPA requires the resource metrics API, which is typically served by metrics-server. Prometheus adapter serves custom metrics, not resource metrics. (70% fail)
- **Set --horizontal-pod-autoscaler-use-rest-clients=false on kube-controller-manager** — This flag is deprecated and removed in recent Kubernetes versions (1.23+). It no longer affects HPA behavior. (90% fail)
