From 585ef375bb68f20750f09af94dc219dd84b19616 Mon Sep 17 00:00:00 2001 From: Arvinderpal Wander Date: Mon, 29 Jul 2019 07:41:26 -0700 Subject: [PATCH] Kubeadm FG for dual-stack was introduced in #80145. This PR progagates the kubeadm FG to the individual k8scomponents on the control-plane node. * Note: Users who want to join worker nodes to the cluster will have to specify the dual-stack FG to kubelet using the nodeRegistration.kubeletExtraArgs option as part of their join config. Alternatively, they can use KUBELET_EXTRA_ARGS. kubeadm FG: kubernetes/kubeadm#1612 --- cmd/kubeadm/app/componentconfigs/BUILD | 1 + cmd/kubeadm/app/componentconfigs/defaults.go | 7 +++++++ cmd/kubeadm/app/phases/controlplane/BUILD | 1 + .../app/phases/controlplane/manifests.go | 19 +++++++++++++++++++ cmd/kubeadm/app/phases/kubelet/BUILD | 1 + cmd/kubeadm/app/phases/kubelet/flags.go | 7 +++++++ 6 files changed, 36 insertions(+) diff --git a/cmd/kubeadm/app/componentconfigs/BUILD b/cmd/kubeadm/app/componentconfigs/BUILD index 50d4ee3fa4b..1a5c8af7683 100644 --- a/cmd/kubeadm/app/componentconfigs/BUILD +++ b/cmd/kubeadm/app/componentconfigs/BUILD @@ -15,6 +15,7 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/v1beta2:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library", "//pkg/kubelet/apis/config:go_default_library", diff --git a/cmd/kubeadm/app/componentconfigs/defaults.go b/cmd/kubeadm/app/componentconfigs/defaults.go index 7b0963f68fa..13754ed0714 100644 --- a/cmd/kubeadm/app/componentconfigs/defaults.go +++ b/cmd/kubeadm/app/componentconfigs/defaults.go @@ -24,6 +24,7 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/kubernetes/cmd/kubeadm/app/features" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" utilpointer "k8s.io/utils/pointer" @@ -51,6 +52,12 @@ func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.ClusterConfiguration) externalproxycfg.ClientConnection.Kubeconfig = KubeproxyKubeConfigFileName } + // TODO: The following code should be remvoved after dual-stack is GA. + // Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value. + if enabled, present := internalcfg.FeatureGates[features.IPv6DualStack]; present { + externalproxycfg.FeatureGates[features.IPv6DualStack] = enabled + } + // Run the rest of the kube-proxy defaulting code Scheme.Default(externalproxycfg) diff --git a/cmd/kubeadm/app/phases/controlplane/BUILD b/cmd/kubeadm/app/phases/controlplane/BUILD index 875a6d91486..5fdad3449e1 100644 --- a/cmd/kubeadm/app/phases/controlplane/BUILD +++ b/cmd/kubeadm/app/phases/controlplane/BUILD @@ -34,6 +34,7 @@ go_library( deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/app/util:go_default_library", diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index 9b210fcbf3e..be90c069eb1 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -30,6 +30,7 @@ import ( "k8s.io/klog" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/images" certphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -184,6 +185,12 @@ func getAPIServerCommand(cfg *kubeadmapi.ClusterConfiguration, localAPIEndpoint } } + // TODO: The following code should be remvoved after dual-stack is GA. + // Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value. + if enabled, present := cfg.FeatureGates[features.IPv6DualStack]; present { + defaultArguments["feature-gates"] = fmt.Sprintf("%s=%t", features.IPv6DualStack, enabled) + } + if cfg.APIServer.ExtraArgs == nil { cfg.APIServer.ExtraArgs = map[string]string{} } @@ -295,6 +302,12 @@ func getControllerManagerCommand(cfg *kubeadmapi.ClusterConfiguration) []string } } + // TODO: The following code should be remvoved after dual-stack is GA. + // Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value. + if enabled, present := cfg.FeatureGates[features.IPv6DualStack]; present { + defaultArguments["feature-gates"] = fmt.Sprintf("%s=%t", features.IPv6DualStack, enabled) + } + command := []string{"kube-controller-manager"} command = append(command, kubeadmutil.BuildArgumentListFromMap(defaultArguments, cfg.ControllerManager.ExtraArgs)...) @@ -309,6 +322,12 @@ func getSchedulerCommand(cfg *kubeadmapi.ClusterConfiguration) []string { "kubeconfig": filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.SchedulerKubeConfigFileName), } + // TODO: The following code should be remvoved after dual-stack is GA. + // Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value. + if enabled, present := cfg.FeatureGates[features.IPv6DualStack]; present { + defaultArguments["feature-gates"] = fmt.Sprintf("%s=%t", features.IPv6DualStack, enabled) + } + command := []string{"kube-scheduler"} command = append(command, kubeadmutil.BuildArgumentListFromMap(defaultArguments, cfg.Scheduler.ExtraArgs)...) return command diff --git a/cmd/kubeadm/app/phases/kubelet/BUILD b/cmd/kubeadm/app/phases/kubelet/BUILD index bd11979867d..b03f49a3d3d 100644 --- a/cmd/kubeadm/app/phases/kubelet/BUILD +++ b/cmd/kubeadm/app/phases/kubelet/BUILD @@ -14,6 +14,7 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/componentconfigs:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library", diff --git a/cmd/kubeadm/app/phases/kubelet/flags.go b/cmd/kubeadm/app/phases/kubelet/flags.go index a6c5d1411ef..14f7317be12 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags.go +++ b/cmd/kubeadm/app/phases/kubelet/flags.go @@ -27,6 +27,7 @@ import ( "k8s.io/klog" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/images" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" @@ -120,6 +121,12 @@ func buildKubeletArgMap(opts kubeletFlagsOpts) map[string]string { // TODO: Conditionally set `--cgroup-driver` to either `systemd` or `cgroupfs` for CRI other than Docker + // TODO: The following code should be remvoved after dual-stack is GA. + // Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value. + if enabled, present := opts.featureGates[features.IPv6DualStack]; present { + kubeletFlags["feature-gates"] = fmt.Sprintf("%s=%t", features.IPv6DualStack, enabled) + } + return kubeletFlags }