kubernetes 允许为每个客户端配置REST客户端退避管理器,

xvw2m8pv  于 5个月前  发布在  Kubernetes
关注(0)|答案(9)|浏览(135)

你希望添加什么内容?
扩展REST客户端,以便用户在创建RESTClient时可以提供一个可选的退避基数/持续时间。
为什么需要这个?
REST客户端使用环境变量来配置用于GET请求重试的退避管理器,这些请求由于连接重置而出错。如果未设置环境变量,则退避默认为0(这似乎不太好)。此外,由于管理器依赖于环境变量,因此默认值是全局的,因此如果进程连接到多个集群,用户无法在每个集群的基础上进行配置。
https://github.com/kubernetes/client-go/blob/cbe28cf468c43969d2c170e079f556becfc7adb7/rest/client.go#L124

k3bvogb1

k3bvogb12#

BackoffManager是针对每个请求的,并且可以针对每个请求进行修改。
kubernetes/staging/src/k8s.io/client-go/rest/request.go
第225行到第235行
| | // BackOff设置请求的backoff管理器为指定的一个,|
| | // 如果提供nil,则默认为存根实现 |
| | func (r*Request) BackOff(managerBackoffManager) *Request { |
| | if manager==nil { |
| | r.backoff=&NoBackoff{} |
| | return r |
| | } |
| | |
| | r.backoff=manager |
| | return r |
| | } |
但是正如你所说,你只能在客户端中使用环境变量定义BackoffManager生成器🤔

xxls0lw8

xxls0lw83#

/triage已接受
/assign @aojea
您是否介意跟进此事或转交给正确的人?谢谢:)

jfewjypa

jfewjypa4#

@briantkennedy 是否是按需配置而不是选项?

cgfeq70w

cgfeq70w5#

这与我们从运行中的Informer收到的请求遇到的问题有关。如果在通过工厂创建informer时暴露了该选项,那么也可以正常工作。

n1bvdmb6

n1bvdmb66#

如果我们将BackoffBaseBackoffDuration添加到rest.Config中,并使用一个装饰器来获取BackoffManager,我们可以在不修改NewRESTClient签名的情况下实现这一点。

4ioopgfo

4ioopgfo7#

这与我们遇到的一个问题有关,即来自正在运行的Informer的请求。我不确定这个选项是否能解决Informer断开连接的问题🤔

kmynzznz

kmynzznz8#

这个问题已经超过一年没有更新了,应该重新进行优先级评估。
你可以:

  • 确认这个问题仍然与 /triage accepted (仅组织成员)相关
  • /close 关闭这个问题

有关优先级评估过程的更多详细信息,请参见 https://www.kubernetes.dev/docs/guide/issue-triage/
已接受移除优先级评估

相关问题