golang 获取 kubernetes 资源(30000+ configmaps)失败

我想使用 client-go 来获取 Kubernetes 集群中的资源。由于数据量很大,当我获取 configmap 连接时,连接已关闭。

stream error when reading response body, may be caused by closed connection. Please retry. Original error: stream error: stream ID 695; INTERNAL_ERROR

配置图:

$ kubectl -n kube-system get cm |wc -l
   35937

代码:

cms, err := client.CoreV1().ConfigMaps(kube-system).List(context.TODO(), v1.ListOptions{})

我尝试使用 Limit 参数,我可以获取一些数据,但我不知道如何获取所有数据。

cms, err := client.CoreV1().ConfigMaps(kube-system).List(context.TODO(), v1.ListOptions{Limit: 1000 })

我是 Go 新手。任何关于如何去做的指示将不胜感激。


慕仙森
浏览 129回答 2
2回答

四季花海

v1.ListOptions的文档描述了它是如何工作的:limit 是列表调用返回的最大响应数。如果存在更多项目,服务器会将continue列表元数据上的字段设置为可用于相同初始查询以检索下一组结果的值。这意味着您应该检查响应,保存continue字段的值(以及实际结果),然后重新发出相同的命令,但continue设置为刚刚看到的值。重复直到返回的continue字段为空(或发生错误)。有关处理大结果分块的详细信息,请参阅API 概念页面。

慕姐4208626

您应该使用ListPager对需要查询许多对象的请求进行分页。ListPager 包含缓冲页面,因此与仅使用 Limit 和 Continue 值相比,它提高了性能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go