Skip to content

Commit 711dc0b

Browse files
committed
Increase Burst limit for discovery client
1 parent 0e15d26 commit 711dc0b

File tree

3 files changed

+118
-2
lines changed

3 files changed

+118
-2
lines changed

CHANGELOG-1.17.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ The Kubernetes in-tree storage plugin to Container Storage Interface (CSI) migra
133133
## Known Issues
134134
- volumeDevices mapping ignored when container is privileged
135135
- The `Should recreate evicted statefulset` conformance [test]( https://github.com/kubernetes/kubernetes/blob/master/test/e2e/apps/statefulset.go) fails because `Pod ss-0 expected to be re-created at least once`. This was caused by the `Predicate PodFitsHostPorts failed` scheduling error. The root cause was a host port conflict for port `21017`. This port was in-use as an ephemeral port by another application running on the node. This will be looked at for the 1.18 release.
136+
- client-go discovery clients constructed using `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie` default to rate limits that cause normal discovery request patterns to take several seconds. This is fixed in https://issue.k8s.io/86168 and will be resolved in v1.17.1. As a workaround, the `Burst` value can be adjusted higher in the rest.Config passed into `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie`.
136137

137138
## Urgent Upgrade Notes
138139
### (No, really, you MUST read this before you upgrade)

staging/src/k8s.io/client-go/discovery/discovery_client.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,13 @@ func setDiscoveryDefaults(config *restclient.Config) error {
463463
if config.Timeout == 0 {
464464
config.Timeout = defaultTimeout
465465
}
466+
if config.Burst == 0 && config.QPS < 100 {
467+
// discovery is expected to be bursty, increase the default burst
468+
// to accommodate looking up resource info for many API groups.
469+
// matches burst set by ConfigFlags#ToDiscoveryClient().
470+
// see https://issue.k8s.io/86149
471+
config.Burst = 100
472+
}
466473
codec := runtime.NoopEncoder{Decoder: scheme.Codecs.UniversalDecoder()}
467474
config.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec})
468475
if len(config.UserAgent) == 0 {

staging/src/k8s.io/client-go/discovery/discovery_client_test.go

Lines changed: 110 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"net/http/httptest"
2525
"reflect"
2626
"testing"
27+
"time"
2728

2829
"github.com/gogo/protobuf/proto"
2930
"github.com/googleapis/gnostic/OpenAPIv2"
@@ -198,6 +199,26 @@ func TestGetServerResources(t *testing.T) {
198199
{Name: "jobs", Namespaced: true, Kind: "Job"},
199200
},
200201
}
202+
extensionsbeta3 := metav1.APIResourceList{GroupVersion: "extensions/v1beta3", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
203+
extensionsbeta4 := metav1.APIResourceList{GroupVersion: "extensions/v1beta4", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
204+
extensionsbeta5 := metav1.APIResourceList{GroupVersion: "extensions/v1beta5", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
205+
extensionsbeta6 := metav1.APIResourceList{GroupVersion: "extensions/v1beta6", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
206+
extensionsbeta7 := metav1.APIResourceList{GroupVersion: "extensions/v1beta7", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
207+
extensionsbeta8 := metav1.APIResourceList{GroupVersion: "extensions/v1beta8", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
208+
extensionsbeta9 := metav1.APIResourceList{GroupVersion: "extensions/v1beta9", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
209+
extensionsbeta10 := metav1.APIResourceList{GroupVersion: "extensions/v1beta10", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
210+
211+
appsbeta1 := metav1.APIResourceList{GroupVersion: "apps/v1beta1", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
212+
appsbeta2 := metav1.APIResourceList{GroupVersion: "apps/v1beta2", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
213+
appsbeta3 := metav1.APIResourceList{GroupVersion: "apps/v1beta3", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
214+
appsbeta4 := metav1.APIResourceList{GroupVersion: "apps/v1beta4", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
215+
appsbeta5 := metav1.APIResourceList{GroupVersion: "apps/v1beta5", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
216+
appsbeta6 := metav1.APIResourceList{GroupVersion: "apps/v1beta6", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
217+
appsbeta7 := metav1.APIResourceList{GroupVersion: "apps/v1beta7", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
218+
appsbeta8 := metav1.APIResourceList{GroupVersion: "apps/v1beta8", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
219+
appsbeta9 := metav1.APIResourceList{GroupVersion: "apps/v1beta9", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
220+
appsbeta10 := metav1.APIResourceList{GroupVersion: "apps/v1beta10", APIResources: []metav1.APIResource{{Name: "deployments", Namespaced: true, Kind: "Deployment"}}}
221+
201222
tests := []struct {
202223
resourcesList *metav1.APIResourceList
203224
path string
@@ -232,6 +253,42 @@ func TestGetServerResources(t *testing.T) {
232253
list = &beta
233254
case "/apis/extensions/v1beta2":
234255
list = &beta2
256+
case "/apis/extensions/v1beta3":
257+
list = &extensionsbeta3
258+
case "/apis/extensions/v1beta4":
259+
list = &extensionsbeta4
260+
case "/apis/extensions/v1beta5":
261+
list = &extensionsbeta5
262+
case "/apis/extensions/v1beta6":
263+
list = &extensionsbeta6
264+
case "/apis/extensions/v1beta7":
265+
list = &extensionsbeta7
266+
case "/apis/extensions/v1beta8":
267+
list = &extensionsbeta8
268+
case "/apis/extensions/v1beta9":
269+
list = &extensionsbeta9
270+
case "/apis/extensions/v1beta10":
271+
list = &extensionsbeta10
272+
case "/apis/apps/v1beta1":
273+
list = &appsbeta1
274+
case "/apis/apps/v1beta2":
275+
list = &appsbeta2
276+
case "/apis/apps/v1beta3":
277+
list = &appsbeta3
278+
case "/apis/apps/v1beta4":
279+
list = &appsbeta4
280+
case "/apis/apps/v1beta5":
281+
list = &appsbeta5
282+
case "/apis/apps/v1beta6":
283+
list = &appsbeta6
284+
case "/apis/apps/v1beta7":
285+
list = &appsbeta7
286+
case "/apis/apps/v1beta8":
287+
list = &appsbeta8
288+
case "/apis/apps/v1beta9":
289+
list = &appsbeta9
290+
case "/apis/apps/v1beta10":
291+
list = &appsbeta10
235292
case "/api":
236293
list = &metav1.APIVersions{
237294
Versions: []string{
@@ -241,11 +298,34 @@ func TestGetServerResources(t *testing.T) {
241298
case "/apis":
242299
list = &metav1.APIGroupList{
243300
Groups: []metav1.APIGroup{
301+
{
302+
Name: "apps",
303+
Versions: []metav1.GroupVersionForDiscovery{
304+
{GroupVersion: "apps/v1beta1", Version: "v1beta1"},
305+
{GroupVersion: "apps/v1beta2", Version: "v1beta2"},
306+
{GroupVersion: "apps/v1beta3", Version: "v1beta3"},
307+
{GroupVersion: "apps/v1beta4", Version: "v1beta4"},
308+
{GroupVersion: "apps/v1beta5", Version: "v1beta5"},
309+
{GroupVersion: "apps/v1beta6", Version: "v1beta6"},
310+
{GroupVersion: "apps/v1beta7", Version: "v1beta7"},
311+
{GroupVersion: "apps/v1beta8", Version: "v1beta8"},
312+
{GroupVersion: "apps/v1beta9", Version: "v1beta9"},
313+
{GroupVersion: "apps/v1beta10", Version: "v1beta10"},
314+
},
315+
},
244316
{
245317
Name: "extensions",
246318
Versions: []metav1.GroupVersionForDiscovery{
247319
{GroupVersion: "extensions/v1beta1", Version: "v1beta1"},
248320
{GroupVersion: "extensions/v1beta2", Version: "v1beta2"},
321+
{GroupVersion: "extensions/v1beta3", Version: "v1beta3"},
322+
{GroupVersion: "extensions/v1beta4", Version: "v1beta4"},
323+
{GroupVersion: "extensions/v1beta5", Version: "v1beta5"},
324+
{GroupVersion: "extensions/v1beta6", Version: "v1beta6"},
325+
{GroupVersion: "extensions/v1beta7", Version: "v1beta7"},
326+
{GroupVersion: "extensions/v1beta8", Version: "v1beta8"},
327+
{GroupVersion: "extensions/v1beta9", Version: "v1beta9"},
328+
{GroupVersion: "extensions/v1beta10", Version: "v1beta10"},
249329
},
250330
},
251331
},
@@ -265,8 +345,8 @@ func TestGetServerResources(t *testing.T) {
265345
w.Write(output)
266346
}))
267347
defer server.Close()
268-
client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL})
269348
for _, test := range tests {
349+
client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL})
270350
got, err := client.ServerResourcesForGroupVersion(test.request)
271351
if test.expectErr {
272352
if err == nil {
@@ -283,12 +363,40 @@ func TestGetServerResources(t *testing.T) {
283363
}
284364
}
285365

366+
client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL})
367+
start := time.Now()
286368
serverResources, err := client.ServerResources()
287369
if err != nil {
288370
t.Errorf("unexpected error: %v", err)
289371
}
372+
end := time.Now()
373+
if d := end.Sub(start); d > time.Second {
374+
t.Errorf("took too long to perform discovery: %s", d)
375+
}
290376
serverGroupVersions := groupVersions(serverResources)
291-
expectedGroupVersions := []string{"v1", "extensions/v1beta1", "extensions/v1beta2"}
377+
expectedGroupVersions := []string{
378+
"v1",
379+
"apps/v1beta1",
380+
"apps/v1beta2",
381+
"apps/v1beta3",
382+
"apps/v1beta4",
383+
"apps/v1beta5",
384+
"apps/v1beta6",
385+
"apps/v1beta7",
386+
"apps/v1beta8",
387+
"apps/v1beta9",
388+
"apps/v1beta10",
389+
"extensions/v1beta1",
390+
"extensions/v1beta2",
391+
"extensions/v1beta3",
392+
"extensions/v1beta4",
393+
"extensions/v1beta5",
394+
"extensions/v1beta6",
395+
"extensions/v1beta7",
396+
"extensions/v1beta8",
397+
"extensions/v1beta9",
398+
"extensions/v1beta10",
399+
}
292400
if !reflect.DeepEqual(expectedGroupVersions, serverGroupVersions) {
293401
t.Errorf("unexpected group versions: %v", diff.ObjectReflectDiff(expectedGroupVersions, serverGroupVersions))
294402
}

0 commit comments

Comments
 (0)