Kube-state-metrics 可观测性最佳实践

Kube-state-metrics 介绍

Kube-state-metrics 是 Kubernetes 生态系统中的一个开源项目,主要用来收集和报告集群中各种资源的实时状态信息。

工作原理

  • Kube-state-metrics 连接到 Kubernetes API 服务器,并公开一个 HTTP 端点,提供集群中各个对象的状态所生成的指标。
  • 它使用 client-go 库与 Kubernetes API 服务器通信,监听资源的增、删、改事件,并从中提取出有用的度量数据。

应用场景

  • 异常检测:通过监控 Pod 状态、Node 状态等指标,及时发现和解决潜在问题。
  • 性能优化:监控 Deployment 副本数、CPU/内存使用情况等指标,对集群性能进行优化。
  • 安全审计:监控容器网络流量、文件系统使用情况等指标,发现异常行为,及时识别安全风险。

部署 Kube-state-metrics

提示:若环境已存在,请忽略

安装 Helm (此处为在线安装方式)

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

安装 kube-promethues

kube-promethues 安装包采用了 Bitnami 的Helm chart 方案,包括组件 Node-Exporter、Kube-state-metrics、Blackbox-Exporter、Promethues组件等,安装比较方便,Bitnami 官方地址:charts/bitnami/kube-prometheus at main · bitnami/charts · GitHub

通过社区获取最新版本 Chart 包

helm pull oci://registry-1.docker.io/bitnamicharts/kube-prometheus

Values 文件配置说明

tar xf kube-prometheus-9.6.3.tgz
vim kube-prometheus/values.yaml
global:
  # 修改为私有仓库项目地址 
  imageRegistry: ""
  ## E.g.
  ## imagePullSecrets:
  ##   - myRegistryKeySecretName
  ##
  # 此处 修改为私有仓库密钥的secret 名称
  imagePullSecrets: []
  
  # 此处df-nfs-storage 修改为集群内可用的 storageClass
  defaultstorageClass: "df-nfs-storage"
  # 此处df-nfs-storage 修改为集群内可用的 storageClass
  storageClass: "df-nfs-storage"
  ## Compatibility adaptations for Kubernetes platforms
  ##
  compatibility:
    ## Compatibility adaptations for Openshift
    ##
    openshift:
      ## @param global.compatibility.openshift.adaptSecurityContext Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation)
      ##
      adaptSecurityContext: auto
## @section Common parameters
....

执行部署

  • 在安装 Chart 包 时,部署的 namespace需要与 datakit 采集器 配置的namespace 保持一致
  • 如此处为: namespaces = ["datakit"]

执行以下命令进行部署

cd kube-prometheus

helm upgrade -i -n datakit --create-namespace  datakit . 

部署完成效果,可以查看到已部署的 kube-state-metrics 组件

kubectl get pod -n  datakit

NAME                                                            READY   STATUS    RESTARTS      AGE
kube-promethues-kube-prome-blackbox-exporter-56cf84fbc4-hfr9k   1/1     Running   0             9d
kube-promethues-kube-prome-operator-7fcc5c6987-7bqzp            1/1     Running   0             9d
kube-promethues-kube-state-metrics-769859db74-xf24c             1/1     Running   0             9d
kube-promethues-node-exporter-j6ssj                             1/1     Running   0             9d
prometheus-kube-promethues-kube-prome-prometheus-0              2/2     Running   0             6h41m

观测云

观测云是一款功能强大的统一可观测平台,它提供了对多云环境、云原生应用、中间件以及各类应用程序的实时监控和分析能力。部署在 Kubernetes 集群中的 kube-state-metrics 会暴露一个 metrics 端点,DataKit 通过这个端点拉取指标数据。DataKit 通过 ConfigMap 挂载额外的配置文件,或者通过环境变量直接在 Kubernetes 的 DaemonSet 配置中设置。这样,DataKit 就可以根据用户的配置,定期从 kube-state-metrics 收集指标数据,并将其发送到观测云平台。

下面介绍在 K8S 集群部署 kube-state-metrics 组件,采集集群资源指标并通过 DataKit 进行收集、存储,最后通过观测云用于数据的可视化展示。

部署 DataKit

登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml,拷贝第 3 步中的 token。

编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,把 datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令:

kubectl apply -f datakit.yaml
kubectl get pod -n datakit

在 datakit.yaml 中配置 ConfigMap 资源来收集 kube-state-metrics 的指标数据。

apiVersion: v1
kind: ConfigMap
metadata:
  name: datakit-conf
  namespace: datakit
