From cc195d779a931eac2eff14c2443f36ad441089f8 Mon Sep 17 00:00:00 2001 From: Jason Stangroome Date: Mon, 26 Mar 2018 22:11:21 +1100 Subject: [PATCH 1/2] Support overriding the --node-cidr-mask-size arg passed to kube-controller-manager See https://github.com/kubernetes/kubeadm/issues/724 --- cmd/kubeadm/app/apis/kubeadm/types.go | 4 ++++ .../app/phases/controlplane/manifests.go | 5 ++++- .../app/phases/controlplane/manifests_test.go | 22 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index 15ee0923c3f..714b3f39ad0 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -157,6 +157,10 @@ type Networking struct { PodSubnet string // DNSDomain is the dns domain used by k8s services. Defaults to "cluster.local". DNSDomain string + // NodeCIDRMaskSize is the size of the Pod subnet allocated to each node. Only + // applies when PodSubnet is also specified. Defaults to "24" for IPv4 or a + // calculated subset of an IPv6 PodSubnet. + NodeCIDRMaskSize string } // Etcd contains elements describing Etcd configuration. diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index 2f6fe724c65..769f36795e8 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -336,7 +336,10 @@ func getControllerManagerCommand(cfg *kubeadmapi.MasterConfiguration, k8sVersion // Let the controller-manager allocate Node CIDRs for the Pod network. // Each node will get a subspace of the address CIDR provided with --pod-network-cidr. if cfg.Networking.PodSubnet != "" { - maskSize := calcNodeCidrSize(cfg.Networking.PodSubnet) + maskSize := cfg.Networking.NodeCIDRMaskSize + if maskSize == "" { + maskSize = calcNodeCidrSize(cfg.Networking.PodSubnet) + } command = append(command, "--allocate-node-cidrs=true", "--cluster-cidr="+cfg.Networking.PodSubnet, "--node-cidr-mask-size="+maskSize) } diff --git a/cmd/kubeadm/app/phases/controlplane/manifests_test.go b/cmd/kubeadm/app/phases/controlplane/manifests_test.go index 35c07f47eb3..712f44b1486 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -774,6 +774,28 @@ func TestGetControllerManagerCommand(t *testing.T) { "--node-cidr-mask-size=24", }, }, + { + cfg: &kubeadmapi.MasterConfiguration{ + Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16", NodeCIDRMaskSize: "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"}, From 6fbf2da60b0d7ba596c743bc1b005f0e024e41e1 Mon Sep 17 00:00:00 2001 From: Jason Stangroome Date: Thu, 29 Mar 2018 14:02:10 +1100 Subject: [PATCH 2/2] Ensure ControllerManagerExtraArgs take precedence over generated args --- cmd/kubeadm/app/apis/kubeadm/types.go | 4 ---- .../app/phases/controlplane/manifests.go | 21 +++++++++---------- .../app/phases/controlplane/manifests_test.go | 7 ++++--- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index 714b3f39ad0..15ee0923c3f 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -157,10 +157,6 @@ type Networking struct { PodSubnet string // DNSDomain is the dns domain used by k8s services. Defaults to "cluster.local". DNSDomain string - // NodeCIDRMaskSize is the size of the Pod subnet allocated to each node. Only - // applies when PodSubnet is also specified. Defaults to "24" for IPv4 or a - // calculated subset of an IPv6 PodSubnet. - NodeCIDRMaskSize string } // Etcd contains elements describing Etcd configuration. diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index 769f36795e8..728a2f0dab8 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -321,28 +321,27 @@ 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 } } // Let the controller-manager allocate Node CIDRs for the Pod network. // Each node will get a subspace of the address CIDR provided with --pod-network-cidr. if cfg.Networking.PodSubnet != "" { - maskSize := cfg.Networking.NodeCIDRMaskSize - if maskSize == "" { - maskSize = calcNodeCidrSize(cfg.Networking.PodSubnet) - } - command = append(command, "--allocate-node-cidrs=true", "--cluster-cidr="+cfg.Networking.PodSubnet, - "--node-cidr-mask-size="+maskSize) + maskSize := calcNodeCidrSize(cfg.Networking.PodSubnet) + 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 712f44b1486..16587c7bee2 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -776,9 +776,10 @@ func TestGetControllerManagerCommand(t *testing.T) { }, { cfg: &kubeadmapi.MasterConfiguration{ - Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16", NodeCIDRMaskSize: "20"}, - CertificatesDir: testCertsDir, - KubernetesVersion: "v1.7.0", + 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",