IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> prometheus监控k8s集群组件资源(章节四) -> 正文阅读

[系统运维]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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:49:03  更:2021-11-10 12:51:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:30:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码