data:
    kubernetesprometheus.conf: |-
      [inputs.kubernetesprometheus]
        
        [[inputs.kubernetesprometheus.instances]]
          role       = "service"
          namespaces = ["datakit"]
          selector   = "app.kubernetes.io/name=kube-state-metrics"

          scrape     = "true"
          scheme     = "http"
          port       = "__kubernetes_service_port_http_port"
          path       = "/metrics"
          params     = ""
          interval   = "15s"

          [inputs.kubernetesprometheus.instances.custom]
            measurement        = "kube-state-metrics"
            job_as_measurement = true
            [inputs.kubernetesprometheus.instances.custom.tags]
              cluster_name_k8s       = "promethues-cluster"
              job           = "kube-state-metrics"
              svc_name      = "__kubernetes_service_name"
              pod_name      = "__kubernetes_service_target_name"
              pod_namespace = "__kubernetes_service_target_namespace"
          [inputs.kubernetesprometheus.instances.auth]
            bearer_token_file      = "/var/run/secrets/kubernetes.io/serviceaccount/token"
            [inputs.kubernetesprometheus.instances.auth.tls_config]
              insecure_skip_verify = true
              cert     = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"

然后在 datakit.yaml 中的 volumeMounts 下挂载 kubernetesprometheus.conf 。

- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
  name: datakit-conf
  subPath: kubernetesprometheus.conf
  readOnly: true

最后,执行以下命令重启 datakit 。

kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml

关键指标

登录观测云控制台,点击「指标」 -「指标管理」,输入“kube-state-metrics”,就能查询采集到的指标。

监控 kube-state-metrics 采集的主机指标时,主要需要从以下维度进行,通过综合监控这些维度,可以确保主机的主要指标项:

  • Kube-state-metrics 通过监听 Kubernetes API 服务器生成有关资源对象的状态指标,例如 Deployment、Node、Pod 等。
  • 它提供了包括 CronJob、DaemonSet、Deployment、Job 等多种 Kubernetes 资源的指标。
  • 这些指标包括对象的状态、标签、注解、启动和终止时间等信息。

以下是 Kube-state-metrics 采集主机指标的关键指标目录:

指标名称指标含义
kube_pod_infoPod信息,用于计算特定节点上实际运行的Pod数量
kube_node_status_allocatable节点可分配资源情况,包括CPU、内存和Pods
kube_pod_container_resource_requestsPod容器资源请求量,包括CPU和内存
kube_node_status_capacity节点的总资源容量,包括CPU和内存
kube_deployment_status_replicasDeployment的期望副本数
kube_deployment_status_replicas_updatedDeployment更新后的副本数
kube_deployment_status_replicas_unavailableDeployment不可用的副本数
kube_statefulset_status_replicas_readyStatefulSet就绪的副本数
kube_statefulset_status_replicasStatefulSet的总副本数
kube_pod_status_phasePod的状态,包括Running、Succeeded、Failed、Pending、Unknown
kube_pod_container_status_running正在运行的容器数量
kube_pod_container_status_waiting处于等待状态的容器数量
kube_pod_container_status_terminated已终止的容器数量
kube_pod_container_status_restarts_total容器重启次数
kube_hpa_status_current_replicasHPA当前的副本数
kube_hpa_spec_max_replicasHPA配置的最大副本数
kube_hpa_spec_min_replicasHPA配置的最小副本数
kube_job_status_succeeded成功完成的Job数量
kube_job_status_active活跃的Job数量
kube_job_status_failed失败的Job数量
kube_persistentvolumeclaim_status_phasePVC的状态,包括Bound和非Bound状态

这些指标覆盖了 Kubernetes 集群中的多个重要方面,包括 Pod、节点、Deployment、StatefulSet、HPA、Job 和 PVC 等资源的监控,帮助用户全面了解集群的运行状态和性能。

监控视图

基于关键指标定义的视图如下:

监控器

监控器主要包如下:

Pod 状态异常告警

  • 指标名称:kube_pod_status_phase
  • 告警规则:当 Pod 状态长时间处于 Pending、Failed 或 Unknown 时触发告警。

Pod 频繁重启告警

  • 指标名称:kube_pod_container_status_restarts_total
  • 告警规则:当容器在一定时间内重启次数超过阈值时触发告警。

PVC 状态异常告警

  • 指标名称:kube_persistentvolumeclaim_status_phase
  • 告警规则:当 PVC 长时间处于非 Bound 状态时触发告警。

Daemonset Miss Scheduled Exception 告警

  • 指标名称: kube_daemonset_status_number_misscheduled
  • 告警规则:这个指标直接提供了未正确调度的 DaemonSet Pod 的数量,可设置告警

Deployment 副本数异常告警

  • 指标名称:kube_deployment_status_replicas , kube_deployment_status_replicas_unavailable
  • 告警规则:当 Deployment 的实际副本数与期望副本数不一致,或者不可用的副本数超过阈值时触发告警。

StatefulSet 副本就绪异常告警

  • 指标名称:kube_statefulset_status_replicas_ready , kube_statefulset_status_replicas
  • 告警规则:当 StatefulSet 就绪的副本数与总副本数不一致时触发告警。

总结

Kube-state-metrics 通过提供实时状态数据,通过观测云 Kubernetes Prometheus Discovery 方式帮助监控 Kubernetes 集群性能和资源使用情况,这对于快速发现和解决集群问题、优化资源分配和提高集群可靠性非常关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pycharm配置Python开发环境

Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息,匹配到对应的类// 注意:// 1 匹配的时候,case class的属性个数要对上// 2 属性名不需…

PyQt5学习笔记

