Prior to Kubernetes 1.6, custom metrics were implemented as a Heapster model. In Kubernetes 1.6, a new custom metrics API landed and matured gradually. As of Kubernetes 1.9, they are enabled by default. Custom metrics rely on API aggregation. The recommended path is to start with the custom metrics API server boilerplate available here:
https://github.com/kubernetes-incubator/custom-metrics-apiserver
Then, you implement the CustomMetricsProvider interface:
type CustomMetricsProvider interface { GetRootScopedMetricByName(groupResource schema.GroupResource, name string, metricName string) (*custom_metrics.MetricValue, error) GetRootScopedMetricBySelector(groupResource schema.GroupResource, selector labels.Selector, metricName string) (*custom_metrics.MetricValueList, error) GetNamespacedMetricByName(groupResource schema.GroupResource, namespace string, name string, metricName string) (*custom_metrics.MetricValue, error) GetNamespacedMetricBySelector(groupResource schema.GroupResource, namespace string, selector labels.Selector, metricName string) (*MetricValueList, error) ListAllMetrics() []MetricInfo }