prometheus普罗米修斯集监控外部k8s

   

prometheus监控k8s集群

实现思路

pod性能:
  使用cadvisor进行实现,监控容器的CPU、内存利用率
Node性能:
  使用node-exporter实现,主要监控节点CPU、内存利用率
K8S资源对象:
  使用kube-state-metrics实现,主要用于监控pod、deployment、service

      事情是这样子,公司培训性能测试,讲师讲了容器监控的环节,涉及到jmeter监听器、k8s容器监控、主机监控、jmeter性能测试展示各个工具的展示,心想着我也是搞过k8s的人,是不是也可以搭建下。

       首先是grafana已经搭建了,而且已经集成Prometheus进行主机的监控了,错就错在此处,后面我会再提到这个事情。

       其次,我就开始寻找教程,容器监控目前有三种,cadvsior、metrics-server、kube-state-metrics,

       各种博客也有介绍它们三个的区别,还有一个heapster工具,说是k8s1.16后废弃的功能,可是我目前在是使用的k8s才1.14版本,只能硬着头皮试下了。目前我这个环境的k8s也安装了merics-server、heapster、cadvsior,这三个软件我就没有动了。从grafana模板入手,

1 K8S for Prometheus Dashboard 20211010 dashboard for Grafana | Grafana Labs

从这个模板入手,就看到作者的github教程里说的要安装kube-state-metrics_v1.9.8

特别提示如下问题: 请看三遍、请看三遍、请看三遍!!!!!!

  • 兼容kube-state-metrics_v1.9.x、kube-state-metrics_v2.x
  • 支持Grafana 7.5.11、Grafana 8.x

Grafana7的用户请更新到7.5.11+

(K8S v1.16及以下的版本建议使用kube-state-metrics_v1.9.8)

我刚入手就看到这么几个字,然后下载作者提供的kube-state-metrics部署文件进行安装。

https://github.com/starsliao/Prometheus/tree/master/kubernetes

创建命名空间 ops-minit,把软件部署到这个容器里面。后面的的后面就是暴露这个端口给在外部安装的Prometheus,这里有个疑问就是作者并没有提到他的Prometheus是不是安装到容器内,这个地方跟我的环境不同。

从github issue上留言看到是配置到kube-cadvisor的任务上

https://github.com/starsliao/Prometheus/issues/122

我猜测作者的Prometheus是安装在k8s内的,注意看配置Prometheus的配置

注意:Prometheus需要能采集到cadvisorkube-state-metrics的指标。

Prometheus job配置参考(kube-state-metrics部署在ops-monit命名空间):

- job_name: 'k8s-cadvisor'
    metrics_path: /metrics/cadvisor
    kubernetes_sd_configs:
    - role: node
    relabel_configs:
    - source_labels: [__address__]
      regex: '(.*):10250'
      replacement: '${1}:10255'
      target_label: __address__
      action: replace
    - action: labelmap
      regex: __meta_kubernetes_node_label_(.+)

    metric_relabel_configs:
    - source_labels: [instance]
      separator: ;
      regex: (.+)
      target_label: node
      replacement: $1
      action: replace

    - source_labels: [pod_name]
      separator: ;
      regex: (.+)
      target_label: pod
      replacement: $1
      action: replace
    - source_labels: [container_name]
      separator: ;
      regex: (.+)
      target_label: container
      replacement: $1
      action: replace

  - job_name: kube-state-metrics
    kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names:
        - ops-monit
    relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]
      regex: kube-state-metrics
      replacement: $1
      action: keep
    - action: labelmap
      regex: __meta_kubernetes_service_label_(.+)
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: k8s_namespace
    - source_labels: [__meta_kubernetes_service_name]
      action: replace
      target_label: k8s_sname

这个配置我不能用,因为我的prometheus是独立安装的,获取不到k8s的信息。

然后我找到了这个文章

Kubernetes云原生监控之kube-state-metrics集群资源监控 - 大军军军之技术落地 - 博客园

文章提到了:

由于 Kube State Metrics 组件需要通过与 kube-apiserver 连接,并调用相应的接口去获取 kubernetes 集群数据,这个过程需要 Kube State Metrics 组件拥有一定的权限才能成功执行这些操作。在 Kubernetes 中默认使用 RBAC 方式管理权限。所以,我们需要创建相应的 RBAC 资源来提供该组件使用。

Prometheus 接入

kube-state-metrics创建的svc是ClusterIP类型,默认只能被集群内部访问。

如果 prometheus部署在外部就需要配置认证。

cat prometheus.yml

  - job_name: "kube-state-metrics"
    scheme: http
    kubernetes_sd_configs:
    - api_server: https://k8sapi的ip:6443/
      role: endpoints
      ## 指定kube-state-metrics组件所在的Namespace名称
      namespaces:
        names: ["kube-system"]
        ## names: ["monitoring"]
      bearer_token_file: /data/k8s_token #访问k8s集群的认证文件
      tls_config:
        insecure_skip_verify: true
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /data/k8s_token
    relabel_configs:
    ## 指定从 app.kubernetes.io/name 标签等于 kube-state-metrics 的 service 服务获取指标信息
    - action: keep
      source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]
      regex: kube-state-metrics
    ## 下面配置也是为了适配 Grafana Dashboard 模板(编号13105图表)
    - action: labelmap
      regex: __meta_kubernetes_service_label_(.+)
    - action: replace
      source_labels: [__meta_kubernetes_namespace]
      target_label: kubernetes_namespace
    - action: replace
      source_labels: [__meta_kubernetes_service_name]
      target_label: kubernetes_service_name

