code: func (c *Config) New(proxyTransport *http.Transport, serviceResolver webhook.ServiceResolver) ([]admission.PluginInitializer, server.PostStartHookFunc, error) {
  	webhookAuthResolverWrapper := webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, c.LoopbackClientConfig)
  	webhookPluginInitializer := webhookinit.NewPluginInitializer(webhookAuthResolverWrapper, serviceResolver)
  
  	var cloudConfig []byte
  	if c.CloudConfigFile != "" {
  		var err error
  		cloudConfig, err = ioutil.ReadFile(c.CloudConfigFile)
  		if err != nil {
  			klog.Fatalf("Error reading from cloud configuration file %s: %#v", c.CloudConfigFile, err)
  		}
  	}
  	clientset, err := kubernetes.NewForConfig(c.LoopbackClientConfig)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	discoveryClient := cacheddiscovery.NewMemCacheClient(clientset.Discovery())
  	discoveryRESTMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient)
  	kubePluginInitializer := NewPluginInitializer(
  		cloudConfig,
  		discoveryRESTMapper,
  		quotainstall.NewQuotaConfigurationForAdmission(),
  	)
  
  	admissionPostStartHook := func(context genericapiserver.PostStartHookContext) error {
  		discoveryRESTMapper.Reset()
  		go utilwait.Until(discoveryRESTMapper.Reset, 30*time.Second, context.StopCh)
  		return nil
  	}
  
  	return []admission.PluginInitializer{webhookPluginInitializer, kubePluginInitializer}, admissionPostStartHook, nil
  }
docs: // New sets up the plugins and admission start hooks needed for admission