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"
|
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework/informers"
|
"k8s.io/kubernetes/pkg/controller/framework/informers"
|
||||||
|
"k8s.io/kubernetes/pkg/controller/garbagecollector"
|
||||||
"k8s.io/kubernetes/pkg/controller/gc"
|
"k8s.io/kubernetes/pkg/controller/gc"
|
||||||
"k8s.io/kubernetes/pkg/controller/job"
|
"k8s.io/kubernetes/pkg/controller/job"
|
||||||
namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace"
|
namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace"
|
||||||
|
@ -454,6 +455,23 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
).Run()
|
).Run()
|
||||||
time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
|
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
|
// run the shared informers
|
||||||
for _, informer := range informers {
|
for _, informer := range informers {
|
||||||
go informer.Run(wait.NeverStop)
|
go informer.Run(wait.NeverStop)
|
||||||
|
|
|
@ -89,6 +89,7 @@ func NewCMServer() *CMServer {
|
||||||
KubeAPIBurst: 30,
|
KubeAPIBurst: 30,
|
||||||
LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(),
|
LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(),
|
||||||
ControllerStartInterval: unversioned.Duration{Duration: 0 * time.Second},
|
ControllerStartInterval: unversioned.Duration{Duration: 0 * time.Second},
|
||||||
|
EnableGarbageCollector: false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return &s
|
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.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.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.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)
|
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-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.
|
--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.
|
--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.
|
--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.
|
--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.
|
--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.
|
--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 -->
|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||||
|
|
|
@ -110,6 +110,7 @@ e2e-output-dir
|
||||||
e2e-verify-service-account
|
e2e-verify-service-account
|
||||||
enable-custom-metrics
|
enable-custom-metrics
|
||||||
enable-debugging-handlers
|
enable-debugging-handlers
|
||||||
|
enable-garbage-collector
|
||||||
enable-hostpath-provisioner
|
enable-hostpath-provisioner
|
||||||
enable-server
|
enable-server
|
||||||
enable-swagger-ui
|
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 {
|
if err := unversioned.DeepCopy_unversioned_Duration(in.ControllerStartInterval, &out.ControllerStartInterval, c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
out.EnableGarbageCollector = in.EnableGarbageCollector
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -556,6 +556,10 @@ type KubeControllerManagerConfiguration struct {
|
||||||
VolumeConfiguration VolumeConfiguration `json:"volumeConfiguration"`
|
VolumeConfiguration VolumeConfiguration `json:"volumeConfiguration"`
|
||||||
// How long to wait between starting controller managers
|
// How long to wait between starting controller managers
|
||||||
ControllerStartInterval unversioned.Duration `json:"controllerStartInterval"`
|
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
|
// VolumeConfiguration contains *all* enumerated flags meant to configure all volume
|
||||||
|
|
Loading…
Reference in New Issue