prometheus监控k8s集群组件资源(章节四)

前言

前面我们已经学习到了prometheus的服务发现了,我们也基于kubernetes_sd_config对集群的node节点进行发现与监控了。那个是针对node_export指标数据监控节点自身资源使用情况的。但是并没有针对K8s组件,资源对象等做监控,例如kubelet,apiserver,pod,service,ingress等等。我们此次主要继续使用kubernetes_sd_config对K8s集群的资源进行监控。


一、监控kubelet

kubelet自带了监控数据的,而且是内置支持prometheus的,在Kubernetes 1.11+ 版本以后,kubelet的默认metrics接口端口是10250。此端口只能通过https协议去访问。因此我们使用kubernetes_sd_config进行监控时,协议需要选择为https,并且挂载证书文件。(由于我们前面在创建prometheus时创建了ServiceAccount资源对象,因此API的凭证会自动挂载到prometheus的pods中)

[root@k8s-master ~]#  netstat -lntup | grep 10250
tcp6       0      0 :::10250                :::*                    LISTEN      23423/kubelet
[root@k8s-master ~]# vim prometh_configmap.yaml
  - job_name: 'k8s-kubelet(服务发现)'
    kubernetes_sd_configs:
    - role: node
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

scheme:指定为https协议
tls_config:配置 TLS 连接
ca_file:用于验证 API 服务器证书的 CA 证书。
insecure_skip_verify:禁用服务器证书的验证。
bearer_token_file:用于验证 API 服务器的令牌

[root@k8s-master ~]# kubectl apply -f  prometh_configmap.yaml
[root@k8s-master ~]# curl -X POST http://10.244.219.114:9090/-/reload	#热加载配置文件

访问Web UI查看Targets
在这里插入图片描述

可以看到,kubelet组件的状态及相关指标监控数据已经采集上了。例如我们可以在grup界面查看当前K8s集群每一个节点运行了多少个Pod(kubelet_running_pods)
在这里插入图片描述


二、监控Pods

我们使用prometheus对K8s的pod资源进行监控时,可以借助cAdvisor进行。cAdvisor是内置在kubelet中,负责对当前的节点实时进行性能的监控与采集,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。cAdvisor的指标数据接口是/metrics/cadvisor。具体可查看官方文档:https://kubernetes.io/zh/docs/concepts/cluster-administration/system-metrics/
在这里插入图片描述

[root@k8s-master ~]# vim prometh_configmap.yaml
  - job_name: 'k8s-cAdvisor(服务发现)'
    kubernetes_sd_configs:
    - role: node
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    metrics_path: /metrics/cadvisor
[root@k8s-master ~]# kubectl apply -f  prometh_configmap.yaml
[root@k8s-master ~]# curl -X POST http://10.244.219.114:9090/-/reload	#热加载配置文件

查看Targets:
在这里插入图片描述

我们在上面可以看到,cAdvisor的服务发现是监控上了,但是数据有什么呢。关于pod的指标数据都有什么呢?cAdvisor服务发现的指标名称都是container开始的。例如我们计算monitor命名空间下所有pod的CPU在5分钟内的平均使用率
avg by (pod) (irate(container_cpu_usage_seconds_total{image!="", pod!="", namespace=“monitor”}[5m]))

在这里插入图片描述
在这里插入图片描述


三、监控kube-apiserver

K8s的apiserver组件是整个集群的唯一入口,所有人访问资源,创建资源,管理资源都是从apiserver进来的。因此我们需要把apiserver也监控上了。prometheus监控apiserver的话,可以使用kubernetes_sd_config中的Endpoints发现模式。那么为什么apiserver可以使用Endpoints发现模式,由于apiserver是集群的统一入口,在集群内部的一些服务和资源对象需要访问apiserver的话,就得与之进行网络通信,因此kubernetes默认会在defalue命名空间下创建一个名为kubernetes的Service资源对象。而Service资源对象又是通过Endpoints去进行管理与转发的。我们可以查看一下

[root@k8s-master ~]# kubectl get svc,ep
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   70d

NAME                   ENDPOINTS          AGE
endpoints/kubernetes   172.16.1.37:6443   70d
[root@k8s-master ~]# vim prometh_configmap.yaml
  - job_name: 'k8s-apiserver'
    kubernetes_sd_configs:
    - role: endpoints
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_endpoints_name, __meta_kubernetes_endpoint_port_name]
      regex: default;kubernetes;https
      action: keep

[root@k8s-master ~]# kubectl apply -f prometh_configmap.yaml
[root@k8s-master ~]# curl -X POST http://10.244.219.114:9090/-/reload #热加载配置文件

查看Target界面
在这里插入图片描述

可以看到apiserver也已经监控上了。我们可以尝试获取一下apiserver最近一分钟里处理了多少请求。

sum (irate(apiserver_request_duration_seconds_count[1m]))
在这里插入图片描述

到这里我们就完成了对 Kubernetes ApiServer 的监控了。
如果我们还需要监控其他系统组件,比如 kube-controller-manager、kube-scheduler 的话应该怎么做呢?其中 kube-sheduler 的指标数据端口为 10251,kube-controller-manager 对应的端口为 10252,大家可以尝试下自己来配置下这几个系统组件。可以在节点使用netstat命令查看一下这些端口有没有在监听,因为Master节点的组件大部分都是静态pod来的。有兴趣的朋友可以查看我的github项目第四章,里面有对应的yaml文件。https://github.com/shaxiaozz/prometheus

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值