Metrics Server 是 Kubernetes 集群核心监控数据的聚合器,它定期通过kubelet获取监控数据(1.7版本前通过cAdvisor,后续精简于kubelet),并通过metrics api提供监控数据。
原理
其中,通过kube-aggregator扩展apiserver,把打到apiserver的请求转发给metrics-server,原理如下:
部署
metrics-server启动参数说明:
验证示例
kubectl top node可以查看node的cpu,内存使用情况:
引入metrics-client,通过go代码获取指标,示例:
import (
"fmt"
"context"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
metrics "k8s.io/metrics/pkg/client/clientset/versioned"
)
func main() {
metricClient, err := metrics.NewForConfig(restConfig)
if err != nil {
panic(err)
}
resp, err := metricClient.MetricsV1beta1().NodeMetricses().List(context.Background(), metav1.ListOptions{})
nodesUsed := nodesUsed.Items
for _, node := range nodesUsed {
fmt.Println(node.Name) //节点名称
fmt.Println(node.Usage.Cpu().MilliValue()) // cpu使用量 单位:毫核
fmt.Println(node.Usage.Memory().Value() / (1024 * 1024)) // 内存使用量 单位:MB
}
}