本文分享自华为云社区《华为云CCE Turbo:基于eBPF的用户自定义多粒度网络监控能力》,作者: 云容器大未来。

基于eBPF的容器监控的兴起

容器具有极致弹性、标准运行时、易于部署等优点,越来越多的客户选择使用容器来部署自己的服务,随着容器规模越来越大,容器间网络交互也越来越复杂。我们需要一套完整的监控系统,让用户和运维团队可以更清晰的观测容器网络的运行情况。

基本的容器网络监控,和虚机的监控类似,只能监控每个pod的网络流量、丢包等基本信息,监控的方式就是通过pod内网卡上的统计信息获取监控结果。这种监控看到的信息有限,无法满足对容器网络深入观测的目标。

 
 
比如用户想看一下容器网络中都有哪些连接?哪些容器之间的访问比较频繁?他们的时延是多少?qps大不大?网络质量怎么样?这些监控数据使用普通的监控手段无法获取。如果将用户的网络报文都镜像分析,会消耗大量的内存和cpu资源。eBPF技术为我们提供了一种新的监控手段,让我们实现上述监控能力成为可能。

eBPF是一种能够在内核运行沙箱程序的技术,可以通过在内核的不同位置注入监控代码,灵活的实现各种监控能力,安全、高性能,并且对内核和用户业务没有任何修改侵入,非常适合在容器监控领域使用。

当前已经有丰富的eBPF监控软件,比如BCC、DeepFlow、Pixie等,可以给用户提供多种维度的监控能力。

华为云云容器引擎CCE Turbo容器服务,提供了基于eBPF技术的dolphin插件(即"CCE容器网络扩展指标"插件),实现多维度、多粒度的容器监控能力,大大增强了容器网络的可观测能力。

dolphin基于eBPF的监控能力构建

dolphin插件使用eBPF技术并基于K8s框架设计,提供了容器网络多维度(pod、flow、自定义)监控和故障快速诊断能力,让客户可以更深入的观测K8s集群网络的运行情况,协助运维人员提前预防和快速定位故障。设计框架如下图所示:

dolphin支持运行在CCE Turbo集群,通过daemonset部署在K8s node上,使用CRD管理监控任务,监控结果为telemetry exporter格式,支持普罗主动拉取监控结果。

CRD定义如下:
  1. apiVersion: crd.dolphin.io/v1
  2. kind: MonitorPolicy
  3. metadata:
  4. name: example-task #监控任务名
  5. namespace: kube-system #必填,namespace必须为kube-system
  6. spec:
  7. selector: #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器
  8. matchLabels:
  9. app: nginx
  10. matchExpressions:
  11. - key: app
  12. operator: In
  13. values:
  14. - nginx
  15. podLabel: [app] #选填,用户标签
  16. healthCheck: #选填,本地节点 Pod 健康检查任务中最近一次健康检查是否健康、健康检查总健康&不健康次数这三个指标开关,默认不开
  17. enable: true # true false
  18. failureThreshold: 3 #选填,健康检查不健康判定失败次数,默认1次健康检查失败即判定不健康
  19. periodSeconds: 5 #选填,健康检查任务检查间隔时间,单位秒,默认60
  20. command: "" #选填,健康检查任务检查命令,支持:ping、arping、curl,默认 ping
  21. ipFamilies: [""] #选填,健康检查IP地址族,支持:ipv4,默认ipv4
  22. port: 80 #选填,使用curl时必选,端口号
  23. path: "" #选填,使用curl时必选,http api 路径
  24. monitor:
  25. ip:
  26. ipReceive:
  27. aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
  28. ipSend:
  29. aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
  30. tcp:
  31. tcpReceive:
  32. aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
  33. tcpSend:
  34. aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
  35. tcpRetrans:
  36. aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
  37. tcpRtt:
  38. aggregateType: flow #选填,支持填写"flow",表示流粒度监控,单位:微秒
  39. tcpNewConnection:
  40. aggregateType: pod #选填,支持填写"pod",表示pod粒度监控