P95 绝对布局 绝对布局,使用move方法,操作坐标来控件控件的位置。 import sys from PyQt5.QtWidgets import *绝对布局,使用move方法,操作坐标来控件控件的位置。class MyWin(QWidget):def __init__(self):super().__init__()#…

Python3.13安装和配置

Python3.13安装和配置 一、Python的下载 点击下面的下载链接,下载需要的版本。以3.13版本为例。如下图所示: 3.13.0下载地址(windows)3.13.0下载地址(windows) 二、安装 下载完成后,双击安装文件。 <

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程&#xff1f;僵死进程的产生原因如何识别僵死进程&#xff1f;如何清理僵死进程&#xff1f;僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中&#xff0c;进程管理是一个非常重要的主题&#x…

win11 C盘出现感叹号解决方法

出现感叹号&#xff0c;原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号&#xff0c;对C盘进行BitLocker解密即可。 步骤如下&#xff1a; 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车&#xff0c;进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

多个Echart遍历生成 / 词图云

echart官网 安装 如果版本报错推荐安装以下版本 npm install echarts4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:多个Echart遍历生成 vue3echart单个页面多个图表循环渲染展示:<template><div class"main"><div …

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

最近刚进行 Vue3 Element plus 项目实践&#xff0c;在进行表单二次封装的时候&#xff0c;表单元素 select 下拉框组件选中一个选项后显示的是 value 而不是 label&#xff0c;下面上代码&#xff1a; 原来的写法&#xff1a; <el-selectv-if"v.type select"…

中小学教室多媒体电脑安全登录解决方案

中小学教室多媒体电脑面临学生随意登录的问题&#xff0c;主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析&#xff1a; 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用&#xff0c;增加设备损坏的风险。不当…

Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Gitlab 数据备份全攻略:命令、方法与注意事项

文章目录 1、备份命令2、备份目录名称说明3、手工备份配置文件3.1 备份配置文件3.2 备份ssh文件 4、备份注意事项4.1 停止puma和sicdekiq组件4.2 copy策略需要更多磁盘空间 5、数据备份方法5.1 docker命令备份5.2 kubectl命令备份5.3 参数说明5.4、选择性备份5.5、非tar备份5.6…

设计模式12:状态模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 参考&#xff1a;设计模式之状态模式 (C 实现)_设计模式的状态模式实现-CSDN博客 1.概述 状态模式允许一个对象在其内部状态改变时改变其行为。对象看起来像是改变了其类。使用状态模式可以将状态的相…

如何使用 Wireshark:从入门到进阶的网络分析工具

简述 Wireshark 是全球最受欢迎的网络协议分析工具&#xff0c;它帮助用户捕获和分析网络流量&#xff0c;诊断网络问题&#xff0c;排查安全漏洞&#xff0c;甚至恢复丢失的数据文件。作为一名网络工程师、安全专家、甚至是开发者&#xff0c;Wireshark 都是你必须掌握的工具…

100个问题学langchain入门(2/10)

问题 11 在 LangChain 中&#xff0c;如何将文档转化为向量以存储到 Vectorstore 中&#xff1f;具体使用了哪些技术或工具&#xff1f; 在 LangChain 中&#xff0c;将文档转化为向量以存储到 Vectorstore 中&#xff0c;主要通过以下步骤和技术完成&#xff1a; 转化流程&a…

C#winform引入DLL,DLL嵌入exe

C#winform将DLL嵌入exe 1 项目引入DLL1.1 项目-鼠标右击-点击添加引用&#xff1b;1.2 点击“浏览”&#xff1b;1.3 添加选中DLL1.4 勾选引入的DLL&#xff0c;点击“确定”1.5 添加成功后 2 DLL嵌入exe2.1 打开引入DLL属性窗口2.2 将“复制本地”项设为“false”2.3 双击打开…

828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公

VPN虚拟专用网络适用于企业内部人员流动频繁和远程办公的情况&#xff0c;出差员工或在家办公的员工利用当地ISP就可以和企业的VPN网关建立私有的隧道连接。 通过拨入当地的ISP进入Internet再连接企业的VPN网关&#xff0c;在用户和VPN网关之间建立一个安全的“隧道”&#xff…

wxpyton+wxFormBuilder加法运算示例

wxpythonwxFormBuilder加法运算示例 在wxFormBuilder里设计一个窗体&#xff0c;生成如下代码&#xff1a;calc_From.py 放在lib文件夹下面 import gettext import wx import wx.xrc _ gettext.gettext class MyFrame1(wx.Frame):def __init__(self, parent):wx.Frame.__init…

【AI驱动的数据结构:包装类的艺术与科学】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object&#xff0c;为了…

springBoot Maven 剔除无用的jar引用

目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后&#xff0c;经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关&#xff0c;这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…

电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!

电脑玩《刺客信条》时&#xff0c;找不到d3dx9_42.dll的原因及解决办法 对于许多热爱《刺客信条》这款游戏的玩家来说&#xff0c;在游戏中遇到找不到d3dx9_42.dll的问题无疑是非常令人头疼的。这一错误不仅会导致游戏无法启动&#xff0c;还可能引发运行过程中的图形错误、卡…