如何高效低耗监控Kubernetes指定命名空间内对象(含CRD)的变更
高效监控Kubernetes指定命名空间资源(含CRD)变更的方案
以下方案均基于Kubernetes原生机制实现,资源消耗远低于高频轮询kubectl get的方式:
- 原生kubectl watch命令(轻量化无额外依赖)
该模式基于K8s API的长连接推送机制,只有资源实际发生变更时才会推送数据,无需反复拉取全量资源。
单CRD类型监控命令:kubectl get myobjecttype -n <user-account-1> --watch
全资源(含自定义CRD)监控命令:kubectl get all,cm,secret,ing,myobjecttype,其他需要监控的CRD类型 -n <user-account-1> --watch -o wide
新版本kubectl还支持kubectl alpha watch命令,可以直接输出变更前后的资源对象差异,无需额外处理时间戳对比逻辑。 - client-go Informer(适合二次开发场景)
如果需要将变更事件接入自定义业务逻辑,可使用K8s官方client-go库的Informer组件,它内置本地缓存和事件回调机制,仅在资源变更时触发自定义逻辑,冗余资源消耗极低,原生支持所有已注册的CRD类型,只需指定监听的命名空间、资源GVK即可完成配置。 - 轻量事件采集工具(适合规模化监控场景)
如果需要持久化变更事件、配置告警规则,可使用kube-eventer这类轻量采集工具,配置指定命名空间的资源过滤规则后,即可自动采集所有资源(含CRD)的创建、更新、删除事件,支持输出到日志、消息队列或者告警系统。
注意:监听前需要确认当前kubeconfig对应的账号有目标命名空间下待监听资源的
list和watch权限,否则会触发权限报错。
内容的提问来源于stack exchange,提问作者Oliver Williams
相关产品推荐
相关产品推荐