从CRD的定义可以看到,dolphin主要有如下能力:
  • 用户自定义监控项。用户通过CR自选监控项,dolphin根据用户选择的监控项动态注入eBPF程序,不需要的内容不监控,最大程度减少对CPU、memory等资源的消耗。
  • 用户自定义监控粒度。用户根据不同的监控诉求,可以选择pod或flow的监控粒度,dolphin根据不同的监控粒度注入不同的eBPF程序,既满足了用户的监控诉求,也尽量降低资源的销毁。pod粒度监控会按pod粒度聚合监控数据,用户通过pod粒度监控可以观测容器层面的网络运行情况。flow粒度监控会按pod内不同流聚合监控数据,用户通过flow粒度监控可以观测容器内不同流的网络运行情况,进一步感知不同pod之间的通信情况。
  • 多任务并发。每个CR对应一个监控任务,可以多个任务并发监控,互不影响。用户可以根据需要定义多个监控任务进行不同层次、不同服务的监控。
  • selector选择监控范围。CR中的selector为标准的K8s pod label selector,用户可以通过selector选择需要监控的一组pod,灵活的定义监控范围。dolphin会根据用户定义的监控范围只监控选中的pod,大大降低资源消耗和监控结果输出。监控结果携带用户指定pod label。用户通过监控结果进行数据分析时,常常会用到pod上的label信息进行数据筛选、数据聚合、数据关联等动作,用户可以通过podLabel字段指定监控结果携带哪些pod上的label,dolphin输出监控结果时,会根据用户指定的label key获取pod的上的label value,并将label KV随监控结果输出,满足用户数据处理的诉求。
  • 丰富的IP层和TCP层监控能力,vpc网络的健康检查能力。

具体的监控能力和使用方式,请参考华为云CCE容器网络扩展指标:

https://support.huaweicloud.com/usermanual-cce/cce_10_0371.html

示 例

某应用是用户的重点应用,此应用通过deployment app1部署在华为云CCE Turbo上,用户想知道这个应用的qps情况,网络质量有没有问题,都有哪些client在访问这个服务,整体网络流量情况是怎样的?这时候用户可以安装dolphin插件来实现了。

在CCE集群console界面,点击"插件中心",搜索“CCE 容器网络扩展指标”找到dolphin插件,点击“安装”,就完成了插件安装。

 

编写如下配置,并保存成app1.yaml

  1. apiVersion: crd.dolphin.io/v1
  2. kind: MonitorPolicy
  3. metadata:
  4. name: app1
  5. namespace: kube-system
  6. spec:
  7. selector:
  8. matchLabels:
  9. app: app1
  10. monitor:
  11. ip:
  12. ipReceive:
  13. aggregateType: pod
  14. ipSend:
  15. aggregateType: pod
  16. tcp:
  17. tcpRetrans:
  18. aggregateType: flow
  19. tcpRtt:
  20. aggregateType: flow
  21. tcpNewConnection:
  22. aggregateType: pod

然后通过“kubectl apply -f app1.yaml”将配置使能,监控配置就完成了。通过prometheus可以轻松查看监控结果。

通过新建连接的统计信息轻松计算qps值。

通过流粒度的RTT和重传监控,感知应用的网络时延和丢包情况,还可以感知具体哪些client的访问网络质量较差。

pod粒度的ip收发统计,可以看到应用整体的流量情况。

除了使用Prometheus直接查看dolphin的监控结果外,还可以基于dolphin监控进行二次开发。华为终端云和CCE云原生观测服务利用dolphin flow粒度的网络监控能力,正在构建容器流量拓扑功能,可以一目了然的看到容器间的网络运行情况,敬请期待。

后续演进

dolphin崭露头角,还在快速的成长过程中,后续会在如下几个方面继续演进增强。

  • 更丰富的监控指标,比如支持错包计数、建链失败统计、丢包统计、udp报文统计等指标。
  • 更强的用户自定义能力,用户可以定义监控的IP范围、端口范围、聚合方式等。
  • K8s service监控能力,让用户能感知client->service->endpoint全链路的网络运行情况。
  • 更智能的诊断能力,帮助用户对网络问题的快速定位、定界。
道阻且长,行则将至,行而不辍,未来可期,希望通过dolphin持续的演进,为用户带来更丰富的功能,帮助用户更方便、更清晰的观测容器网络。

云容器引擎CCE服务体验请访问

 

点击关注,第一时间了解华为云新鲜技术~

