New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FR] Questions and inquiries about agent k8s watcher #6332
Comments
deepflow-server: v6.4 |
是的,其中有一个 agent 负责同步 K8s 资源。可以参考这里部署一个 Daemonset + 一个 Deployment,后者只做 K8s Watch。
当 deepflow-agent 运行在 K8s Pod 中时,只受 K8s daemonset 的 cpu & mem 限制,即此时 agent-group-config 中的限制不起作用,可参考这里的样例配置注释 ## CPU Limit
## Unit: number of logical cores. Default: 1. Range: [1, 100000]
## Note: deepflow-agent uses cgroups to limit CPU usage.
## But please note that deepflow-agent running in K8s Pod <<<
## cannot be limited by this value, please configure it <<<
## through K8s Limit. <<<
#max_cpus: 1
## Memory Limit
## Unit: M bytes. Default: 768. Range: [128, 100000]
## Note: deepflow-agent uses cgroups to limit memory usage.
## But please note that deepflow-agent running in K8s Pod <<<
## cannot be limited by this value, please configure it <<<
## through K8s Limit. <<<
#max_memory: 768 但是,我们在即将发布的 6.5 中已经对这一行为做了优化,deepflow-agent 会自动将 agent-group-config 中填写的 cpu 和 mem 限制设置到 k8s daemonset config 中。即 6.5 中一切将以 agent-group-config 为准,即使手动修改了 K8s daemonset yaml,也会被 deepflow-agent 改回来。6.5(main)的配置样例在这里
Grafana 中展示的内存量是由 deepflow-agent 自己上报的,代码见这里。 |
感谢回复,非常有帮助👍!!!也验证了下deployment + daemonset 的方式,资源限制可以单独限制。 另外还有个问题想咨询下,就是deployment watcher 同步k8s集群的资源元数据是怎么实现的?如果集群规模比较大的话,会不会对api-server造成影响?有没有什么可以量化的指标来观察watcher对api-server的影响? |
@chrisdamon 通过 list + watch 的方式实现的。当 watch 长时间(默认 10m)没有数据更新时,会使用一次全量 list。 有些配置参数可以对 list 行为做配置: ## K8s api list limit
## Default: 1000. Options: [10, 4294967296)
## Note: Used when limit k8s api list entry size.
#kubernetes-api-list-limit: 1000
## K8s api list interval
## Default: 10m. Must be larger than or equal to 10m.
## Note: Interval of listing resource when watcher idles
#kubernetes-api-list-interval: 10m |
@sharang 老师,针对这一场景有没有相应的基准测试报告作为参考?一个watcher的话在不同规模的集群里面(比如node 50+, 100+, 500+),推荐使用多少资源? |
@chrisdamon 目前还没有,你能反馈一些你们的情况吗?k8s 资源量、deepflow-agent cpu&mem 曲线。 deepflow-agent 在拿到 k8s 资源以后(分页拿),会立即对 json 进行删减(仅留下需要上报的字段),并 zip 压缩之后暂存在内存中。 |
Search before asking
Description
Q1: 在部署多集群agent的场景中,发现每个集群中都有一个agent的内存使用率比其他的agent高出很多,是不是因为该agent既要采集数据又要同步k8s集群资源元数据信息才回导致的?这样的话,其中一个agent的内存使用过高,那么daemonset limit的值得向最高内存使用看齐,其他agent实际上用不了那么多内存,能不能对各个agent资源使用进行精细化配置,有没有好的解决方式?
Q2:目前配置agent资源使用的方式有两种,一种是agent-group-config使用max_cpus,max_memory参数进行配置,另外一种是k8s daemonset 编排中的resource进行request、limit配置。那如果这两种方式同时使用的话,哪个优先级会更高一些?为此我做了一下验证,发现同时使用agent-group-config中的资源限制并未生效,如下图:
创建了一个za-test agent-group-config 限制1c100M
使用kubectl top pod 命令查看发现该agent 内存使用超过100M, agent-group-config并未生效
Q3: 关于agent 资源使用的监控,发现在grafana面板上面内存的使用率要比kubectl top pod展示的资源使用率要高一些,那grafana deepflow-agent面板上面的资源统计计算的逻辑是什么样的?监控数据是怎么采集的呢?
Use case
No response
Related issues
No response
Are you willing to submit a PR?
Code of Conduct
The text was updated successfully, but these errors were encountered: