Skip to content

Commit 0d7eb70

Browse files
authored
Merge pull request kubernetes#74532 from deads2k/crd-health
CRD server wait for CRDs to sync before reporting healthy
2 parents 91bc809 + 62c32fd commit 0d7eb70

File tree

1 file changed

+9
-0
lines changed
  • staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver

1 file changed

+9
-0
lines changed

staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
"k8s.io/apimachinery/pkg/runtime"
3838
"k8s.io/apimachinery/pkg/runtime/schema"
3939
"k8s.io/apimachinery/pkg/runtime/serializer"
40+
"k8s.io/apimachinery/pkg/util/wait"
4041
"k8s.io/apimachinery/pkg/version"
4142
"k8s.io/apiserver/pkg/endpoints/discovery"
4243
genericregistry "k8s.io/apiserver/pkg/registry/generic"
@@ -209,6 +210,14 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
209210
go finalizingController.Run(5, context.StopCh)
210211
return nil
211212
})
213+
// we don't want to report healthy until we can handle all CRDs that have already been registered. Waiting for the informer
214+
// to sync makes sure that the lister will be valid before we begin. There may still be races for CRDs added after startup,
215+
// but we won't go healthy until we can handle the ones already present.
216+
s.GenericAPIServer.AddPostStartHookOrDie("crd-informer-synced", func(context genericapiserver.PostStartHookContext) error {
217+
return wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) {
218+
return s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer().HasSynced(), nil
219+
}, context.StopCh)
220+
})
212221

213222
return s, nil
214223
}

0 commit comments

Comments
 (0)