使用KubeNurse进行集群网络监控

[[389818]]

前言

在Kubernetes中,网络是通过第三方网络插件来提供,这些三方插件本身的实现就比较复杂,以至于在排查网络问题时常常碰壁。那么有没有什么方式来监控集群中所有的网络连接呢?

kubenurse就是这样一个项目,它通过监视集群中的所有网络连接,并提供监控指标供Prometheus采集。

Kubenurse

kubenurse的部署非常简单,使用Daemonset形式部署到集群节点上,Yaml文件在项目的example目录下。

部署成功后,每5秒钟会对/alive发一次检查请求,然后其内部会运行各种方法全方位对集群网络进行检测,为了防止过多的网络流量,会对检查结果缓存3秒。其检测机制如下:

从上图可以看出,kubenurse会对ingress、dns、apiserver、kube-proxy进行网络探测。

所有的检查都会创建公开的指标,这些指标可用于检测:

  • SDN网络延迟以及错误
  • Kubelet之间的网络延迟以及错误
  • Pod与apiserver通信问题
  • Ingress往返网络延迟以及错误
  • Service往返网络延迟以及错误(kube-proxy)
  • Kube-apiserver问题
  • Kube-dns(CoreDns)错误
  • 外部DNS解析错误(ingress url解析)

然后这些数据主要通过两个监控指标来体现:

  • kubenurse_errors_total:按错误类型划分的错误计数器
  • kubenurse_request_duration:按类型划分的请求时间分布

这些指标都是通过Type类型进行标识,对应几种不同的检测目标:

  • api_server_direct:从节点直接检测 API Server
  • api_server_dns:从节点通过 DNS 检测 API Server
  • me_ingress:通过 Ingress 检测本服务 Service
  • me_service:使用 Service 检测本服务 Service
  • path_$KUBELET_HOSTNAME:节点之间的互相检测

然后这些指标分别按P50,P90,P99分位数进行划分,就可以根据不同的情况来确认集群网络状况了。

安装部署

这里直接使用官方的部署文件进行部署。不过需要更改几个地方。(1)首先将代码clone到本地

  1. git clone https://github.com/postfinance/kubenurse.git 

(2)进入example目录,修改ingress.yaml配置,主要是添加域名,如下。

  1. --- 
  2. apiVersion: extensions/v1beta1 
  3. kind: Ingress 
  4. metadata: 
  5.   annotations: 
  6.     kubernetes.io/ingress.class: nginx 
  7.   name: kubenurse 
  8.   namespace: kube-system 
  9. spec: 
  10.   rules: 
  11.   - host: kubenurse-test.coolops.cn 
  12.     http: 
  13.       paths: 
  14.       - backend: 
  15.           serviceName: kubenurse 
  16.           servicePort: 8080 

(2)更新daemonset.yaml配置,主要是更改ingress的入口域名,如下。

  1. --- 
  2. apiVersion: apps/v1 
  3. kind: DaemonSet 
  4. metadata: 
  5.   labels: 
  6.     app: kubenurse 
  7.   name: kubenurse 
  8.   namespace: kube-system 
  9. spec: 
  10.   selector: 
  11.     matchLabels: 
  12.       app: kubenurse 
  13.   template: 
  14.     metadata: 
  15.       labels: 
  16.         app: kubenurse 
  17.       annotations: 
  18.         prometheus.io/path: "/metrics" 
  19.         prometheus.io/port: "8080" 
  20.         prometheus.io/scheme: "http" 
  21.         prometheus.io/scrape: "true" 
  22.     spec: 
  23.       serviceAccountName: nurse 
  24.       containers: 
  25.       - name: kubenurse 
  26.         env: 
  27.         - name: KUBENURSE_INGRESS_URL 
  28.           value: kubenurse-test.coolops.cn      # 需要更改的地方 
  29.         - name: KUBENURSE_SERVICE_URL 
  30.           value: http://kubenurse.kube-system.svc.cluster.local:8080 
  31.         - name: KUBENURSE_NAMESPACE 
  32.           value: kube-system 
  33.         - name: KUBENURSE_NEIGHBOUR_FILTER 
  34.           value: "app=kubenurse" 
  35.         image: "postfinance/kubenurse:v1.2.0" 
  36.         ports: 
  37.         - containerPort: 8080 
  38.           protocol: TCP 
  39.       tolerations: 
  40.       - effect: NoSchedule 
  41.         key: node-role.kubernetes.io/master 
  42.         operator: Equal 
  43.       - effect: NoSchedule 
  44.         key: node-role.kubernetes.io/control-plane 
  45.         operator: Equal 

(4)新创建一个ServiceMonitor,用于获取指标数据,如下:

  1. apiVersion: monitoring.coreos.com/v1 
  2. kind: ServiceMonitor 
  3. metadata: 
  4.   name: kubenurse 
  5.   namespace: monitoring 
  6.   labels: 
  7.     k8s-app: kubenurse 
  8. spec: 
  9.   jobLabel: k8s-app 
  10.   endpoints: 
  11.   - port: "8080-8080"  
  12.     interval: 30s 
  13.     scheme: http 
  14.   selector: 
  15.     matchLabels: 
  16.      app: kubenurse 
  17.   namespaceSelector: 
  18.     matchNames: 
  19.     - kube-system 

(5)部署应用,在example目录下执行以下命令。

  1. kubectl apply -f . 

(6)等待所有应用变成running,如下。

  1. # kubectl get all -n kube-system -l app=kubenurse 
  2. NAME                  READY   STATUS    RESTARTS   AGE 
  3. pod/kubenurse-fznsw   1/1     Running   0          17h 
  4. pod/kubenurse-n52rq   1/1     Running   0          17h 
  5. pod/kubenurse-nwtl4   1/1     Running   0          17h 
  6. pod/kubenurse-xp92p   1/1     Running   0          17h 
  7. pod/kubenurse-z2ksz   1/1     Running   0          17h 
  8.  
  9. NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 
  10. service/kubenurse   ClusterIP   10.96.229.244   <none>        8080/TCP   17h 
  11.  
  12. NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE 
  13. daemonset.apps/kubenurse   5         5         5       5            5           <none>          17h 

(7)到prometheus上查看是否正常获取数据。

查看指标是否正常。

(8)这时候就可以在grafana上画图,展示监控数据了,如下。

参考文档

【1】https://github.com/postfinance/kubenurse

【2】https://github.com/postfinance/kubenurse/tree/master/examples

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/152438.html<

(0)
运维的头像运维
上一篇2025-03-14 00:24
下一篇 2025-03-14 00:25

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注