当前位置: 首页 > news >正文

windows 部署cAdvisor

离线部署cAdvisor

安装之前小操作:

删除之前安装:
kubectl delete -f D:\KTKJ\cAdvisor\cadvisor-daemonset.yaml
kubectl delete -f D:\KTKJ\cAdvisor\cadvisor-svc.yaml
清除镜像:
验证: kubectl get pods -n monitoring -l app=cadvisor
检查 Service 是否还存在 kubectl get svc -n monitoring | select-string  cadvisor
​
验证prometheus 能否访问cAdvisor:
kubectl exec -it prometheus-prometheus-kube-prometheus-prometheus-0  -n monitoring  -- sh
wget -qO- http://cadvisor.monitoring.svc.cluster.local:8080/metrics
是否输出包含container .... 
有的话就可配置抓取规则了

一、安装cAdvisor(内网环境适配)

‌离线部署cAdvisor‌

在外网环境中下载镜像并保存为离线包:

docker pull gcr.io/cadvisor/cadvisor:v0.39.3 docker save -o cadvisor.tar gcr.io/cadvisor/cadvisor:v0.39.3 将cadvisor.tar传输至内网,加载镜像:

docker load -i cadvisor.tar ‌创建DaemonSet部署cAdvisor‌

编写cadvisor-daemonset.yaml(关键配置):

应用配置: kubectl apply -f /地址/cadvisor-daemonset.yaml kubectl delete pod -l app=cadvisor -n monitoring --删除让其重新生成 ‌

验证DaemonSet运行状态‌ kubectl get pods -n monitoring -l app=cadvisor

二、与Prometheus集成

cadvisor-svc.yaml

  • apiVersion: v1
    kind: Service
    metadata:name: cadvisornamespace: monitoring
    spec:selector:name: cadvisorports:
    ​- protocol: TCPport: 8080targetPort: 8080type: ClusterIP

kubectl apply -f /地址/cadvisor-svc.yaml ‌

若使用Helm部署Prometheus,在values.yaml中添加以下配置: ‌修改Prometheus抓取配置‌

    ##additionalScrapeConfigs: []additionalScrapeConfigs:- job_name: 'node-exporter'static_configs:- targets:- 'prometheus-prometheus-node-exporter.monitoring.svc.cluster.local:9100'- job_name: 'cadvisor'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_label_app]regex: cadvisoraction: keep- source_labels: [__meta_kubernetes_pod_container_name]regex: cadvisoraction: keep- source_labels: [__address__]target_label: instance

更新Helm Release:

--helm upgrade prometheus prometheus-community/prometheus -f values.yaml
helm upgrade prometheus ./kube-prometheus-stack -f D:\KTKJ\Prometheus\kube-prometheus-stack\values.yaml --namespace monitoring

‌验证Prometheus抓取状态‌

访问Prometheus Web界面(http://localhost:9090/targets),确认cadvisor任务状态为‌UP‌‌24。

三、网络流量监控指标使用

‌核心网络指标‌

接收流量:container_network_receive_bytes_total{namespace="<命名空间>", pod="<Pod名称>"} 发送流量:container_network_transmit_bytes_total{namespace="<命名空间>", pod="<Pod名称>"}‌15 ‌Grafana仪表板配置‌

导入官方模板(Dashboard ID 14282),或自定义面板: promql sum(rate(container_network_receive_bytes_total{namespace="$namespace"}[5m])) by (pod)

四、内网部署注意事项

‌镜像仓库替代方案‌

若内网存在私有镜像仓库(如Harbor),推送镜像并修改YAML中的镜像地址:

image: <私有仓库地址>/cadvisor:v0.39.3 ‌安全策略与资源限制‌

启用privileged: true(若因权限问题采集失败):

securityContext: privileged: true 添加资源限制(防止资源耗尽): yaml Copy Code resources: limits: cpu: "500m" memory: "512Mi"

五、常见问题排查

‌cAdvisor无法挂载宿主机路径‌:检查路径是否存在(如/var/lib/docker),确保Windows Docker Desktop使用Linux容器模式‌67。 ‌Prometheus抓取失败‌:通过kubectl port-forward临时转发端口,验证cAdvisor的/metrics端点是否可达‌28。 ‌指标数据延迟‌:调整Prometheus的scrape_interval(默认15秒),降低采集间隔至5s‌

六 Java代码实现

/**** 查询 Pod 的网络流量(接收字节)* @param podName* @return*/
@Override
public BigDecimal queryNetworkReceiveBytes(String podName){try {String query = "sum(rate(container_network_receive_bytes_total{pod=\"" + podName + "\",container!=\"POD\"}[1m])) by (pod)";BigDecimal bytesPerSecond  = fetchMemoryMetric(query);BigDecimal  kbPerSecond = bytesPerSecond.divide(BigDecimal.valueOf(1024), 2, RoundingMode.HALF_UP);  // 保留两位小数return kbPerSecond;
​} catch (Exception e) {e.printStackTrace();}return BigDecimal.ZERO;
}
​
/**** 查询 Pod 的网络流量(发送字节)* @param podName* @return*/
@Override
public BigDecimal queryNetworkTransmitBytes(String podName){try {String query = "sum(rate(container_network_transmit_bytes_total{pod=\"" + podName + "\",container!=\"POD\"}[1m])) by (pod)";BigDecimal bigDecimal = fetchMemoryMetric(query);BigDecimal  kbBigDecimal = bigDecimal.divide(BigDecimal.valueOf(1024), 2, RoundingMode.HALF_UP);  // 保留两位小数return kbBigDecimal;} catch (Exception e) {e.printStackTrace();}return BigDecimal.ZERO;
}
http://www.xdnf.cn/news/124903.html

相关文章:

  • SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
  • 使用vue2开发一个医疗预约挂号平台-前端静态网站项目练习
  • 携国家图书馆文创打造AI创意短片,阿里妈妈AIGC能力面向商家开放
  • Gazebo 仿真环境系列教程(一):环境安装与基础使用
  • ubuntu20.04(ROS noetic版)安装cartographer
  • 一次丝滑的手工SQL注入
  • 深度剖析RLHF:语言模型“类人输出”的训练核心机制
  • 全面认识Chroma 向量数据库中的索引和相似度
  • Python基础语法:标识符,运算符,数据输入input(),数据输出print(),转义字符,续行符
  • 如何通过CRM管理软件提升客户满意度:实战策略与系统应用解析
  • java项目中分库分表使用场景?具体应该如何实现?
  • Streamlit从入门到精通:构建数据应用的利器
  • 数据中台-数据质量管理系统:从架构到实战
  • ai如何赋能艺术教育
  • LainChain技术解析:基于RAG架构的下一代语言模型增强框架
  • SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
  • 如何构建高效的接口自动化测试框架?
  • vue2项目,为什么开发环境打包出来的js文件名是1.js 2.js,而生产环境打包出来的是chunk-3adddd.djncjdhcbhdc.js
  • Java面试高频问题(21-25)
  • Linux GPIO驱动开发实战:Poll与异步通知双机制详解
  • 解决VS Code中Vue项目不识别`@/`的可能解决方案及总结
  • 高性能服务器配置经验指南2——深度学习准备(驱动安装,Anaconda安装,不同版本Cuda安装)
  • 什么是 低秩矩阵(Low-Rank)
  • 蓝桥杯 20. 压缩变换
  • 数据库监控 | MongoDB监控全解析
  • 算法之分支定界
  • 【含文档+PPT+源码】基于SpringBoot的开放实验管理平台设计与实现
  • Spring Boot中自定义404异常处理问题学习笔记
  • redis集群的三种部署方式
  • JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合