Custom Controller 之 Informer(二)

In Edit

概述

GenericInformer

!FILENAME informers/generic.go:58

  1. type GenericInformer interface {
  2. Informer() cache.SharedIndexInformer
  3. Lister() cache.GenericLister
  4. }
  5. type genericInformer struct {
  6. informer cache.SharedIndexInformer
  7. resource schema.GroupResource
  8. }

SharedIndexInformer

GenericLister

SharedInformerFactory

!FILENAME informers/factory.go:185

  1. type SharedInformerFactory interface {
  2. internalinterfaces.SharedInformerFactory
  3. ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
  4. WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
  5. Admissionregistration() admissionregistration.Interface
  6. Apps() apps.Interface
  7. Auditregistration() auditregistration.Interface
  8. Autoscaling() autoscaling.Interface
  9. Batch() batch.Interface
  10. Certificates() certificates.Interface
  11. Coordination() coordination.Interface
  12. Core() core.Interface
  13. Events() events.Interface
  14. Extensions() extensions.Interface
  15. Networking() networking.Interface
  16. Policy() policy.Interface
  17. Rbac() rbac.Interface
  18. Scheduling() scheduling.Interface
  19. Settings() settings.Interface
  20. Storage() storage.Interface
  21. }

apps.Interface

1556211911682

从 apps.Interface 一路到 DeploymentInformer

!FILENAME informers/apps/interface.go:29

  1. type Interface interface {
  2. // V1 provides access to shared informers for resources in V1.
  3. V1() v1.Interface
  4. // V1beta1 provides access to shared informers for resources in V1beta1.
  5. V1beta1() v1beta1.Interface
  6. // V1beta2 provides access to shared informers for resources in V1beta2.
  7. V1beta2() v1beta2.Interface
  8. }

v1.Interface

!FILENAME informers/apps/v1/interface.go:26

  1. type Interface interface {
  2. // ControllerRevisions returns a ControllerRevisionInformer.
  3. ControllerRevisions() ControllerRevisionInformer
  4. // DaemonSets returns a DaemonSetInformer.
  5. DaemonSets() DaemonSetInformer
  6. // Deployments returns a DeploymentInformer.
  7. Deployments() DeploymentInformer
  8. // ReplicaSets returns a ReplicaSetInformer.
  9. ReplicaSets() ReplicaSetInformer
  10. // StatefulSets returns a StatefulSetInformer.
  11. StatefulSets() StatefulSetInformer
  12. }

DeploymentInformer

!FILENAME informers/apps/v1/deployment.go:36

  1. type DeploymentInformer interface {
  2. Informer() cache.SharedIndexInformer
  3. Lister() v1.DeploymentLister
  4. }

deploymentInformer

!FILENAME informers/apps/v1/deployment.go:41

  1. type deploymentInformer struct {
  2. factory internalinterfaces.SharedInformerFactory
  3. tweakListOptions internalinterfaces.TweakListOptionsFunc
  4. namespace string
  5. }

!FILENAME informers/apps/v1/deployment.go:79

  1. func (f *deploymentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
  2. return NewFilteredDeploymentInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
  3. }
  4. func (f *deploymentInformer) Informer() cache.SharedIndexInformer {
  5. return f.factory.InformerFor(&appsv1.Deployment{}, f.defaultInformer)
  6. }
  7. func (f *deploymentInformer) Lister() v1.DeploymentLister {
  8. return v1.NewDeploymentLister(f.Informer().GetIndexer())
  9. }

sharedInformerFactory

!FILENAME informers/factory.go:53

  1. type sharedInformerFactory struct {
  2. client kubernetes.Interface
  3. namespace string
  4. tweakListOptions internalinterfaces.TweakListOptionsFunc
  5. lock sync.Mutex
  6. defaultResync time.Duration
  7. customResync map[reflect.Type]time.Duration
  8. informers map[reflect.Type]cache.SharedIndexInformer
  9. // startedInformers is used for tracking which informers have been started.
  10. // This allows Start() to be called multiple times safely.
  11. startedInformers map[reflect.Type]bool
  12. }

kubernetes.Interface

1556213817097

Clientset

  1. type Clientset struct {
  2. *discovery.DiscoveryClient
  3. admissionregistrationV1alpha1 *admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Client
  4. admissionregistrationV1beta1 *admissionregistrationv1beta1.AdmissionregistrationV1beta1Client
  5. appsV1beta1 *appsv1beta1.AppsV1beta1Client
  6. appsV1beta2 *appsv1beta2.AppsV1beta2Client
  7. appsV1 *appsv1.AppsV1Client
  8. // ……
  9. coreV1 *corev1.CoreV1Client
  10. eventsV1beta1 *eventsv1beta1.EventsV1beta1Client
  11. extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client
  12. // ……
  13. }

appsv1.AppsV1Client

!FILENAME kubernetes/typed/apps/v1/apps_client.go:38

  1. type AppsV1Client struct {
  2. restClient rest.Interface
  3. }

rest.Interface

  1. type Interface interface {
  2. GetRateLimiter() flowcontrol.RateLimiter
  3. Verb(verb string) *Request
  4. Post() *Request
  5. Put() *Request
  6. Patch(pt types.PatchType) *Request
  7. Get() *Request
  8. Delete() *Request
  9. APIVersion() schema.GroupVersion
  10. }

RESTClient

!FILENAME rest/client.go:61

  1. type RESTClient struct {
  2. // base is the root URL for all invocations of the client
  3. base *url.URL
  4. versionedAPIPath string
  5. contentConfig ContentConfig
  6. serializers Serializers
  7. createBackoffMgr func() BackoffManager
  8. Throttle flowcontrol.RateLimiter
  9. Client *http.Client
  10. }