Why do kubectl top and DigitalOcean Control Panel show different metrics values for worker nodes?

The performance metrics displayed in the DigitalOcean Control Panel are calculated using all anonymous (non-file backed) memory since DigitalOcean Kubernetes does not support the use of swap memory. Because the host OS cannot always reclaim cached (file-backed) memory, the metrics typically also include such pages.

The output of the kubectl top command does not measure the entire system load in the same way the control panel does. It only sums up all use of containers on that host but there may be processes on a host outside of the cgroups hierarchy, which can cause the output to be different from the control panel. The Metrics Server itself doesn’t calculate any metrics, it aggregates values exposed by kubelet and exposes them in the API to be used for autoscaling.

kubectl top is for exporting metrics from resource metrics pipeline and is not meant to be an accurate tool that would replace monitoring solutions or running top on node.