How can I use metrics-server instead of heapster to see CPU usage in HPA How can I use metrics-server instead of heapster to see CPU usage in HPA kubernetes kubernetes

How can I use metrics-server instead of heapster to see CPU usage in HPA


I had the same issue as you.What helped me is this post.

-remove metrics-server

-change metrics-server/deploy/1.8+/metrics-server-deployment.yaml

-apply again

-or simply

Below more details:

kubectl delete -f metrics-server/deploy/1.8+

Edit metrics-server/deploy/1.8+/metrics-server-deployment.yaml and add next options:

    command:    - /metrics-server    - --kubelet-insecure-tls    - --kubelet-preferred-address-types=InternalIP

metrics-server-deployment.yaml should look like below, or simply copy paste it from here

---apiVersion: v1kind: ServiceAccountmetadata:  name: metrics-server  namespace: kube-system---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: metrics-server  namespace: kube-system  labels:    k8s-app: metrics-serverspec:  selector:    matchLabels:      k8s-app: metrics-server  template:    metadata:      name: metrics-server      labels:        k8s-app: metrics-server    spec:      serviceAccountName: metrics-server      volumes:      # mount in tmp so we can safely use from-scratch images and/or read-only containers      - name: tmp-dir        emptyDir: {}      containers:      - name: metrics-server        image: k8s.gcr.io/metrics-server-amd64:v0.3.1        imagePullPolicy: Always        command:        - /metrics-server        - --kubelet-insecure-tls        - --kubelet-preferred-address-types=InternalIP        volumeMounts:        - name: tmp-dir          mountPath: /tmp

Apply metrics-server files again: kubectl apply -f metrics-server/deploy/1.8+

clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created serviceaccount/metrics-server created deployment.extensions/metrics-server created service/metrics-server created clusterrole.rbac.authorization.k8s.io/system:metrics-server created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

And check result:

kubectl get hpa    NAME               REFERENCE                     TARGETS         MINPODS   MAXPODS   REPLICAS   AGEnginx-deployment   Deployment/nginx-deployment   <unknown>/80%   3         10        10         25kubectl top nodesNAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   kube-master-1   255m         12%    2582Mi          35%       kube-worker-1   124m         6%     2046Mi          27kubectl top podsNAME                                CPU(cores)   MEMORY(bytes)   nginx-deployment-76bf4969df-4bbdc   0m           2Mi             nginx-deployment-76bf4969df-5m6xc   0m           2Mi             nginx-deployment-76bf4969df-b4zh7   0m           2Mi             nginx-deployment-76bf4969df-c58wl   0m           2Mi             nginx-deployment-76bf4969df-cktcg   0m           2Mi             nginx-deployment-76bf4969df-fbjj9   0m           2Mi             nginx-deployment-76bf4969df-gh94w   0m           2Mi             nginx-deployment-76bf4969df-qx6ld   0m           2Mi             nginx-deployment-76bf4969df-rvt54   0m           2Mi             nginx-deployment-76bf4969df-vq9gs   0m           2Mi

Additionally, if you are using autoscaling on a pod based on percent utilization of resources, the pod needs to have a resource limit provided, or else it will be unable to calculate the percentage of resources in use. In the absence of resource limits on the pod spec for a deployment, you will need to set you HPA to scale based on absolute values, with units included. In the case of CPU, you might set it to 300m as a string. In the case of RAM, you might set it to 400Mi, for example. The lack of a resource limit would explain why you don't see a current value for the metric when you run kubectl get hpa under TARGETS.