diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index 2f6fe724c65..728a2f0dab8 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -321,15 +321,12 @@ func getControllerManagerCommand(cfg *kubeadmapi.MasterConfiguration, k8sVersion defaultArguments["cluster-signing-cert-file"] = "" } - command := []string{"kube-controller-manager"} - command = append(command, kubeadmutil.BuildArgumentListFromMap(defaultArguments, cfg.ControllerManagerExtraArgs)...) - if cfg.CloudProvider != "" { - command = append(command, "--cloud-provider="+cfg.CloudProvider) + defaultArguments["cloud-provider"] = cfg.CloudProvider // Only append the --cloud-config option if there's a such file if _, err := os.Stat(DefaultCloudConfigPath); err == nil { - command = append(command, "--cloud-config="+DefaultCloudConfigPath) + defaultArguments["cloud-config"] = DefaultCloudConfigPath } } @@ -337,9 +334,14 @@ func getControllerManagerCommand(cfg *kubeadmapi.MasterConfiguration, k8sVersion // Each node will get a subspace of the address CIDR provided with --pod-network-cidr. if cfg.Networking.PodSubnet != "" { maskSize := calcNodeCidrSize(cfg.Networking.PodSubnet) - command = append(command, "--allocate-node-cidrs=true", "--cluster-cidr="+cfg.Networking.PodSubnet, - "--node-cidr-mask-size="+maskSize) + defaultArguments["allocate-node-cidrs"] = "true" + defaultArguments["cluster-cidr"] = cfg.Networking.PodSubnet + defaultArguments["node-cidr-mask-size"] = maskSize } + + command := []string{"kube-controller-manager"} + command = append(command, kubeadmutil.BuildArgumentListFromMap(defaultArguments, cfg.ControllerManagerExtraArgs)...) + return command } diff --git a/cmd/kubeadm/app/phases/controlplane/manifests_test.go b/cmd/kubeadm/app/phases/controlplane/manifests_test.go index 35c07f47eb3..16587c7bee2 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -774,6 +774,29 @@ func TestGetControllerManagerCommand(t *testing.T) { "--node-cidr-mask-size=24", }, }, + { + cfg: &kubeadmapi.MasterConfiguration{ + Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"}, + ControllerManagerExtraArgs: map[string]string{"node-cidr-mask-size": "20"}, + CertificatesDir: testCertsDir, + KubernetesVersion: "v1.7.0", + }, + expected: []string{ + "kube-controller-manager", + "--address=127.0.0.1", + "--leader-elect=true", + "--kubeconfig=" + kubeadmconstants.KubernetesDir + "/controller-manager.conf", + "--root-ca-file=" + testCertsDir + "/ca.crt", + "--service-account-private-key-file=" + testCertsDir + "/sa.key", + "--cluster-signing-cert-file=" + testCertsDir + "/ca.crt", + "--cluster-signing-key-file=" + testCertsDir + "/ca.key", + "--use-service-account-credentials=true", + "--controllers=*,bootstrapsigner,tokencleaner", + "--allocate-node-cidrs=true", + "--cluster-cidr=10.0.1.15/16", + "--node-cidr-mask-size=20", + }, + }, { cfg: &kubeadmapi.MasterConfiguration{ Networking: kubeadmapi.Networking{PodSubnet: "2001:db8::/64"},