Skip to content
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

Open
2 of 3 tasks
chrisdamon opened this issue May 8, 2024 · 6 comments
Open
2 of 3 tasks

[FR] Questions and inquiries about agent k8s watcher #6332

chrisdamon opened this issue May 8, 2024 · 6 comments
Assignees
Labels

Comments

@chrisdamon
Copy link

Search before asking

  • I had searched in the issues and found no similar feature requirement.

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
企业微信截图_1060ee7a-1c4d-4c55-83fc-3a4ae49ddcc5
使用kubectl top pod 命令查看发现该agent 内存使用超过100M, agent-group-config并未生效
企业微信截图_548d6272-e2e0-41e2-a8b0-ba60b3a85d5e

Q3: 关于agent 资源使用的监控,发现在grafana面板上面内存的使用率要比kubectl top pod展示的资源使用率要高一些,那grafana deepflow-agent面板上面的资源统计计算的逻辑是什么样的?监控数据是怎么采集的呢?

Use case

No response

Related issues

No response

Are you willing to submit a PR?

  • Yes I am willing to submit a PR!

Code of Conduct

@chrisdamon
Copy link
Author

deepflow-server: v6.4
deepflow-agent: v6.4

@sharang
Copy link
Member

sharang commented May 8, 2024

Q1: 在部署多集群agent的场景中,发现每个集群中都有一个agent的内存使用率比其他的agent高出很多,是不是因为该agent既要采集数据又要同步k8s集群资源元数据信息才回导致的?这样的话,其中一个agent的内存使用过高,那么daemonset limit的值得向最高内存使用看齐,其他agent实际上用不了那么多内存,能不能对各个agent资源使用进行精细化配置,有没有好的解决方式?

是的,其中有一个 agent 负责同步 K8s 资源。可以参考这里部署一个 Daemonset + 一个 Deployment,后者只做 K8s Watch。

Q2:目前配置agent资源使用的方式有两种,一种是agent-group-config使用max_cpus,max_memory参数进行配置,另外一种是k8s daemonset 编排中的resource进行request、limit配置。那如果这两种方式同时使用的话,哪个优先级会更高一些?

当 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)的配置样例在这里

Q3: 关于agent 资源使用的监控,发现在grafana面板上面内存的使用率要比kubectl top pod展示的资源使用率要高一些,那grafana deepflow-agent面板上面的资源统计计算的逻辑是什么样的?监控数据是怎么采集的呢?

Grafana 中展示的内存量是由 deepflow-agent 自己上报的,代码见这里

@sharang sharang self-assigned this May 8, 2024
@chrisdamon
Copy link
Author

Q1: 在部署多集群agent的场景中,发现每个集群中都有一个agent的内存使用率比其他的agent高出很多,是不是因为该agent既要采集数据又要同步k8s集群资源元数据信息才回导致的?这样的话,其中一个agent的内存使用过高,那么daemonset limit的值得向最高内存使用看齐,其他agent实际上用不了那么多内存,能不能对各个agent资源使用进行精细化配置,有没有好的解决方式?

是的,其中有一个 agent 负责同步 K8s 资源。可以参考这里部署一个 Daemonset + 一个 Deployment,后者只做 K8s Watch。

Q2:目前配置agent资源使用的方式有两种,一种是agent-group-config使用max_cpus,max_memory参数进行配置,另外一种是k8s daemonset 编排中的resource进行request、limit配置。那如果这两种方式同时使用的话,哪个优先级会更高一些?

当 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)的配置样例在这里

Q3: 关于agent 资源使用的监控,发现在grafana面板上面内存的使用率要比kubectl top pod展示的资源使用率要高一些,那grafana deepflow-agent面板上面的资源统计计算的逻辑是什么样的?监控数据是怎么采集的呢?

Grafana 中展示的内存量是由 deepflow-agent 自己上报的,代码见这里

感谢回复,非常有帮助👍!!!也验证了下deployment + daemonset 的方式,资源限制可以单独限制。

另外还有个问题想咨询下,就是deployment watcher 同步k8s集群的资源元数据是怎么实现的?如果集群规模比较大的话,会不会对api-server造成影响?有没有什么可以量化的指标来观察watcher对api-server的影响?

@sharang
Copy link
Member

sharang commented May 14, 2024

就是deployment watcher 同步k8s集群的资源元数据是怎么实现的?如果集群规模比较大的话,会不会对api-server造成影响?有没有什么可以量化的指标来观察watcher对api-server的影响?

@chrisdamon 通过 list + watch 的方式实现的。当 watch 长时间(默认 10m)没有数据更新时,会使用一次全量 list。
由于只有一个 watcher 去 list-watch,对 apiserver 的影响应该是非常可控的。

有些配置参数可以对 list 行为做配置:
https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L503

  ## 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 sharang changed the title [FR] 关于agent资源使用的问题咨询 [FR] Questions and inquiries about agent k8s watcher May 14, 2024
@chrisdamon
Copy link
Author

@sharang 老师,针对这一场景有没有相应的基准测试报告作为参考?一个watcher的话在不同规模的集群里面(比如node 50+, 100+, 500+),推荐使用多少资源?

@sharang
Copy link
Member

sharang commented May 23, 2024

@chrisdamon 目前还没有,你能反馈一些你们的情况吗?k8s 资源量、deepflow-agent cpu&mem 曲线。

deepflow-agent 在拿到 k8s 资源以后(分页拿),会立即对 json 进行删减(仅留下需要上报的字段),并 zip 压缩之后暂存在内存中。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants