prometheus学习笔记之kube-state-metrics

一、kube-state-metrics简介

Kube-state-metrics:通过监听 API Server 生成有关资源对象的状态指标,比如 Deployment、Node、Pod,需要注意的是 kube-state-metrics 只是简单的提供一个 metrics 数据, 并不会存储这些指标数据, 所以我
们可以使用 Prometheus 来抓取这些数据然后存储, 主要关注的是业务相关的一些元数据, 比如Deployment、 Pod、 副本状态等, 调度了多少个 replicas? 现在可用的有几个? 多少个 Pod 是
running/stopped/terminated 状态? Pod 重启了多少次? 目前有多少 job 在运行中。

参考文档:https://github.com/kubernetes/kube-state-metrics
镜像下载地址:https://hub.docker.com/r/bitnami/kube-state-metrics
资源指标参考:https://github.com/kubernetes/kube-state-metrics/tree/main/docs #每个资源点击进入会看到具体的指标

二、部署kube-state-metrics

1.部署yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-state-metrics
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-state-metrics
  template:
    metadata:
      labels:
        app: kube-state-metrics
    spec:
      serviceAccountName: monitor #之前给prometheus使用的sa,也可以单独创建
      containers:
      - name: kube-state-metrics
        image: registry-vpc.cn-shanghai.aliyuncs.com/zdbl-base/kube-state-metrics:2.11.0 #原镜像仓库地址 bitnami/kube-state-metrics,注意KSM的版本需要与K8S版本对应,具体对应关系查看官方文档
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  name: kube-state-metrics
  namespace: monitoring
  labels:
    app: kube-state-metrics
spec:
  type: NodePort
  ports:
  - name: kube-state-metrics
    port: 8080
    targetPort: 8080
    nodePort: 31666
    protocol: TCP
  selector:
    app: kube-state-metrics


kubectl apply -f kube-state-metrics.yaml
kubectl get pods -n monitoring

2.验证服务是否正常

三、配置prometheus抓取kube-metrics数据

1.prometheus配置

  - job_name: "monitor-for_kube-metrics"  #新增一个job,抓取kube-metrics svc nodePort端口
    metric_relabel_configs:
    static_configs:
      - targets: ["192.168.100.131:31666"]

curl -X POST http://127.0.0.1:9090/-/reload #重载配置文件

2.验证抓取配置

四、配置grafana数据展示

对于kube-state-metrics场景的模板有三个,ID分别为 13332 13824 14518,这样以13332为示例演示,因为这个配置是有个特殊配置需要知道

1.输入ID导入模板

配置选项这个模板最下面多了一个数据源的配置,需要手动修改与上面的保持一致

效果图如下

五、常用指标

1.节点指标

1.cpu
    kube_node_status_capacity_cpu_cores                                   #节点总cpu核数
    sum(kube_pod_container_resource_requests_cpu_cores{}) by (node)       #节点上pod cpu请求核数
    sum(kube_pod_container_resource_limits_cpu_cores{}) by (node)          #节点上pod cpu限制核数
    sum (rate (container_cpu_usage_seconds_total{id="/"}[2m]))by (node)   #节点上容器cpu使用核数 id="/"代表所有的有的容器和
    #节点上pod cpu请求百分比
    100*sum(kube_pod_container_resource_requests_cpu_cores{})by (node)/sum(kube_node_status_allocatable_cpu_cores{})by (node)
    #节点上pod cpu限制百分比
    100 * sum(kube_pod_container_resource_limits_cpu_cores)by (node)2/ sum(kube_node_status_allocatable_cpu_cores)by (node)
    #节点上容器cpu使用百分比
    100 *sum (rate (container_cpu_usage_seconds_total{id="/"}[2m]))by (node)/sum (kube_node_status_capacity_cpu_cores)by (node)