华为云CCE Turbo:基于eBPF的用户自定义多粒度网络监控能力的更多相关文章

  1. 【20191118会议】针对华为云CCE 问题总结

    针对华为云CCE问题总结 如何购买CCE集群 可以分为测试环境和生产环境,针对使用范围进行购买集群. 测试环境 可以进行公用 生产环境建议使用单独集群 尤其针对部门大 耦合性不高 ,生产环境 建议使用 ...

  2. 手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台

    摘要:本期文章采用了4G LTE Cat.1模块,编程语言用的是lua,实现对华为云物联网平台的设备通信与控制 本文分享自华为云社区<基于luatos的4G(LTE Cat.1)模组接入华为云物 ...

  3. 基于STM32+华为云IOT设计智能称重系统

    摘要:选择部署多个重量传感器和必要的算法.通过WiFi 通信模块.GPS定位模块,采集车辆称重数据一地理位置信息,并通过网络发送至云平台,设计图形化UI界面展示称重.地图位置等重要信息,实现对称重系统 ...

  4. Forrester:华为云容器是容器混合云最佳选择

    近日,国际权威咨询机构Forrester发布<The Forrester New WaveTM: Public Cloud Enterprise Container Platforms, Q3 ...

  5. 大海航行靠舵手 华为云靠什么征服K8S?

    Kubernetes 是Google开源的容器集群管理系统或者称为分布式操作系统.它构建在Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于 ...

  6. 面对runc逃逸漏洞,华为云容器为您保驾护航

    背景信息 基于runc运行时的容器存在安全漏洞,攻击者可以通过恶意容器镜像等方式获取宿主机root执行权限.漏洞CVE-2019-5736的详细信息,请参见 https://cve.mitre.org ...

  7. 华为云亮相QCon2020深圳站,带你体会大厂的云原生玩法与秘诀

    摘要:在QCon全球软件开发大会上,华为云开发者生态总监张全文作为"云原生应用开发实践"专题出品人,携手华为云四位资深技术专家带来精彩分享. 作为当下技术领域最火热的技术趋势之一, ...

  8. 沈抚示范区·“华为云杯”2021全国AI大赛圆满落

    摘要:以赛促学,赛教结合!驱动AI产业繁荣发展 本文分享自华为云社区<云聚沈抚 · 智赢未来!沈抚示范区·"华为云杯"2021全国AI大赛圆满落幕>,作者:灰灰哒. 近 ...

  9. CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统

    摘要:以CC2530单片机为核心器件,设计一个冷链环境信息采集系统,利用传感器技术对冷藏仓内的环境参数进行采集,上传到华为云物联网云平台,然后通过手机端或移动端进行显示,便于分析,观察冷链环境信息. ...

  10. 华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+

    摘要:本文介绍了华为云对冷启动优化这一业界难题的探索之路,创新提出了基于进程级快照的优化方案. 作者信息-- 子游:华为元戎高级工程师 平山:华为云中间件 Serverless 负责人 琪君:华为元戎 ...

随机推荐

  1. 面对 Log4j2 漏洞,安全人都做了什么?

    摘要:本文从漏洞复现.漏洞防护.漏洞检测.软件供应链安全等方面,介绍安全人针对该漏洞做的尝试. 本文分享自华为云社区<面对 Log4j2 漏洞,安全人都做了什么?>,作者:maijun. ...

  2. nginx网站限速限流配置——网站被频繁攻击,nginx上的设置limit_req和limit_conn

    利用ngx_http_limit_req_module模块,可根据键值(如ip)限制每分钟的速率: limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "l ...

  3. 字节跳动基于ClickHouse优化实践之“高可用”

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量生产使用中 ...

  4. 报错 PEP 8: expected 2 blank lines, found 1

    PyCharm 提示:PEP 8: expected 2 blank lines, found 1 类或方法前需要空两行 解决方法:Ctrl+Alt+L 格式化一下就OK了.或者手动在前面敲一行

  5. MongoDB 读写分离——SpringBoot读写分离

    application.yml data: mongodb: uri: mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/fecg_d ...

  6. 聚合查询 分组查询 F与Q查询 添加新字段

    目录 聚合查询 aggregate 聚合函数 起别名 分组查询 annotate 注释函数 起别名 分组查询报错 分组查询练习 总结 添加新字段 F与Q查询 F查询 字符串拼接 concat方法 Q查 ...

  7. CO41创建生产订单维护增强字段

    一.CO41计划订单中新增增强字段 报表中新增字段,并可维护,当点击转换创建生产订单时,将四个字段的值,维护到生产订单对应的字段中 二.增强结构 在SFC_POCO中新增对应的字段 三.屏幕增强 找到 ...

  8. C 与 C++ 区别

    C 与 C++ 区别 本文介绍 C 与 C++ 之间重要的或者容易忽略的区别.尽管 C++ 几乎是 C 的超集,C/C++ 代码混用一般也没什么问题,但是了解 C/C++ 间比较重要区别可以避免碰到一 ...

  9. 题解 | 【CF896B】 Ithea Plays With Chtholly

    题目链接:Here 给 \(m\) 个数,放到 \(1→n\) 一个位置上,若 \(1→n\) 都被填满且不下降就胜.强制在线. 看到题忽然觉得是水题,这不就最长不下降子序列的那个吗!直接上个二分就准 ...

  10. 0x62 图论-最小生成树

    A题:走廊泼水节 链接:https://ac.nowcoder.com/acm/contest/1056/A 题目描述 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小 ...