获取api用户的token后保存文件,重新配置了Prometheus的配置。

获取token步骤:

获取密匙
$ kubectl get sa kube-state-metrics -n ops-monit  -o yaml

$ kubectl get sa prometheus -n kube-mon -o yaml
......
secrets:
- name: prometheus-token-wj7fb

$ kubectl describe secret prometheus-token-wj7fb -n kube-mon
Name:         prometheus-token-wj7fb
Namespace:    kube-mon
......

Data
====
namespace:  8 bytes
token:      <token string>
ca.crt:     1025 bytes

下面附上我的Prometheus配置:

- job_name: "kube-state-metrics"
    scheme: https
    kubernetes_sd_configs:
    - api_server: https://k8s-api的ip:6443/
      role: endpoints
      namespaces:
        names: ["ops-monit"]
      bearer_token_file: k8s.token
      tls_config:
        insecure_skip_verify: true
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: k8s.token
    relabel_configs:
    - action: keep
      source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]
      regex: kube-state-metrics
    - action: labelmap
      regex: __meta_kubernetes_service_label_(.+)
    - action: replace
      source_labels: [__meta_kubernetes_namespace]
      target_label: kubernetes_namespace
    - action: replace
      source_labels: [__meta_kubernetes_service_name]
      target_label: kubernetes_service_name
	  
	 

		
	- job_name: k8s-cadvisor
	  honor_timestamps: true
	  metrics_path: /metrics
	  scheme: https
	  kubernetes_sd_configs:
	  - api_server: https:///k8s-api的ip:6443/
		role: node  # node 类型的自动发现
		bearer_token_file: k8s.token
		tls_config:
		  insecure_skip_verify: true
	  bearer_token_file: k8s.token
	  tls_config:
		insecure_skip_verify: true
	  relabel_configs:
	  - action: labelmap
		regex: __meta_kubernetes_node_label_(.+)
	  - separator: ;
		regex: (.*)
		target_label: __address__
		replacement: k8s-api的ip:6443
		action: replace
	  - source_labels: [__meta_kubernetes_node_name]
		separator: ;
		regex: (.+)
		target_label: __metrics_path__
		replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
		action: replace

       最后配置Prometheus后,grafana的监控看板还是没有出来数据。再回到开头提到的问题,怀疑是grafana的版本问题,然后找了台机器重新安装grafana7.5.11。安装步骤参考如下教程:

grafana 安装配置详解_康建华的技术博客_51CTO博客

       安装grafana7.5.11后重新导入模板,看板的数据立马出来了,至此我们也搭建好容器的监控,然后跑一个性能压测的脚本试下。性能压力测试截图如下:

     总结以上问题:

1.先入为主的错误想法,grafana的版本问题太低,没有重新安装最新版本的grafana

2.Prometheus的独立安装配置抓取的方法,需要使用k8s的api-server接口

3.重新安装grafana导入模板,监控数据就出来。

       遗留问题

1.Prometheus容器内安装的实践、配置

2.Prometheus使用k8s-api接口对k8s性能有没有影响

    权威文档还是在官网github、博客园等社区找。高质量的文档还是很少,需要查阅大量文档才能实践成功。

   

参考引用:

1 K8S for Prometheus Dashboard 20211010 dashboard for Grafana | Grafana Labs

grafana 安装配置详解_康建华的技术博客_51CTO博客

Kubernetes云原生监控之kube-state-metrics集群资源监控 - 大军军军之技术落地 - 博客园

   知其然,知其所以然,刨根问底!!

留个问题:kubernetes_sd_configs是个什么配置

参考其他完整安装的监控步骤:

prometheus监控k8s集群_fengge55的博客-CSDN博客_prometheus监控k8s容器

Prometheus部署 - Prometheus 入门到实战

吐槽下csdn的问题:

csdn博客编辑没有定时备份的bug,导致这个博客重写编写了一遍,可恶!!!          

编辑博客的封面摘要,这些是跟微信公众号后台编辑学的吗?无脑的抄袭,垃圾的产品经理!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
罗米修斯(Prometheus)是一种用于监控和警报的开源系统,它在Kubernetes集群中被广泛采用。\[1\]与其他监控工具相比,Prometheus具有高效和便捷的配置,能够方便地识别Kubernetes中的相关指标,并实现指标的采集和监控告警。\[2\] 在监控Kubernetes集群的过程中,通常会使用以下组件和工具: - Metric Server:用于收集数据并提供给Kubernetes集群内部使用,例如kubectl、HPA(Horizontal Pod Autoscaler)、Scheduler等。 - Prometheus Operator:用于部署和管理Prometheus,存储监控数据。 - Kube-state-metrics:用于收集Kubernetes集群内资源对象的数据。 - Node Exporter:用于收集集群中各节点的数据。 - Prometheus:用于收集Apiserver、Scheduler、Controller-manager、Kubelet等组件的数据。 - Alertmanager:用于实现监控报警功能。 - Grafana:用于实现监控数据的可视化。\[3\] 通过使用这些组件和工具,可以实现对Kubernetes集群的全面监控和警报,并通过Grafana进行数据可视化,方便用户进行监控数据的查看和分析。 #### 引用[.reference_title] - *1* [k8s部署-52-k8s之Prometheus罗米修斯)监控,简单梳理下K8S监控流程](https://blog.csdn.net/ouyangzhenxin/article/details/124597533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Kubernetes容器集群管理环境 - Prometheus监控篇](https://blog.csdn.net/weixin_30371469/article/details/98925601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值