跳到主要内容

44.restClient

PR #995

Break up API client into per-resource client and common cod

  1. 抽出4个interface
type Interface interface {
PodInterface
ReplicationControllerInterface
ServiceInterface
VersionInterface
}
  1. client 改名为 RESTClient

PR #961

Remove synchronous assignPod call from create pod

This is the last piece of scheduler separation. 创建pod的时候去除 assignPod

PR #899

Allow Kube proxy to watch for service/endpoint changes

公开 GET /endpoints/serviceName 。允许 watch endpoints 和具有 fields=Name%3DserviceName 的services

代码解析一

// Jitter returns a time.Duration between duration and duration + maxFactor * duration,
// to allow clients to avoid converging on periodic behavior. If maxFactor is 0.0, a
// suggested default value will be chosen.
func Jitter(duration time.Duration, maxFactor float64) time.Duration {
if maxFactor <= 0.0 {
maxFactor = 1.0
}
wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration))
return wait
}

这段代码定义了一个Jitter函数,这个函数可以产生一个介于duration和duration + maxFactor * duration之间的时间间隔。这个函数主要用于避免客户端在执行周期性任务时,所有的请求都在同一时间点发生,造成"脉冲"现象。

Jitter函数接收两个参数:

duration:这是一个基础的时间间隔。 maxFactor:这个参数用于控制随机增加的时间间隔的最大值。如果maxFactor是0或者小于0,则将其默认设置为1。 函数中,rand.Float64()用于生成一个0到1之间的随机浮点数。然后这个随机数乘以maxFactor和duration的乘积,得到的结果就是随机增加的时间间隔。

返回的时间间隔是duration加上随机增加的时间间隔。

"Jitter"或"抖动"通常用于处理网络延迟或其他需要等待的操作,以避免所有操作同时发生。例如,假设有一个服务每隔5分钟检查一次更新,有许多客户端都连接到这个服务。如果没有jitter,那么每隔5分钟,服务就会收到大量的请求。通过使用jitter,可以使客户端在检查更新的时间上稍微偏移,这样就不会所有请求都在同一时间发生了。

代码解析二

kubeproxy 支持从 apiserver 监听 endpoints、services 的变化,之前是直连etcd

PR #1099

Add the resource version to api.*List items from etcd Allows clients to watch more easily (can invoke Get, then Watch).

PR #1117

Invert api and api/v1beta1 dependencies

The v1beta1 package is now a good example of what an api plugin should v1beta1 包现在是 api 插件应该是什么的一个很好的例子

do to version its types. 执行以对其类型进行版本控制。