mirror of https://github.com/k3s-io/k3s
Merge pull request #26341 from caesarxuchao/gc-controller-manager
Automatic merge from submit-queue Add garbage collector into kube-controller-manager It's disabled by default. Design doc is at https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/garbage-collection.mdpull/6/head
commit
825cd920ff
|
@ -51,6 +51,7 @@ import (
|
|||
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
|
||||
"k8s.io/kubernetes/pkg/controller/framework"
|
||||
"k8s.io/kubernetes/pkg/controller/framework/informers"
|
||||
"k8s.io/kubernetes/pkg/controller/garbagecollector"
|
||||
"k8s.io/kubernetes/pkg/controller/gc"
|
||||
"k8s.io/kubernetes/pkg/controller/job"
|
||||
namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace"
|
||||
|
@ -454,6 +455,23 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
|||
).Run()
|
||||
time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
|
||||
|
||||
if s.EnableGarbageCollector {
|
||||
gcClientset := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "generic-garbage-collector"))
|
||||
groupVersionResources, err := gcClientset.Discovery().ServerPreferredResources()
|
||||
if err != nil {
|
||||
glog.Fatalf("Failed to get supported resources from server: %v", err)
|
||||
}
|
||||
clientPool := dynamic.NewClientPool(restclient.AddUserAgent(kubeconfig, "generic-garbage-collector"), dynamic.LegacyAPIPathResolverFunc)
|
||||
garbageCollector, err := garbagecollector.NewGarbageCollector(clientPool, groupVersionResources)
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to start the generic garbage collector")
|
||||
} else {
|
||||
// TODO: make this a flag of kube-controller-manager
|
||||
workers := 5
|
||||
go garbageCollector.Run(workers, wait.NeverStop)
|
||||
}
|
||||
}
|
||||
|
||||
// run the shared informers
|
||||
for _, informer := range informers {
|
||||
go informer.Run(wait.NeverStop)
|
||||
|
|
|
@ -89,6 +89,7 @@ func NewCMServer() *CMServer {
|
|||
KubeAPIBurst: 30,
|
||||
LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(),
|
||||
ControllerStartInterval: unversioned.Duration{Duration: 0 * time.Second},
|
||||
EnableGarbageCollector: false,
|
||||
},
|
||||
}
|
||||
return &s
|
||||
|
@ -157,5 +158,6 @@ func (s *CMServer) AddFlags(fs *pflag.FlagSet) {
|
|||
fs.Float32Var(&s.KubeAPIQPS, "kube-api-qps", s.KubeAPIQPS, "QPS to use while talking with kubernetes apiserver")
|
||||
fs.Int32Var(&s.KubeAPIBurst, "kube-api-burst", s.KubeAPIBurst, "Burst to use while talking with kubernetes apiserver")
|
||||
fs.DurationVar(&s.ControllerStartInterval.Duration, "controller-start-interval", s.ControllerStartInterval.Duration, "Interval between starting controller managers.")
|
||||
fs.BoolVar(&s.EnableGarbageCollector, "enable-garbage-collector", s.EnableGarbageCollector, "Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-apiserver. WARNING: the generic garbage collector is an alpha feature.")
|
||||
leaderelection.BindFlags(&s.LeaderElection, fs)
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ kube-controller-manager
|
|||
--deleting-pods-burst=10: Number of nodes on which pods are bursty deleted in case of node failure. For more details look into RateLimiter.
|
||||
--deleting-pods-qps=0.1: Number of nodes per second on which pods are deleted in case of node failure.
|
||||
--deployment-controller-sync-period=30s: Period for syncing the deployments.
|
||||
--enable-garbage-collector[=false]: Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-apiserver. WARNING: the generic garbage collector is an alpha feature.
|
||||
--enable-hostpath-provisioner[=false]: Enable HostPath PV provisioning when running without a cloud provider. This allows testing and development of provisioning features. HostPath provisioning is not supported in any way, won't work in a multi-node cluster, and should not be used for anything other than testing or development.
|
||||
--flex-volume-plugin-dir="/usr/libexec/kubernetes/kubelet-plugins/volume/exec/": Full path of the directory in which the flex volume plugin should search for additional third party volume plugins.
|
||||
--google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication.
|
||||
|
@ -114,7 +115,7 @@ kube-controller-manager
|
|||
--terminated-pod-gc-threshold=12500: Number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled.
|
||||
```
|
||||
|
||||
###### Auto generated by spf13/cobra on 21-May-2016
|
||||
###### Auto generated by spf13/cobra on 26-May-2016
|
||||
|
||||
|
||||
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||
|
|
|
@ -110,6 +110,7 @@ e2e-output-dir
|
|||
e2e-verify-service-account
|
||||
enable-custom-metrics
|
||||
enable-debugging-handlers
|
||||
enable-garbage-collector
|
||||
enable-hostpath-provisioner
|
||||
enable-server
|
||||
enable-swagger-ui
|
||||
|
|
|
@ -134,6 +134,7 @@ func DeepCopy_componentconfig_KubeControllerManagerConfiguration(in KubeControll
|
|||
if err := unversioned.DeepCopy_unversioned_Duration(in.ControllerStartInterval, &out.ControllerStartInterval, c); err != nil {
|
||||
return err
|
||||
}
|
||||
out.EnableGarbageCollector = in.EnableGarbageCollector
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -556,6 +556,10 @@ type KubeControllerManagerConfiguration struct {
|
|||
VolumeConfiguration VolumeConfiguration `json:"volumeConfiguration"`
|
||||
// How long to wait between starting controller managers
|
||||
ControllerStartInterval unversioned.Duration `json:"controllerStartInterval"`
|
||||
// enables the generic garbage collector. MUST be synced with the
|
||||
// corresponding flag of the kube-apiserver. WARNING: the generic garbage
|
||||
// collector is an alpha feature.
|
||||
EnableGarbageCollector bool `json:"enableGarbageCollector"`
|
||||
}
|
||||
|
||||
// VolumeConfiguration contains *all* enumerated flags meant to configure all volume
|
||||
|
|
Loading…
Reference in New Issue