From b46259b7afa2a6b8bc6a62847d43e15e2b7d2deb Mon Sep 17 00:00:00 2001 From: "Rostislav M. Georgiev" Date: Thu, 7 May 2020 14:22:34 +0300 Subject: [PATCH] kubeadm: Move IPv6DualStack feature gate to component config kubeadm is setting the IPv6DualStack feature gate in the command line of the kubelet. However, the kubelet is gradually moving away from command line flags towards component config use. Hence, we should set the IPv6DualStack feature gate in the component config instead. Signed-off-by: Rostislav M. Georgiev --- cmd/kubeadm/app/componentconfigs/kubelet.go | 6 +++ .../app/componentconfigs/kubelet_test.go | 44 ++++++++++++++++++- cmd/kubeadm/app/phases/kubelet/BUILD | 1 - cmd/kubeadm/app/phases/kubelet/flags.go | 9 ---- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/cmd/kubeadm/app/componentconfigs/kubelet.go b/cmd/kubeadm/app/componentconfigs/kubelet.go index 6920858e2a3..ca2c8c9f950 100644 --- a/cmd/kubeadm/app/componentconfigs/kubelet.go +++ b/cmd/kubeadm/app/componentconfigs/kubelet.go @@ -105,6 +105,12 @@ func (kc *kubeletConfig) Default(cfg *kubeadmapi.ClusterConfiguration, _ *kubead kc.config.FeatureGates = map[string]bool{} } + // TODO: The following code should be removed 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 { + kc.config.FeatureGates[features.IPv6DualStack] = enabled + } + if kc.config.StaticPodPath == "" { kc.config.StaticPodPath = kubeadmapiv1beta2.DefaultManifestsDir } else if kc.config.StaticPodPath != kubeadmapiv1beta2.DefaultManifestsDir { diff --git a/cmd/kubeadm/app/componentconfigs/kubelet_test.go b/cmd/kubeadm/app/componentconfigs/kubelet_test.go index a8aab9a14da..85a1ce8428e 100644 --- a/cmd/kubeadm/app/componentconfigs/kubelet_test.go +++ b/cmd/kubeadm/app/componentconfigs/kubelet_test.go @@ -229,7 +229,45 @@ func TestKubeletDefault(t *testing.T) { }, }, { - name: "Service subnet, dual stack defaulting works", + name: "Service subnet, explicitly disabled dual stack defaulting works", + clusterCfg: kubeadmapi.ClusterConfiguration{ + FeatureGates: map[string]bool{ + features.IPv6DualStack: false, + }, + Networking: kubeadmapi.Networking{ + ServiceSubnet: "192.168.0.0/16", + }, + }, + expected: kubeletConfig{ + config: kubeletconfig.KubeletConfiguration{ + FeatureGates: map[string]bool{ + features.IPv6DualStack: false, + }, + StaticPodPath: kubeadmapiv1beta2.DefaultManifestsDir, + ClusterDNS: []string{"192.168.0.10"}, + Authentication: kubeletconfig.KubeletAuthentication{ + X509: kubeletconfig.KubeletX509Authentication{ + ClientCAFile: constants.CACertName, + }, + Anonymous: kubeletconfig.KubeletAnonymousAuthentication{ + Enabled: utilpointer.BoolPtr(kubeletAuthenticationAnonymousEnabled), + }, + Webhook: kubeletconfig.KubeletWebhookAuthentication{ + Enabled: utilpointer.BoolPtr(kubeletAuthenticationWebhookEnabled), + }, + }, + Authorization: kubeletconfig.KubeletAuthorization{ + Mode: kubeletconfig.KubeletAuthorizationModeWebhook, + }, + HealthzBindAddress: kubeletHealthzBindAddress, + HealthzPort: utilpointer.Int32Ptr(constants.KubeletHealthzPort), + RotateCertificates: kubeletRotateCertificates, + ResolverConfig: resolverConfig, + }, + }, + }, + { + name: "Service subnet, enabled dual stack defaulting works", clusterCfg: kubeadmapi.ClusterConfiguration{ FeatureGates: map[string]bool{ features.IPv6DualStack: true, @@ -240,7 +278,9 @@ func TestKubeletDefault(t *testing.T) { }, expected: kubeletConfig{ config: kubeletconfig.KubeletConfiguration{ - FeatureGates: map[string]bool{}, + FeatureGates: map[string]bool{ + features.IPv6DualStack: true, + }, StaticPodPath: kubeadmapiv1beta2.DefaultManifestsDir, ClusterDNS: []string{"192.168.0.10"}, Authentication: kubeletconfig.KubeletAuthentication{ diff --git a/cmd/kubeadm/app/phases/kubelet/BUILD b/cmd/kubeadm/app/phases/kubelet/BUILD index eee0e4c9c68..04fb674ca4a 100644 --- a/cmd/kubeadm/app/phases/kubelet/BUILD +++ b/cmd/kubeadm/app/phases/kubelet/BUILD @@ -14,7 +14,6 @@ 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 2926e7edbf2..04e1b4c4b00 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags.go +++ b/cmd/kubeadm/app/phases/kubelet/flags.go @@ -28,14 +28,12 @@ import ( 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" ) type kubeletFlagsOpts struct { nodeRegOpts *kubeadmapi.NodeRegistrationOptions - featureGates map[string]bool pauseImage string registerTaintsUsingFlags bool } @@ -63,7 +61,6 @@ func GetNodeNameAndHostname(cfg *kubeadmapi.NodeRegistrationOptions) (string, st func WriteKubeletDynamicEnvFile(cfg *kubeadmapi.ClusterConfiguration, nodeReg *kubeadmapi.NodeRegistrationOptions, registerTaintsUsingFlags bool, kubeletDir string) error { flagOpts := kubeletFlagsOpts{ nodeRegOpts: nodeReg, - featureGates: cfg.FeatureGates, pauseImage: images.GetPauseImage(cfg), registerTaintsUsingFlags: registerTaintsUsingFlags, } @@ -109,12 +106,6 @@ func buildKubeletArgMapCommon(opts kubeletFlagsOpts) map[string]string { kubeletFlags["hostname-override"] = nodeName } - // TODO: The following code should be removed 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 }