k8s接入集群外部的prometheus进行监控

prometheus监控k8s集群有两种方式

1. prometheus部署在k8s集群内部,然后通过prometheus的联邦模式接入外部的prometheus

2. prometheus部署在k8s集群外部,但是这种方式需要在集群中部署一个采集的组件:kube-state-metrics。这个用于采集和暴露k8s集群的metrics,它负责监听 K8s apiserver 从而生成metrics数据,指标数据通过 /metrics暴露,然后在外部的prometheus里添加目标即可。

这里演示第二种方式

在k8s master节点部署kube-state-metrics组件

1 . 下载将如下几个文件(https://github.com/kubernetes/kube-state-metrics/tree/main/examples/standard

cluster-role-binding.yaml
cluster-role.yaml
deployment.yaml
service-account.yaml
service.yaml

2.  修改镜像地址(默认镜像地址k8s.gcr.io 在国外。可以找个海外机器拉取下来上传到国内镜像仓库进行拉取,或者连个VPN)

3.  安装kube-state-metrics

kubectl apply -f ./

4. 查看是否安装成功

root@k8s-master-30-61:~/kube-state-metrics#  kubectl  get pods -n kube-system -o wide | grep kube-state-metrics
kube-state-metrics-548546fc89-z98wk        1/1     Running   0                3h13m   10.244.46.113   k8s-node02-30-63              

5. 检查状态  通过 /healthz 健康检查端口查看Pod状态。 

 

这里的IP是无法对外部访问的,可以通过nginx代理对外暴露。这里简单粗暴一点,直接在k8s集群中安装一个nginx。

配置如下:

root@k8s-node02-30-63:/etc/nginx/conf.d# cat /etc/nginx/conf.d/kube-state-metrics.conf 
server {
  listen       8686;
  server_name  192.16.30.63;
  location / {
     proxy_pass  http: //10.244.46.113:8080;  
  }
}

 

访问nginx测试:

 

代理成功。

然后在prometheus中配置

- job_name:  "kube-state"
     metrics_path:  '/metrics'
     static_configs:
       - targets:
         -  "192.16.30.63:8686"

 

在prometheus 的ui中查看状态

 

可以看到已经接入prometheus 

 

posted @ 2023-02-16 13:57  羊脂玉净瓶  阅读(1673)  评论(0)    收藏  举报