From d29f1944746f2453f48fefe6a4ae6aa626acef29 Mon Sep 17 00:00:00 2001 From: YueHonghui Date: Thu, 1 Aug 2019 13:36:14 +0800 Subject: [PATCH] add flag concurrent-statefulset-syncs to kube-controller-manager (#79169) * add flag `concurrent-statefulset-syncs` to set number of concurrent workers for statefulset controller * change default value of ConcurrentStatefulSetSyncs from 1 to 5 * 1. fix doc comment of statefulset config types.go 2. add missing deps k8s.io/kubernetes/pkg/controller/statefulset/config * add missing dep k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1 * updated bazel BUILD files * update kube-controller-manager options testcase * fix codegen * fix golint error * fix testcase --- api/api-rules/violation_exceptions.list | 2 + cmd/kube-controller-manager/app/apps.go | 2 +- cmd/kube-controller-manager/app/options/BUILD | 3 + .../app/options/options.go | 9 ++ .../app/options/options_test.go | 7 ++ .../app/options/statefulsetcontroller.go | 63 +++++++++++ hack/.golint_failures | 1 + pkg/controller/apis/config/BUILD | 1 + pkg/controller/apis/config/types.go | 4 + pkg/controller/apis/config/v1alpha1/BUILD | 1 + .../apis/config/v1alpha1/defaults.go | 3 + pkg/controller/apis/config/v1alpha1/doc.go | 1 + .../v1alpha1/zz_generated.conversion.go | 7 ++ .../apis/config/zz_generated.deepcopy.go | 1 + pkg/controller/statefulset/BUILD | 5 +- pkg/controller/statefulset/config/BUILD | 29 +++++ pkg/controller/statefulset/config/OWNERS | 14 +++ pkg/controller/statefulset/config/doc.go | 19 ++++ pkg/controller/statefulset/config/types.go | 25 +++++ .../statefulset/config/v1alpha1/BUILD | 36 +++++++ .../statefulset/config/v1alpha1/conversion.go | 40 +++++++ .../statefulset/config/v1alpha1/defaults.go | 36 +++++++ .../statefulset/config/v1alpha1/doc.go | 21 ++++ .../statefulset/config/v1alpha1/register.go | 31 ++++++ .../v1alpha1/zz_generated.conversion.go | 101 ++++++++++++++++++ .../config/v1alpha1/zz_generated.deepcopy.go | 21 ++++ .../config/zz_generated.deepcopy.go | 37 +++++++ .../config/v1alpha1/types.go | 11 ++ .../config/v1alpha1/zz_generated.deepcopy.go | 17 +++ 29 files changed, 546 insertions(+), 2 deletions(-) create mode 100644 cmd/kube-controller-manager/app/options/statefulsetcontroller.go create mode 100644 pkg/controller/statefulset/config/BUILD create mode 100644 pkg/controller/statefulset/config/OWNERS create mode 100644 pkg/controller/statefulset/config/doc.go create mode 100644 pkg/controller/statefulset/config/types.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/BUILD create mode 100644 pkg/controller/statefulset/config/v1alpha1/conversion.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/defaults.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/doc.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/register.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/zz_generated.conversion.go create mode 100644 pkg/controller/statefulset/config/v1alpha1/zz_generated.deepcopy.go create mode 100644 pkg/controller/statefulset/config/zz_generated.deepcopy.go diff --git a/api/api-rules/violation_exceptions.list b/api/api-rules/violation_exceptions.list index 0d6ccead032..f439f48da5c 100644 --- a/api/api-rules/violation_exceptions.list +++ b/api/api-rules/violation_exceptions.list @@ -599,6 +599,7 @@ API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,K API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ResourceQuotaController API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,SAController API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ServiceController +API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,StatefulSetController API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,TTLAfterFinishedController API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NamespaceControllerConfiguration,ConcurrentNamespaceSyncs API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NamespaceControllerConfiguration,NamespaceSyncPeriod @@ -630,6 +631,7 @@ API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,S API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,SAControllerConfiguration,RootCAFile API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,SAControllerConfiguration,ServiceAccountKeyFile API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ServiceControllerConfiguration,ConcurrentServiceSyncs +API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,StatefulSetControllerConfiguration,ConcurrentStatefulSetSyncs API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,TTLAfterFinishedControllerConfiguration,ConcurrentTTLSyncs API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,EnableDynamicProvisioning API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,EnableHostPathProvisioning diff --git a/cmd/kube-controller-manager/app/apps.go b/cmd/kube-controller-manager/app/apps.go index d59c34a05f0..88727a1977e 100644 --- a/cmd/kube-controller-manager/app/apps.go +++ b/cmd/kube-controller-manager/app/apps.go @@ -62,7 +62,7 @@ func startStatefulSetController(ctx ControllerContext) (http.Handler, bool, erro ctx.InformerFactory.Core().V1().PersistentVolumeClaims(), ctx.InformerFactory.Apps().V1().ControllerRevisions(), ctx.ClientBuilder.ClientOrDie("statefulset-controller"), - ).Run(1, ctx.Stop) + ).Run(int(ctx.ComponentConfig.StatefulSetController.ConcurrentStatefulSetSyncs), ctx.Stop) return nil, true, nil } diff --git a/cmd/kube-controller-manager/app/options/BUILD b/cmd/kube-controller-manager/app/options/BUILD index 0062185ae15..5d6a80c5e1e 100644 --- a/cmd/kube-controller-manager/app/options/BUILD +++ b/cmd/kube-controller-manager/app/options/BUILD @@ -28,6 +28,7 @@ go_library( "replicationcontroller.go", "resourcequotacontroller.go", "serviceaccountcontroller.go", + "statefulsetcontroller.go", "ttlafterfinishedcontroller.go", ], importpath = "k8s.io/kubernetes/cmd/kube-controller-manager/app/options", @@ -52,6 +53,7 @@ go_library( "//pkg/controller/replication/config:go_default_library", "//pkg/controller/resourcequota/config:go_default_library", "//pkg/controller/serviceaccount/config:go_default_library", + "//pkg/controller/statefulset/config:go_default_library", "//pkg/controller/ttlafterfinished/config:go_default_library", "//pkg/controller/volume/attachdetach/config:go_default_library", "//pkg/controller/volume/persistentvolume/config:go_default_library", @@ -110,6 +112,7 @@ go_test( "//pkg/controller/resourcequota/config:go_default_library", "//pkg/controller/service/config:go_default_library", "//pkg/controller/serviceaccount/config:go_default_library", + "//pkg/controller/statefulset/config:go_default_library", "//pkg/controller/ttlafterfinished/config:go_default_library", "//pkg/controller/volume/attachdetach/config:go_default_library", "//pkg/controller/volume/persistentvolume/config:go_default_library", diff --git a/cmd/kube-controller-manager/app/options/options.go b/cmd/kube-controller-manager/app/options/options.go index cad1edb2979..42e096456dd 100644 --- a/cmd/kube-controller-manager/app/options/options.go +++ b/cmd/kube-controller-manager/app/options/options.go @@ -63,6 +63,7 @@ type KubeControllerManagerOptions struct { CSRSigningController *CSRSigningControllerOptions DaemonSetController *DaemonSetControllerOptions DeploymentController *DeploymentControllerOptions + StatefulSetController *StatefulSetControllerOptions DeprecatedFlags *DeprecatedControllerOptions EndpointController *EndpointControllerOptions GarbageCollectorController *GarbageCollectorControllerOptions @@ -114,6 +115,9 @@ func NewKubeControllerManagerOptions() (*KubeControllerManagerOptions, error) { DeploymentController: &DeploymentControllerOptions{ &componentConfig.DeploymentController, }, + StatefulSetController: &StatefulSetControllerOptions{ + &componentConfig.StatefulSetController, + }, DeprecatedFlags: &DeprecatedControllerOptions{ &componentConfig.DeprecatedController, }, @@ -216,6 +220,7 @@ func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledBy s.AttachDetachController.AddFlags(fss.FlagSet("attachdetach controller")) s.CSRSigningController.AddFlags(fss.FlagSet("csrsigning controller")) s.DeploymentController.AddFlags(fss.FlagSet("deployment controller")) + s.StatefulSetController.AddFlags(fss.FlagSet("statefulset controller")) s.DaemonSetController.AddFlags(fss.FlagSet("daemonset controller")) s.DeprecatedFlags.AddFlags(fss.FlagSet("deprecated")) s.EndpointController.AddFlags(fss.FlagSet("endpoint controller")) @@ -261,6 +266,9 @@ func (s *KubeControllerManagerOptions) ApplyTo(c *kubecontrollerconfig.Config) e if err := s.DeploymentController.ApplyTo(&c.ComponentConfig.DeploymentController); err != nil { return err } + if err := s.StatefulSetController.ApplyTo(&c.ComponentConfig.StatefulSetController); err != nil { + return err + } if err := s.DeprecatedFlags.ApplyTo(&c.ComponentConfig.DeprecatedController); err != nil { return err } @@ -342,6 +350,7 @@ func (s *KubeControllerManagerOptions) Validate(allControllers []string, disable errs = append(errs, s.CSRSigningController.Validate()...) errs = append(errs, s.DaemonSetController.Validate()...) errs = append(errs, s.DeploymentController.Validate()...) + errs = append(errs, s.StatefulSetController.Validate()...) errs = append(errs, s.DeprecatedFlags.Validate()...) errs = append(errs, s.EndpointController.Validate()...) errs = append(errs, s.GarbageCollectorController.Validate()...) diff --git a/cmd/kube-controller-manager/app/options/options_test.go b/cmd/kube-controller-manager/app/options/options_test.go index c1b10aea590..85b037b49a8 100644 --- a/cmd/kube-controller-manager/app/options/options_test.go +++ b/cmd/kube-controller-manager/app/options/options_test.go @@ -47,6 +47,7 @@ import ( resourcequotaconfig "k8s.io/kubernetes/pkg/controller/resourcequota/config" serviceconfig "k8s.io/kubernetes/pkg/controller/service/config" serviceaccountconfig "k8s.io/kubernetes/pkg/controller/serviceaccount/config" + statefulsetconfig "k8s.io/kubernetes/pkg/controller/statefulset/config" ttlafterfinishedconfig "k8s.io/kubernetes/pkg/controller/ttlafterfinished/config" attachdetachconfig "k8s.io/kubernetes/pkg/controller/volume/attachdetach/config" persistentvolumeconfig "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config" @@ -71,6 +72,7 @@ func TestAddFlags(t *testing.T) { "--cluster-signing-cert-file=/cluster-signing-cert", "--cluster-signing-key-file=/cluster-signing-key", "--concurrent-deployment-syncs=10", + "--concurrent-statefulset-syncs=15", "--concurrent-endpoint-syncs=10", "--concurrent-gc-syncs=30", "--concurrent-namespace-syncs=20", @@ -216,6 +218,11 @@ func TestAddFlags(t *testing.T) { DeploymentControllerSyncPeriod: metav1.Duration{Duration: 45 * time.Second}, }, }, + StatefulSetController: &StatefulSetControllerOptions{ + &statefulsetconfig.StatefulSetControllerConfiguration{ + ConcurrentStatefulSetSyncs: 15, + }, + }, DeprecatedFlags: &DeprecatedControllerOptions{ &kubectrlmgrconfig.DeprecatedControllerConfiguration{ DeletingPodsQPS: 0.1, diff --git a/cmd/kube-controller-manager/app/options/statefulsetcontroller.go b/cmd/kube-controller-manager/app/options/statefulsetcontroller.go new file mode 100644 index 00000000000..fedf06893f8 --- /dev/null +++ b/cmd/kube-controller-manager/app/options/statefulsetcontroller.go @@ -0,0 +1,63 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package options + +import ( + "fmt" + + "github.com/spf13/pflag" + + statefulsetconfig "k8s.io/kubernetes/pkg/controller/statefulset/config" +) + +// StatefulSetControllerOptions holds the StatefulSetController options. +type StatefulSetControllerOptions struct { + *statefulsetconfig.StatefulSetControllerConfiguration +} + +// AddFlags adds flags related to StatefulSetController for controller manager to the specified FlagSet. +func (o *StatefulSetControllerOptions) AddFlags(fs *pflag.FlagSet) { + if o == nil { + return + } + + fs.Int32Var(&o.ConcurrentStatefulSetSyncs, "concurrent-statefulset-syncs", o.ConcurrentStatefulSetSyncs, "The number of statefulset objects that are allowed to sync concurrently. Larger number = more responsive statefulsets, but more CPU (and network) load") +} + +// ApplyTo fills up StatefulSetController config with options. +func (o *StatefulSetControllerOptions) ApplyTo(cfg *statefulsetconfig.StatefulSetControllerConfiguration) error { + if o == nil { + return nil + } + + cfg.ConcurrentStatefulSetSyncs = o.ConcurrentStatefulSetSyncs + + return nil +} + +// Validate checks validation of StatefulSetControllerOptions. +func (o *StatefulSetControllerOptions) Validate() []error { + if o == nil { + return nil + } + + errs := []error{} + if o.ConcurrentStatefulSetSyncs < 1 { + errs = append(errs, fmt.Errorf("concurrent-statefulset-syncs must be greater than 0, but got %d", o.ConcurrentStatefulSetSyncs)) + } + return errs +} diff --git a/hack/.golint_failures b/hack/.golint_failures index f8b2442f2a6..ea895ebf5f6 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -90,6 +90,7 @@ pkg/controller/service pkg/controller/service/config/v1alpha1 pkg/controller/serviceaccount/config/v1alpha1 pkg/controller/statefulset +pkg/controller/statefulset/config/v1alpha1 pkg/controller/ttl pkg/controller/ttlafterfinished/config/v1alpha1 pkg/controller/volume/attachdetach diff --git a/pkg/controller/apis/config/BUILD b/pkg/controller/apis/config/BUILD index 3cc35f7f851..4d2dfa85ace 100644 --- a/pkg/controller/apis/config/BUILD +++ b/pkg/controller/apis/config/BUILD @@ -27,6 +27,7 @@ go_library( "//pkg/controller/resourcequota/config:go_default_library", "//pkg/controller/service/config:go_default_library", "//pkg/controller/serviceaccount/config:go_default_library", + "//pkg/controller/statefulset/config:go_default_library", "//pkg/controller/ttlafterfinished/config:go_default_library", "//pkg/controller/volume/attachdetach/config:go_default_library", "//pkg/controller/volume/persistentvolume/config:go_default_library", diff --git a/pkg/controller/apis/config/types.go b/pkg/controller/apis/config/types.go index 43fd5d46b2c..17671118378 100644 --- a/pkg/controller/apis/config/types.go +++ b/pkg/controller/apis/config/types.go @@ -35,6 +35,7 @@ import ( resourcequotaconfig "k8s.io/kubernetes/pkg/controller/resourcequota/config" serviceconfig "k8s.io/kubernetes/pkg/controller/service/config" serviceaccountconfig "k8s.io/kubernetes/pkg/controller/serviceaccount/config" + statefulsetconfig "k8s.io/kubernetes/pkg/controller/statefulset/config" ttlafterfinishedconfig "k8s.io/kubernetes/pkg/controller/ttlafterfinished/config" attachdetachconfig "k8s.io/kubernetes/pkg/controller/volume/attachdetach/config" persistentvolumeconfig "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config" @@ -64,6 +65,9 @@ type KubeControllerManagerConfiguration struct { // DeploymentControllerConfiguration holds configuration for // DeploymentController related features. DeploymentController deploymentconfig.DeploymentControllerConfiguration + // StatefulSetControllerConfiguration holds configuration for + // StatefulSetController related features. + StatefulSetController statefulsetconfig.StatefulSetControllerConfiguration // DeprecatedControllerConfiguration holds configuration for some deprecated // features. DeprecatedController DeprecatedControllerConfiguration diff --git a/pkg/controller/apis/config/v1alpha1/BUILD b/pkg/controller/apis/config/v1alpha1/BUILD index 17264bf1496..dce61f10472 100644 --- a/pkg/controller/apis/config/v1alpha1/BUILD +++ b/pkg/controller/apis/config/v1alpha1/BUILD @@ -31,6 +31,7 @@ go_library( "//pkg/controller/resourcequota/config/v1alpha1:go_default_library", "//pkg/controller/service/config/v1alpha1:go_default_library", "//pkg/controller/serviceaccount/config/v1alpha1:go_default_library", + "//pkg/controller/statefulset/config/v1alpha1:go_default_library", "//pkg/controller/ttlafterfinished/config/v1alpha1:go_default_library", "//pkg/controller/volume/attachdetach/config/v1alpha1:go_default_library", "//pkg/controller/volume/persistentvolume/config/v1alpha1:go_default_library", diff --git a/pkg/controller/apis/config/v1alpha1/defaults.go b/pkg/controller/apis/config/v1alpha1/defaults.go index 339f562ca41..12e47bfbecf 100644 --- a/pkg/controller/apis/config/v1alpha1/defaults.go +++ b/pkg/controller/apis/config/v1alpha1/defaults.go @@ -39,6 +39,7 @@ import ( resourcequotaconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/resourcequota/config/v1alpha1" serviceconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/service/config/v1alpha1" serviceaccountconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/serviceaccount/config/v1alpha1" + statefulsetconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1" ttlafterfinishedconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/ttlafterfinished/config/v1alpha1" attachdetachconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/volume/attachdetach/config/v1alpha1" persistentvolumeconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config/v1alpha1" @@ -73,6 +74,8 @@ func SetDefaults_KubeControllerManagerConfiguration(obj *kubectrlmgrconfigv1alph daemonconfigv1alpha1.RecommendedDefaultDaemonSetControllerConfiguration(&obj.DaemonSetController) // Use the default RecommendedDefaultDeploymentControllerConfiguration options deploymentconfigv1alpha1.RecommendedDefaultDeploymentControllerConfiguration(&obj.DeploymentController) + // Use the default RecommendedDefaultStatefulSetControllerConfiguration options + statefulsetconfigv1alpha1.RecommendedDefaultStatefulSetControllerConfiguration(&obj.StatefulSetController) // Use the default RecommendedDefaultEndpointControllerConfiguration options endpointconfigv1alpha1.RecommendedDefaultEndpointControllerConfiguration(&obj.EndpointController) // Use the default RecommendedDefaultGenericControllerManagerConfiguration options diff --git a/pkg/controller/apis/config/v1alpha1/doc.go b/pkg/controller/apis/config/v1alpha1/doc.go index 4ea1a0ad1e9..5a1df706512 100644 --- a/pkg/controller/apis/config/v1alpha1/doc.go +++ b/pkg/controller/apis/config/v1alpha1/doc.go @@ -33,6 +33,7 @@ limitations under the License. // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/resourcequota/config/v1alpha1 // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/service/config/v1alpha1 // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/serviceaccount/config/v1alpha1 +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1 // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/ttlafterfinished/config/v1alpha1 // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/volume/attachdetach/config/v1alpha1 // +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config/v1alpha1 diff --git a/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go b/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go index 527e69f7e99..287411ce09f 100644 --- a/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go +++ b/pkg/controller/apis/config/v1alpha1/zz_generated.conversion.go @@ -45,6 +45,7 @@ import ( resourcequotaconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/resourcequota/config/v1alpha1" serviceconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/service/config/v1alpha1" serviceaccountconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/serviceaccount/config/v1alpha1" + statefulsetconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1" ttlafterfinishedconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/ttlafterfinished/config/v1alpha1" attachdetachconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/volume/attachdetach/config/v1alpha1" persistentvolumeconfigv1alpha1 "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config/v1alpha1" @@ -303,6 +304,9 @@ func autoConvert_v1alpha1_KubeControllerManagerConfiguration_To_config_KubeContr if err := deploymentconfigv1alpha1.Convert_v1alpha1_DeploymentControllerConfiguration_To_config_DeploymentControllerConfiguration(&in.DeploymentController, &out.DeploymentController, s); err != nil { return err } + if err := statefulsetconfigv1alpha1.Convert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(&in.StatefulSetController, &out.StatefulSetController, s); err != nil { + return err + } if err := Convert_v1alpha1_DeprecatedControllerConfiguration_To_config_DeprecatedControllerConfiguration(&in.DeprecatedController, &out.DeprecatedController, s); err != nil { return err } @@ -378,6 +382,9 @@ func autoConvert_config_KubeControllerManagerConfiguration_To_v1alpha1_KubeContr if err := deploymentconfigv1alpha1.Convert_config_DeploymentControllerConfiguration_To_v1alpha1_DeploymentControllerConfiguration(&in.DeploymentController, &out.DeploymentController, s); err != nil { return err } + if err := statefulsetconfigv1alpha1.Convert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(&in.StatefulSetController, &out.StatefulSetController, s); err != nil { + return err + } if err := Convert_config_DeprecatedControllerConfiguration_To_v1alpha1_DeprecatedControllerConfiguration(&in.DeprecatedController, &out.DeprecatedController, s); err != nil { return err } diff --git a/pkg/controller/apis/config/zz_generated.deepcopy.go b/pkg/controller/apis/config/zz_generated.deepcopy.go index a48078c0972..0be838b746f 100644 --- a/pkg/controller/apis/config/zz_generated.deepcopy.go +++ b/pkg/controller/apis/config/zz_generated.deepcopy.go @@ -112,6 +112,7 @@ func (in *KubeControllerManagerConfiguration) DeepCopyInto(out *KubeControllerMa out.CSRSigningController = in.CSRSigningController out.DaemonSetController = in.DaemonSetController out.DeploymentController = in.DeploymentController + out.StatefulSetController = in.StatefulSetController out.DeprecatedController = in.DeprecatedController out.EndpointController = in.EndpointController in.GarbageCollectorController.DeepCopyInto(&out.GarbageCollectorController) diff --git a/pkg/controller/statefulset/BUILD b/pkg/controller/statefulset/BUILD index 40a9cf224aa..52810172979 100644 --- a/pkg/controller/statefulset/BUILD +++ b/pkg/controller/statefulset/BUILD @@ -92,6 +92,9 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//pkg/controller/statefulset/config:all-srcs", + ], tags = ["automanaged"], ) diff --git a/pkg/controller/statefulset/config/BUILD b/pkg/controller/statefulset/config/BUILD new file mode 100644 index 00000000000..977ce90f7f9 --- /dev/null +++ b/pkg/controller/statefulset/config/BUILD @@ -0,0 +1,29 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "types.go", + "zz_generated.deepcopy.go", + ], + importpath = "k8s.io/kubernetes/pkg/controller/statefulset/config", + visibility = ["//visibility:public"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/controller/statefulset/config/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/controller/statefulset/config/OWNERS b/pkg/controller/statefulset/config/OWNERS new file mode 100644 index 00000000000..e3149dc3c06 --- /dev/null +++ b/pkg/controller/statefulset/config/OWNERS @@ -0,0 +1,14 @@ +approvers: +- api-approvers +- deads2k +- luxas +- mtaufen +- sttts +- stewart-yu +reviewers: +- api-reviewers +- deads2k +- luxas +- mtaufen +- sttts +- stewart-yu diff --git a/pkg/controller/statefulset/config/doc.go b/pkg/controller/statefulset/config/doc.go new file mode 100644 index 00000000000..bd12cedd44b --- /dev/null +++ b/pkg/controller/statefulset/config/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package + +package config // import "k8s.io/kubernetes/pkg/controller/statefulset/config" diff --git a/pkg/controller/statefulset/config/types.go b/pkg/controller/statefulset/config/types.go new file mode 100644 index 00000000000..87c58603e79 --- /dev/null +++ b/pkg/controller/statefulset/config/types.go @@ -0,0 +1,25 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +// StatefulSetControllerConfiguration contains elements describing StatefulSetController. +type StatefulSetControllerConfiguration struct { + // concurrentStatefulSetSyncs is the number of statefulset objects that are + // allowed to sync concurrently. Larger number = more responsive statefulsets, + // but more CPU (and network) load. + ConcurrentStatefulSetSyncs int32 +} diff --git a/pkg/controller/statefulset/config/v1alpha1/BUILD b/pkg/controller/statefulset/config/v1alpha1/BUILD new file mode 100644 index 00000000000..1841301c1a1 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "conversion.go", + "defaults.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + "zz_generated.deepcopy.go", + ], + importpath = "k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1", + visibility = ["//visibility:public"], + deps = [ + "//pkg/controller/statefulset/config:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/kube-controller-manager/config/v1alpha1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/controller/statefulset/config/v1alpha1/conversion.go b/pkg/controller/statefulset/config/v1alpha1/conversion.go new file mode 100644 index 00000000000..35f87b0a6d4 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/conversion.go @@ -0,0 +1,40 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/kube-controller-manager/config/v1alpha1" + statefulsetconfig "k8s.io/kubernetes/pkg/controller/statefulset/config" +) + +// Important! The public back-and-forth conversion functions for the types in this package +// with StatefulsetControllerConfiguration types need to be manually exposed like this in order for +// other packages that reference this package to be able to call these conversion functions +// in an autogenerated manner. +// TODO: Fix the bug in conversion-gen so it automatically discovers these Convert_* functions +// in autogenerated code as well. + +// Convert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(in *v1alpha1.StatefulSetControllerConfiguration, out *statefulsetconfig.StatefulSetControllerConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(in, out, s) +} + +// Convert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration is an autogenerated conversion function. +func Convert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(in *statefulsetconfig.StatefulSetControllerConfiguration, out *v1alpha1.StatefulSetControllerConfiguration, s conversion.Scope) error { + return autoConvert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(in, out, s) +} diff --git a/pkg/controller/statefulset/config/v1alpha1/defaults.go b/pkg/controller/statefulset/config/v1alpha1/defaults.go new file mode 100644 index 00000000000..35fd6fd7850 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/defaults.go @@ -0,0 +1,36 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + kubectrlmgrconfigv1alpha1 "k8s.io/kube-controller-manager/config/v1alpha1" +) + +// RecommendedDefaultStatefulSetControllerConfiguration defaults a pointer to a +// StatefulSetControllerConfiguration struct. This will set the recommended default +// values, but they may be subject to change between API versions. This function +// is intentionally not registered in the scheme as a "normal" `SetDefaults_Foo` +// function to allow consumers of this type to set whatever defaults for their +// embedded configs. Forcing consumers to use these defaults would be problematic +// as defaulting in the scheme is done as part of the conversion, and there would +// be no easy way to opt-out. Instead, if you want to use this defaulting method +// run it in your wrapper struct of this type in its `SetDefaults_` method. +func RecommendedDefaultStatefulSetControllerConfiguration(obj *kubectrlmgrconfigv1alpha1.StatefulSetControllerConfiguration) { + if obj.ConcurrentStatefulSetSyncs == 0 { + obj.ConcurrentStatefulSetSyncs = 5 + } +} diff --git a/pkg/controller/statefulset/config/v1alpha1/doc.go b/pkg/controller/statefulset/config/v1alpha1/doc.go new file mode 100644 index 00000000000..cb474cd3aa4 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/controller/statefulset/config +// +k8s:conversion-gen-external-types=k8s.io/kube-controller-manager/config/v1alpha1 + +package v1alpha1 // import "k8s.io/kubernetes/pkg/controller/statefulset/config/v1alpha1" diff --git a/pkg/controller/statefulset/config/v1alpha1/register.go b/pkg/controller/statefulset/config/v1alpha1/register.go new file mode 100644 index 00000000000..bf5a294b384 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/register.go @@ -0,0 +1,31 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package + SchemeBuilder runtime.SchemeBuilder + // localSchemeBuilder extends the SchemeBuilder instance with the external types. In this package, + // defaulting and conversion init funcs are registered as well. + localSchemeBuilder = &SchemeBuilder + // AddToScheme is a global function that registers this API group & version to a scheme + AddToScheme = localSchemeBuilder.AddToScheme +) diff --git a/pkg/controller/statefulset/config/v1alpha1/zz_generated.conversion.go b/pkg/controller/statefulset/config/v1alpha1/zz_generated.conversion.go new file mode 100644 index 00000000000..3a51188c3bc --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/zz_generated.conversion.go @@ -0,0 +1,101 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + v1alpha1 "k8s.io/kube-controller-manager/config/v1alpha1" + config "k8s.io/kubernetes/pkg/controller/statefulset/config" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*v1alpha1.GroupResource)(nil), (*v1.GroupResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_GroupResource_To_v1_GroupResource(a.(*v1alpha1.GroupResource), b.(*v1.GroupResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1.GroupResource)(nil), (*v1alpha1.GroupResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_GroupResource_To_v1alpha1_GroupResource(a.(*v1.GroupResource), b.(*v1alpha1.GroupResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1alpha1.StatefulSetControllerConfiguration)(nil), (*config.StatefulSetControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(a.(*v1alpha1.StatefulSetControllerConfiguration), b.(*config.StatefulSetControllerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*config.StatefulSetControllerConfiguration)(nil), (*v1alpha1.StatefulSetControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(a.(*config.StatefulSetControllerConfiguration), b.(*v1alpha1.StatefulSetControllerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*config.StatefulSetControllerConfiguration)(nil), (*v1alpha1.StatefulSetControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(a.(*config.StatefulSetControllerConfiguration), b.(*v1alpha1.StatefulSetControllerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v1alpha1.StatefulSetControllerConfiguration)(nil), (*config.StatefulSetControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(a.(*v1alpha1.StatefulSetControllerConfiguration), b.(*config.StatefulSetControllerConfiguration), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1alpha1_GroupResource_To_v1_GroupResource(in *v1alpha1.GroupResource, out *v1.GroupResource, s conversion.Scope) error { + out.Group = in.Group + out.Resource = in.Resource + return nil +} + +// Convert_v1alpha1_GroupResource_To_v1_GroupResource is an autogenerated conversion function. +func Convert_v1alpha1_GroupResource_To_v1_GroupResource(in *v1alpha1.GroupResource, out *v1.GroupResource, s conversion.Scope) error { + return autoConvert_v1alpha1_GroupResource_To_v1_GroupResource(in, out, s) +} + +func autoConvert_v1_GroupResource_To_v1alpha1_GroupResource(in *v1.GroupResource, out *v1alpha1.GroupResource, s conversion.Scope) error { + out.Group = in.Group + out.Resource = in.Resource + return nil +} + +// Convert_v1_GroupResource_To_v1alpha1_GroupResource is an autogenerated conversion function. +func Convert_v1_GroupResource_To_v1alpha1_GroupResource(in *v1.GroupResource, out *v1alpha1.GroupResource, s conversion.Scope) error { + return autoConvert_v1_GroupResource_To_v1alpha1_GroupResource(in, out, s) +} + +func autoConvert_v1alpha1_StatefulSetControllerConfiguration_To_config_StatefulSetControllerConfiguration(in *v1alpha1.StatefulSetControllerConfiguration, out *config.StatefulSetControllerConfiguration, s conversion.Scope) error { + out.ConcurrentStatefulSetSyncs = in.ConcurrentStatefulSetSyncs + return nil +} + +func autoConvert_config_StatefulSetControllerConfiguration_To_v1alpha1_StatefulSetControllerConfiguration(in *config.StatefulSetControllerConfiguration, out *v1alpha1.StatefulSetControllerConfiguration, s conversion.Scope) error { + out.ConcurrentStatefulSetSyncs = in.ConcurrentStatefulSetSyncs + return nil +} diff --git a/pkg/controller/statefulset/config/v1alpha1/zz_generated.deepcopy.go b/pkg/controller/statefulset/config/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..0ec19467c40 --- /dev/null +++ b/pkg/controller/statefulset/config/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,21 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 diff --git a/pkg/controller/statefulset/config/zz_generated.deepcopy.go b/pkg/controller/statefulset/config/zz_generated.deepcopy.go new file mode 100644 index 00000000000..36abbc4e424 --- /dev/null +++ b/pkg/controller/statefulset/config/zz_generated.deepcopy.go @@ -0,0 +1,37 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package config + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetControllerConfiguration) DeepCopyInto(out *StatefulSetControllerConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetControllerConfiguration. +func (in *StatefulSetControllerConfiguration) DeepCopy() *StatefulSetControllerConfiguration { + if in == nil { + return nil + } + out := new(StatefulSetControllerConfiguration) + in.DeepCopyInto(out) + return out +} diff --git a/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/types.go b/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/types.go index 56acbcdc953..db869f34b6d 100644 --- a/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/types.go +++ b/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/types.go @@ -102,6 +102,9 @@ type KubeControllerManagerConfiguration struct { // DeploymentControllerConfiguration holds configuration for // DeploymentController related features. DeploymentController DeploymentControllerConfiguration + // StatefulSetControllerConfiguration holds configuration for + // StatefulSetController related features. + StatefulSetController StatefulSetControllerConfiguration // DeprecatedControllerConfiguration holds configuration for some deprecated // features. DeprecatedController DeprecatedControllerConfiguration @@ -260,6 +263,14 @@ type DeploymentControllerConfiguration struct { DeploymentControllerSyncPeriod metav1.Duration } +// StatefulSetControllerConfiguration contains elements describing StatefulSetController. +type StatefulSetControllerConfiguration struct { + // concurrentStatefulSetSyncs is the number of statefulset objects that are + // allowed to sync concurrently. Larger number = more responsive statefulsets, + // but more CPU (and network) load. + ConcurrentStatefulSetSyncs int32 +} + // DeprecatedControllerConfiguration contains elements be deprecated. type DeprecatedControllerConfiguration struct { // DEPRECATED: deletingPodsQps is the number of nodes per second on which pods are deleted in diff --git a/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/zz_generated.deepcopy.go b/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/zz_generated.deepcopy.go index 29e94e1a904..6c9475879ed 100644 --- a/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/kube-controller-manager/config/v1alpha1/zz_generated.deepcopy.go @@ -286,6 +286,7 @@ func (in *KubeControllerManagerConfiguration) DeepCopyInto(out *KubeControllerMa out.CSRSigningController = in.CSRSigningController out.DaemonSetController = in.DaemonSetController out.DeploymentController = in.DeploymentController + out.StatefulSetController = in.StatefulSetController out.DeprecatedController = in.DeprecatedController out.EndpointController = in.EndpointController in.GarbageCollectorController.DeepCopyInto(&out.GarbageCollectorController) @@ -511,6 +512,22 @@ func (in *ServiceControllerConfiguration) DeepCopy() *ServiceControllerConfigura return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetControllerConfiguration) DeepCopyInto(out *StatefulSetControllerConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetControllerConfiguration. +func (in *StatefulSetControllerConfiguration) DeepCopy() *StatefulSetControllerConfiguration { + if in == nil { + return nil + } + out := new(StatefulSetControllerConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TTLAfterFinishedControllerConfiguration) DeepCopyInto(out *TTLAfterFinishedControllerConfiguration) { *out = *in