2.内存 kube_node_status_allocatable_memory_bytes #节点总内存大小 sum(kube_pod_container_resource_requests_memory_bytes() by (node) #节点上pod mem请求大小 sum(kube_pod_container_resource_limits_memory_bytes() by (node) #节点上pod mem限制大小 sum( container_memory_working_set_bytes) by (node) #节点上pod mem使用大小 #节点上pod mem请求百分比
100* sum(kube_pod_container_resource_requests_memory_bytesi}) by (node)/sum(kube_node_status_allocatable_memory_bytes) by(node) kube_node_status_allocatable_pods #节点上可分配pod总数
3.文件系统 sum (container_fs_limit_bytes{device
=~"/dev/.*$" ,id="/"}) by (node) #节点磁盘总量 sum (container_fs_usage_bytes{device=~"^/dev/.*$",id="/"}) by (node) #节点磁盘使用总量 #磁盘使用率 100 *sum (container_fs_usage_bytes{device=~"^/dev/.*$",id="/")) by (node)/sum (container_fs_usage_bytes{device=~"^/dev/.*$" , id="/")) by (node)
4.节点 kube_node_status_condition #磁盘、内存或CPU资源短缺的节点 kube_node_status_allocatable_cpu_cores 节点可以分配cpu核数 kube_node_status_allocatable_memory_bytes 节点可以分配内存总量(单位:字节) kube_node_spec_taint 节点污点情况 kube_node_status_capacity_memory_bytes 节点内存总量(单位:字节) kube_node_status_capacity_cpu_cores 节点CPU核数 kube_node_status_capacity_pods 节点可运行的pod总数

2.pod指标

1.pod状态
    sum(kube_pod_status_phase{phase="Running"}) #运行的pod
    sum(kube_pod_status_phase{ phase="Pending"}) #pending的pod
    sum( kube_pod_status_phase{ phase="Failed"}) #Failed的pod
    kube_pod _container_status_restarts_total  #pod中的容器重启次数
    kube_pod_container_resource_requests_cpu_cores   #pod容器cpu limit
    kube_pod_container_resource_requests_memory_bytes  #pod容器mem limit(单位:字节)

2.容器状态 sum(kube_pod_container_status_running{}) #Running的容器 kube_pod_container_status_waiting
==1 #pod处于waiting状态原因 kube_pod_container_status_terminated==1 #pod处于terminated状态原因 delta(kube_pod_container_status_terminated[1m])>0 #最近重启过的容器
3.NS资源 count(kube_pod_info{})by (
namespace) #pod数 count(kube_pod_container_info{})by (namespace) #容器数 count(kube_service_info{})by (namespace) #svc数 count(kube_service_info)by (namespace) #svc数 count(kube_secret_info{})by (namespace) #secret数 count(kube_configmap_info{}) by (namespace) #configmap数
4.deployment kube_deployment_status_replicas #dep中的pod num kube_deployment_status_replicas_available #dep中的可用pod num kube_deployment_status_replicas_unavailable #dep中的不可用pod num
5.daemonSet kube_daemonset_status_number_availableI #ds可用数 kube_daemonset_status_number_unavailable #ds不可用数 kube_daemonset_status_number_ready #ds ready数 kube_daemonset_status_number_misscheduled #未经过调度运行ds的节点数 kube_daemonset_status_current_number_scheduled #ds目前运行节点数 kube_daemonset_status_desired_number_scheduled #应该运行ds的节点数
6.statefulSet kube_statefulset_status_replicas #ss副本总数 kube_statefulset_status_replicas_current #ss当前副本数 kube_statefulset_status_replicas_updated #ss已更新副本数 kube_statefulset_replicas #ss目标副本数
7.job kube_job_status_active #job running pod数 kube_job_status_succeeded #job成功pod数 kube_job_status_failed #job 失败pod数 kube_job_complete #job是否完成 kube_job_complete #job是否完成 kube_job_failed #job是否失败
8.crontjob kube_cronjob_status_active #job running pod数 kube_cronjob_spec_suspend #
=1代表job被挂起 kube_cronjob_next_schedule_time #job下次调度时间 kube_cronjob_status_last_schedule_time #job 下次调度时间
9.pv
/pvc kube_persistentvolume_capacity_bytes gauge #pv申请大小 kube_persistentvolume_status_phase #pv状态:Pending Available Bound Released Failed kube_persistentvolumeclaim_resource_requests_storage_bytes #pvc request大小 kube_persistentvolumeclaim_status_phase #pvc状态:Lost Bound Pending

 

posted @ 2024-09-07 15:14  百衲本  阅读(325)  评论(0编辑  收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码