From 75303fe579eda8eb064f8f2eb5f2bccd9848cdcc Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Thu, 29 Sep 2022 20:50:05 +0000 Subject: [PATCH] Disable cloud-node and cloud-node-lifecycle if CCM is disabled If CCM and ServiceLB are both disabled, don't run the cloud-controller-manager at all; this should provide the same CLI flag behavior as previous releases, and not create problems when users disable the CCM but still want ServiceLB. Signed-off-by: Brad Davidson --- pkg/cli/server/server.go | 2 +- pkg/cloudprovider/cloudprovider.go | 9 ++++++++- pkg/daemons/control/deps/deps.go | 1 + pkg/daemons/control/server.go | 10 +++++++++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index 1862aef01c..5b4fe184df 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -365,7 +365,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont serverConfig.ControlConfig.DisableServiceLB = true } - if serverConfig.ControlConfig.DisableCCM { + if serverConfig.ControlConfig.DisableCCM && serverConfig.ControlConfig.DisableServiceLB { serverConfig.ControlConfig.Skips["ccm"] = true serverConfig.ControlConfig.Disables["ccm"] = true } diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index 1cd0c23a0f..1263a1c448 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -2,6 +2,7 @@ package cloudprovider import ( "encoding/json" + "fmt" "io" "io/ioutil" @@ -28,6 +29,7 @@ type Config struct { LBEnabled bool `json:"lbEnabled"` LBImage string `json:"lbImage"` LBNamespace string `json:"lbNamespace"` + NodeEnabled bool `json:"nodeEnabled"` Rootless bool `json:"rootless"` } @@ -54,6 +56,7 @@ func init() { LBEnabled: true, LBImage: DefaultLBImage, LBNamespace: DefaultLBNS, + NodeEnabled: true, }, } @@ -65,6 +68,10 @@ func init() { } } + if !k.LBEnabled && !k.NodeEnabled { + return nil, fmt.Errorf("all cloud-provider functionality disabled by config") + } + return &k, err }) } @@ -113,7 +120,7 @@ func (k *k3s) Instances() (cloudprovider.Instances, bool) { } func (k *k3s) InstancesV2() (cloudprovider.InstancesV2, bool) { - return k, true + return k, k.NodeEnabled } func (k *k3s) LoadBalancer() (cloudprovider.LoadBalancer, bool) { diff --git a/pkg/daemons/control/deps/deps.go b/pkg/daemons/control/deps/deps.go index 75e44e6bcc..ad9a198dce 100644 --- a/pkg/daemons/control/deps/deps.go +++ b/pkg/daemons/control/deps/deps.go @@ -777,6 +777,7 @@ func genCloudConfig(controlConfig *config.Control) error { LBNamespace: controlConfig.ServiceLBNamespace, LBImage: cloudprovider.DefaultLBImage, Rootless: controlConfig.Rootless, + NodeEnabled: !controlConfig.DisableCCM, } if controlConfig.SystemDefaultRegistry != "" { cloudConfig.LBImage = controlConfig.SystemDefaultRegistry + "/" + cloudConfig.LBImage diff --git a/pkg/daemons/control/server.go b/pkg/daemons/control/server.go index 10b8474023..1a10e7ad93 100644 --- a/pkg/daemons/control/server.go +++ b/pkg/daemons/control/server.go @@ -81,7 +81,7 @@ func Server(ctx context.Context, cfg *config.Control) error { } } - if !cfg.DisableCCM { + if !cfg.DisableCCM || !cfg.DisableServiceLB { if err := cloudControllerManager(ctx, cfg); err != nil { return err } @@ -302,10 +302,12 @@ func cloudControllerManager(ctx context.Context, cfg *config.Control) error { argsMap := map[string]string{ "profiling": "false", "allocate-node-cidrs": "true", + "leader-elect-resource-name": version.Program + "-cloud-controller-manager", "cloud-provider": version.Program, "cloud-config": runtime.CloudControllerConfig, "cluster-cidr": util.JoinIPNets(cfg.ClusterIPRanges), "configure-cloud-routes": "false", + "controllers": "*,-route", "kubeconfig": runtime.KubeConfigCloudController, "authorization-kubeconfig": runtime.KubeConfigCloudController, "authentication-kubeconfig": runtime.KubeConfigCloudController, @@ -316,6 +318,12 @@ func cloudControllerManager(ctx context.Context, cfg *config.Control) error { if cfg.NoLeaderElect { argsMap["leader-elect"] = "false" } + if cfg.DisableCCM { + argsMap["controllers"] = argsMap["controllers"] + ",-cloud-node,-cloud-node-lifecycle" + } + if cfg.DisableServiceLB { + argsMap["controllers"] = argsMap["controllers"] + ",-service" + } args := config.GetArgs(argsMap, cfg.ExtraCloudControllerArgs) logrus.Infof("Running cloud-controller-manager %s", config.ArgString(args))