本文分享自华为云社区《华为云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定义如下:
apiVersion: crd.dolphin.io/v1
kind: MonitorPolicy
metadata:
name: example-task #监控任务名
namespace: kube-system #必填,namespace必须为kube-system
spec:
selector: #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器
matchLabels:
app: nginx
matchExpressions:
- key: app
operator: In
values:
- nginx
podLabel: [app] #选填,用户标签
healthCheck: #选填,本地节点 Pod 健康检查任务中最近一次健康检查是否健康、健康检查总健康&不健康次数这三个指标开关,默认不开
enable: true # true false
failureThreshold: 3 #选填,健康检查不健康判定失败次数,默认1次健康检查失败即判定不健康
periodSeconds: 5 #选填,健康检查任务检查间隔时间,单位秒,默认60
command: "" #选填,健康检查任务检查命令,支持:ping、arping、curl,默认 ping
ipFamilies: [""] #选填,健康检查IP地址族,支持:ipv4,默认ipv4
port: 80 #选填,使用curl时必选,端口号
path: "" #选填,使用curl时必选,http api 路径
monitor:
ip:
ipReceive:
aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
ipSend:
aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
tcp:
tcpReceive:
aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
tcpSend:
aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
tcpRetrans:
aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
tcpRtt:
aggregateType: flow #选填,支持填写"flow",表示流粒度监控,单位:微秒
tcpNewConnection:
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

apiVersion: crd.dolphin.io/v1
kind: MonitorPolicy
metadata:
name: app1
namespace: kube-system
spec:
selector:
matchLabels:
app: app1
monitor:
ip:
ipReceive:
aggregateType: pod
ipSend:
aggregateType: pod
tcp:
tcpRetrans:
aggregateType: flow
tcpRtt:
aggregateType: flow
tcpNewConnection:
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. 一次事故,我对MySQL时间戳存char(10)还是int(10)有了全新的认识

    摘要:char类型字段想走索引的话,必须用引号括起来.如果是时间戳等类型的纯数字,建议还是存为int型吧. 本文分享自华为云社区<一次事故,我对MySql时间戳存char(10)还是int(10 ...

  2. YoloV5实战:手把手教物体检测

    摘要:​YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s.YOLOv5m.YOLO... 本文分享自华为云社区<YoloV5实战:手把手教物体检测--YoloV5> ...

  3. 万字保姆级长文——Linkedin元数据管理平台Datahub离线安装指南

    ​ 元数据管理平台Datahub最近的热度越来越高.已经更新到了0.8.40的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题. ​ 考虑到有些企业部分数据服务是部署在内网的,那么离线安装D ...

  4. 火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?

    随着国内游戏用户数量趋于饱和,中国游戏产业也从高速成长期逐渐转型,市场成熟度提升,竞争趋于精细化. 随着游戏出海以及私域流量运营的挑战,游戏企业对数据分析的使用需求和依赖度进一步提高.而在游戏研发立项 ...

  5. 学习 Java 还是 Solon 简单,v1.9.0 发布

    入手很简单哦: pom.xml 添加依赖 <dependency> <groupId>org.noear</groupId> <artifactId>s ...

  6. Solon Aop 特色开发(6)新鲜货提取器,提取Bean的函数进行定制开发

    Solon,更小.更快.更自由!本系列专门介绍Solon Aop方面的特色: <Solon Aop 特色开发(1)注入或手动获取配置> <Solon Aop 特色开发(2)注入或手动 ...

  7. PPT 小图标 设计感Max 精修

    https://www.bilibili.com/video/BV1ha411g7f5?p=14 图标用处 信息可视化,快速获取信息 增加内容图示化细节,增强设计感 SVG/PNG 图标使用 SVG ...

  8. 【计算机网络】WebSocket 是什么原理?为什么可以实现持久连接?

    一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接),循环连接的不算) 首先HTTP有1.1和1.0之说,也就是所谓的 ...

  9. 趣事记录 | 有哪些让你目瞪口呆的 Bug ?

    在知乎上看到一个有趣的 Bug 事件,转载记录一下. 原回答地址:Here 发生于麻省理工的一个有意思的bug:只能发500英里的邮件. 原文在此:http://web.mit.edu/jemorri ...

  10. 汇编 | DosBox初步接触的一些初始化设置(窗口大小 & 默认命令)

    如何在win10 64位下搭载汇编环境请参考这篇博客:Here 学习汇编时下载了 DosBox,然而窗口小到眼睛酸痛.解决方案如下. Updata:VSC 插件使用方法,Here 1.点开配置文件 配 ...