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