// RunGarbageCollectorController starts generic garbage collection for the cluster. func (c *MasterConfig) RunGarbageCollectorController(client *osclient.Client, config *restclient.Config) { if !c.ControllerManager.EnableGarbageCollector { return } groupVersionResources, err := client.Discovery().ServerPreferredResources() if err != nil { glog.Fatalf("Failed to get supported resources from server: %v", err) } config = restclient.AddUserAgent(config, "generic-garbage-collector") config.ContentConfig.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: metaonly.NewMetadataCodecFactory()} // TODO: needs to take GVR metaOnlyClientPool := dynamic.NewClientPool(config, dynamic.LegacyAPIPathResolverFunc) config.ContentConfig.NegotiatedSerializer = nil // TODO: needs to take GVR clientPool := dynamic.NewClientPool(config, dynamic.LegacyAPIPathResolverFunc) garbageCollector, err := garbagecollector.NewGarbageCollector(metaOnlyClientPool, clientPool, groupVersionResources) if err != nil { glog.Fatalf("Failed to start the garbage collector: %v", err) } workers := int(c.ControllerManager.ConcurrentGCSyncs) go garbageCollector.Run(workers, utilwait.NeverStop) }