kube-state-metrics

1、介绍

Kube-state-metrics 是一个Kubernetes组件,它提供了一种将 Kubernetes 集群中各资源状态信息转化为可监控指标的方法,以帮助用户更好地理解和监控集群的健康状态和性能。

在 Kubernetes 集群中,有许多对象(例如 Pod、Deployment、Service 等)以及它们的状态信息(例如副本数、状态、标签等)。Kube-state-metrics 通过监听 Kubernetes API 的变化,实时地获取这些对象的状态信息,并将其指标化。这些指标可以用于监控和告警,帮助运维人员了解集群中各个组件的健康状况、性能指标以及其他重要的状态信息。

Kube-state-metrics 生成的指标可以被 Prometheus 服务器采集,并用于构建仪表板、设置警报规则以及进行集群性能分析。通过将 kube-state-metrics 与 Prometheus 结合使用,您可以更好地了解 Kubernetes 集群的运行情况,并对其进行监控和管理。

2、部署

使用helm部署

$ helm install kube-state-metrics bitnami/kube-state-metrics

查看Pod

$  k get po | grep kube-state-metrics
kube-state-metrics-6dd69d6685-778br          1/1     Running   0              4m12s

3、配置Prometheus

(1)先获取svc的ip

$ k get svc | grep kube-state-metrics
kube-state-metrics           ClusterIP      10.0.219.176   <none>        8080/TCP                                                         49s

(2)测试

$ curl  10.0.219.176:8080/metrics

说明:正常有大量指标回显内容

4、应用配置

这里应用配置主要介绍两种方法:一是静态配置;二是基于consul自动发现。两者的主要区别就是静态配置会单独生成一个静态栏,基于consul自动发现就不会

(1)静态配置

先把Configmap导出为yaml文件:

$ kubectl get cm prometheus-server -o yaml > prometheus_config.yaml

编辑yaml,在scrape_configs: 下面增加如下内容

$ vi prometheus_config.yaml
...
...
      - job_name: 'kube-state-metrics'
        static_configs:
          - targets: ['kube-state-metrics:8080']

...
...

kube-state-metrics-1

应用配置

$ kubectl delete -f prometheus_config.yaml ; kubectl apply -f prometheus_config.yaml

重启Prometheus服务

$ kubectl get po  |grep prometheus-server |awk '{print $1}' |xargs -i  kubectl delete po {}

打开浏览器输入http://192.168.1.31:31093访问Prometheus,到Prometheus页面下查看,已经多出来kube-state-metrics

kube-state-metrics-2

(2)基于consul自动发现

查看consul服务地址

$ k get svc | grep consul-ui
prometheus-consul-ui         ClusterIP      10.0.195.154   <none>        80/TCP                                                           11h

注册

$ curl -X PUT -d '{"id": "kube-state-metrics","name": "kube-state-metrics","address": "10.0.219.176","port": 8080,"tags": ["service"],"checks": [{"http": "http://10.0.219.176:8080/","interval": "5s"}]}' http://10.0.195.154/v1/agent/service/register

打开浏览器输入http://192.168.1.31:31093访问Prometheus,到Prometheus页面下查看,已经consul多出来kube-state-metrics

kube-state-metrics-3

metrics-server

Metrics Server(指标服务器)是一个用于收集、聚合和存储 Kubernetes 集群中的指标数据的组件。它是 Kubernetes 的核心组件之一,用于提供对集群中运行的容器和节点的资源利用率和性能指标的实时监控。

Metrics Server 通过与 Kubernetes API 交互,定期收集指标数据。这些指标包括 CPU 使用率、内存使用率、文件系统使用率、网络流量等。

下面主要介绍安装metrics-server,镜像版本为0.6.3

1、下载yaml文件

$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/high-availability-1.21+.yaml

2、修改YAML文件

$ vi high-availability-1.21+.yaml

将image: k8s.gcr.io/metrics-server/metrics-server:v0.6.3 修改为 image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
在image: 这行上面增加一行: - --kubelet-insecure-tls (这里注意缩进格式,要对齐,前面是空格,千万不要用tab)

metrics-server-1

应用此YAML文件

$ kubectl apply -f high-availability-1.21+.yaml

查看pod

$ kubectl get po -n kube-system | grep metrics-server

metrics-server-6bf7dcd649-v7gqt            1/1     Running   4 (22h ago)   211d

测试

$ kubectl top node

NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master01   143m         0%     1673Mi          21%
k8s-master02   106m         0%     1561Mi          19%
k8s-master03   116m         0%     1518Mi          19%
k8s-node01     79m          0%     1403Mi          17%
k8s-node02     68m          0%     1004Mi          12%

$ kubectl top po

NAME                                         CPU(cores)   MEMORY(bytes)
cluster-test-79b978867f-4x2lw                0m           1Mi
kube-state-metrics-6dd69d6685-778br          1m           30Mi