Merge pull request #49915 from caesarxuchao/controller-ignore-initialize-timeout

Automatic merge from submit-queue (batch tested with PRs 49855, 49915)

Let controllers ignore initialization timeout when creating pods

Partially address https://github.com/kubernetes/kubernetes/issues/48893#issuecomment-318540129.

This only updates the controllers that create pods with `GenerateName`.

The controllers ignore the timeout error when creating the pods, depending on how the initialization progress:
* If the initialization is successful in less than 5 mins, the controller will observe the creation via the informer. All is good.
* If the initialization fails, server will delete the pod, but the controller won't receive any event. The controller will not create new pod until the Creation expectation expires in 5 min.
* If the initialization takes too long (> 5 mins), the Creation expectation expires and the controller will create extra pods.

I'll send follow-up PRs to fix the latter two cases, e.g., by refactoring the sharedInformer.

Kubernetes-commit: f75f49e7a03700b5b300e9ccb61d434487bb0ccc
This commit is contained in:
Kubernetes Publisher 2017-08-05 19:07:53 -07:00
commit 787b46c230
1 changed files with 3 additions and 2 deletions

View File

@ -362,8 +362,9 @@ func (e *Store) WaitForInitialized(ctx genericapirequest.Context, obj runtime.Ob
select {
case event, ok := <-ch:
if !ok {
// TODO: should we just expose the partially initialized object?
return nil, kubeerr.NewServerTimeout(e.QualifiedResource, "create", 0)
msg := fmt.Sprintf("server has timed out waiting for the initialization of %s %s",
e.QualifiedResource.String(), accessor.GetName())
return nil, kubeerr.NewTimeoutError(msg, 0)
}
switch event.Type {
case watch.Deleted: