From a5a29c54cc9d87df2aa2318e889133b77446650c Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Thu, 10 Sep 2020 02:21:19 +0300 Subject: [PATCH 1/2] kubeadm: remove the "alpha kubelet config enable-dynamic" command The command was deprecated in 1.19 and can be removed in 1.20. --- cmd/kubeadm/app/cmd/alpha/BUILD | 3 - cmd/kubeadm/app/cmd/alpha/alpha.go | 1 - cmd/kubeadm/app/cmd/alpha/kubelet.go | 116 ------------------ cmd/kubeadm/app/phases/kubelet/BUILD | 2 - cmd/kubeadm/app/phases/kubelet/dynamic.go | 60 --------- .../app/phases/kubelet/dynamic_test.go | 64 ---------- 6 files changed, 246 deletions(-) delete mode 100644 cmd/kubeadm/app/cmd/alpha/kubelet.go delete mode 100644 cmd/kubeadm/app/phases/kubelet/dynamic.go delete mode 100644 cmd/kubeadm/app/phases/kubelet/dynamic_test.go diff --git a/cmd/kubeadm/app/cmd/alpha/BUILD b/cmd/kubeadm/app/cmd/alpha/BUILD index fd2bbb4b577..e260e9d0e5a 100644 --- a/cmd/kubeadm/app/cmd/alpha/BUILD +++ b/cmd/kubeadm/app/cmd/alpha/BUILD @@ -6,7 +6,6 @@ go_library( "alpha.go", "certs.go", "kubeconfig.go", - "kubelet.go", "selfhosting.go", ], importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/alpha", @@ -25,13 +24,11 @@ go_library( "//cmd/kubeadm/app/phases/certs/renewal:go_default_library", "//cmd/kubeadm/app/phases/copycerts:go_default_library", "//cmd/kubeadm/app/phases/kubeconfig:go_default_library", - "//cmd/kubeadm/app/phases/kubelet:go_default_library", "//cmd/kubeadm/app/phases/selfhosting:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library", "//cmd/kubeadm/app/util/config:go_default_library", "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/duration:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", "//vendor/github.com/lithammer/dedent:go_default_library", "//vendor/github.com/pkg/errors:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/cmd/kubeadm/app/cmd/alpha/alpha.go b/cmd/kubeadm/app/cmd/alpha/alpha.go index b3c10c57ca8..8d55f254539 100644 --- a/cmd/kubeadm/app/cmd/alpha/alpha.go +++ b/cmd/kubeadm/app/cmd/alpha/alpha.go @@ -31,7 +31,6 @@ func NewCmdAlpha(in io.Reader, out io.Writer) *cobra.Command { } cmd.AddCommand(newCmdCertsUtility(out)) - cmd.AddCommand(newCmdKubeletUtility()) cmd.AddCommand(newCmdKubeConfigUtility(out)) cmd.AddCommand(NewCmdSelfhosting(in)) diff --git a/cmd/kubeadm/app/cmd/alpha/kubelet.go b/cmd/kubeadm/app/cmd/alpha/kubelet.go deleted file mode 100644 index 598f74df3d6..00000000000 --- a/cmd/kubeadm/app/cmd/alpha/kubelet.go +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package alpha - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/util/version" - "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" - "k8s.io/kubernetes/cmd/kubeadm/app/constants" - kubeletphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubelet" - kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" -) - -var ( - kubeletConfigEnableDynamicLongDesc = cmdutil.LongDesc(` - Enable or update dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster, - where X is the minor version of the desired kubelet version. - - WARNING: This kubeadm feature is deprecated. Enable only if you know what you are doing, as it - may have surprising side-effects at this stage. - - ` + cmdutil.AlphaDisclaimer) - - kubeletConfigEnableDynamicExample = cmdutil.Examples(fmt.Sprintf(` - # Enable dynamic kubelet configuration for a Node. - kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version %s - - WARNING: This kubeadm feature is deprecated. Enable only if you know what you are doing, as it - may have surprising side-effects at this stage. - `, constants.CurrentKubernetesVersion)) -) - -// newCmdKubeletUtility returns command for `kubeadm phase kubelet` -func newCmdKubeletUtility() *cobra.Command { - cmd := &cobra.Command{ - Use: "kubelet", - Short: "Commands related to handling the kubelet", - Long: cmdutil.MacroCommandLongDescription, - } - - cmd.AddCommand(newCmdKubeletConfig()) - return cmd -} - -// newCmdKubeletConfig returns command for `kubeadm phase kubelet config` -func newCmdKubeletConfig() *cobra.Command { - cmd := &cobra.Command{ - Use: "config", - Short: "Utilities for kubelet configuration", - Long: cmdutil.MacroCommandLongDescription, - } - - cmd.AddCommand(newCmdKubeletConfigEnableDynamic()) - return cmd -} - -// newCmdKubeletConfigEnableDynamic calls cobra.Command for enabling dynamic kubelet configuration on node -// This feature is still in alpha and an experimental state -func newCmdKubeletConfigEnableDynamic() *cobra.Command { - var nodeName, kubeletVersionStr string - var kubeConfigFile string - - cmd := &cobra.Command{ - Use: "enable-dynamic", - Short: "DEPRECATED: Enable or update dynamic kubelet configuration for a Node", - Long: kubeletConfigEnableDynamicLongDesc, - Example: kubeletConfigEnableDynamicExample, - Deprecated: "This command is deprecated and will be removed in a future release. Please defer to the official \"Dynamic Kubelet Configuration\" " + - "guide at k8s.io if you wish to use this feature", - RunE: func(cmd *cobra.Command, args []string) error { - if len(nodeName) == 0 { - return errors.New("the --node-name argument is required") - } - if len(kubeletVersionStr) == 0 { - return errors.New("the --kubelet-version argument is required") - } - - kubeletVersion, err := version.ParseSemantic(kubeletVersionStr) - if err != nil { - return err - } - - kubeConfigFile = cmdutil.GetKubeConfigPath(kubeConfigFile) - client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) - if err != nil { - return err - } - - return kubeletphase.EnableDynamicConfigForNode(client, nodeName, kubeletVersion) - }, - Args: cobra.NoArgs, - } - - options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) - cmd.Flags().StringVar(&nodeName, options.NodeName, nodeName, "Name of the node that should enable the dynamic kubelet configuration") - cmd.Flags().StringVar(&kubeletVersionStr, "kubelet-version", kubeletVersionStr, "The desired version for the kubelet") - return cmd -} diff --git a/cmd/kubeadm/app/phases/kubelet/BUILD b/cmd/kubeadm/app/phases/kubelet/BUILD index 4f9a0050655..e989be8ec94 100644 --- a/cmd/kubeadm/app/phases/kubelet/BUILD +++ b/cmd/kubeadm/app/phases/kubelet/BUILD @@ -4,7 +4,6 @@ go_library( name = "go_default_library", srcs = [ "config.go", - "dynamic.go", "flags.go", "kubelet.go", ], @@ -32,7 +31,6 @@ go_test( name = "go_default_test", srcs = [ "config_test.go", - "dynamic_test.go", "flags_test.go", ], embed = [":go_default_library"], diff --git a/cmd/kubeadm/app/phases/kubelet/dynamic.go b/cmd/kubeadm/app/phases/kubelet/dynamic.go deleted file mode 100644 index 5ce367771e9..00000000000 --- a/cmd/kubeadm/app/phases/kubelet/dynamic.go +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package kubelet - -import ( - "fmt" - - "github.com/pkg/errors" - - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/version" - clientset "k8s.io/client-go/kubernetes" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" - "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" -) - -// EnableDynamicConfigForNode updates the Node's ConfigSource to enable Dynamic Kubelet Configuration, depending on what version the kubelet is -// Used at "kubeadm init", "kubeadm join" and "kubeadm upgrade" time -func EnableDynamicConfigForNode(client clientset.Interface, nodeName string, kubeletVersion *version.Version) error { - - configMapName := kubeadmconstants.GetKubeletConfigMapName(kubeletVersion) - fmt.Printf("[kubelet] Enabling Dynamic Kubelet Config for Node %q; config sourced from ConfigMap %q in namespace %s\n", - nodeName, configMapName, metav1.NamespaceSystem) - fmt.Println("[kubelet] WARNING: The Dynamic Kubelet Config feature is beta, but off by default. It hasn't been well-tested yet at this stage, use with caution.") - - _, err := apiclient.GetConfigMapWithRetry(client, metav1.NamespaceSystem, configMapName) - if err != nil { - return errors.Wrap(err, "couldn't get the kubelet configuration ConfigMap") - } - - // Loop on every falsy return. Return with an error if raised. Exit successfully if true is returned. - return apiclient.PatchNode(client, nodeName, func(n *v1.Node) { - patchNodeForDynamicConfig(n, configMapName) - }) -} - -func patchNodeForDynamicConfig(n *v1.Node, configMapName string) { - n.Spec.ConfigSource = &v1.NodeConfigSource{ - ConfigMap: &v1.ConfigMapNodeConfigSource{ - Name: configMapName, - Namespace: metav1.NamespaceSystem, - KubeletConfigKey: kubeadmconstants.KubeletBaseConfigurationConfigMapKey, - }, - } -} diff --git a/cmd/kubeadm/app/phases/kubelet/dynamic_test.go b/cmd/kubeadm/app/phases/kubelet/dynamic_test.go deleted file mode 100644 index 36ab695557e..00000000000 --- a/cmd/kubeadm/app/phases/kubelet/dynamic_test.go +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package kubelet - -import ( - "testing" - - "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/version" - "k8s.io/client-go/kubernetes/fake" - core "k8s.io/client-go/testing" -) - -func TestEnableDynamicConfigForNode(t *testing.T) { - nodeName := "fake-node" - client := fake.NewSimpleClientset() - client.PrependReactor("get", "nodes", func(action core.Action) (bool, runtime.Object, error) { - return true, &v1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: nodeName, - Labels: map[string]string{v1.LabelHostname: nodeName}, - }, - Spec: v1.NodeSpec{ - ConfigSource: &v1.NodeConfigSource{ - ConfigMap: &v1.ConfigMapNodeConfigSource{ - UID: "", - }, - }, - }, - }, nil - }) - client.PrependReactor("get", "configmaps", func(action core.Action) (bool, runtime.Object, error) { - return true, &v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: "kubelet-config-1.11", - Namespace: metav1.NamespaceSystem, - UID: "fake-uid", - }, - }, nil - }) - client.PrependReactor("patch", "nodes", func(action core.Action) (bool, runtime.Object, error) { - return true, nil, nil - }) - - if err := EnableDynamicConfigForNode(client, nodeName, version.MustParseSemantic("v1.11.0")); err != nil { - t.Errorf("UpdateNodeWithConfigMap: unexpected error %v", err) - } -} From daef96c3f276c8e6f3030c1dbf4edbf582784b9a Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Thu, 10 Sep 2020 02:08:09 +0300 Subject: [PATCH 2/2] kubeadm: remove stray "alpha phase" command This command had a TODO to be removed once kubeadm init phases are added. Remove the command as init phases are in place already. --- cmd/kubeadm/app/cmd/alpha/alpha.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/cmd/kubeadm/app/cmd/alpha/alpha.go b/cmd/kubeadm/app/cmd/alpha/alpha.go index 8d55f254539..f188232979c 100644 --- a/cmd/kubeadm/app/cmd/alpha/alpha.go +++ b/cmd/kubeadm/app/cmd/alpha/alpha.go @@ -20,7 +20,6 @@ import ( "io" "github.com/spf13/cobra" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" ) // NewCmdAlpha returns "kubeadm alpha" command. @@ -34,20 +33,5 @@ func NewCmdAlpha(in io.Reader, out io.Writer) *cobra.Command { cmd.AddCommand(newCmdKubeConfigUtility(out)) cmd.AddCommand(NewCmdSelfhosting(in)) - // TODO: This command should be removed as soon as the kubeadm init phase refactoring is completed. - // current phases implemented as cobra.Commands should become workflow.Phases, while other utilities - // hosted under kubeadm alpha phases command should found a new home under kubeadm alpha (without phases) - cmd.AddCommand(newCmdPhase(out)) - - return cmd -} - -func newCmdPhase(out io.Writer) *cobra.Command { - cmd := &cobra.Command{ - Use: "phase", - Short: "Invoke subsets of kubeadm functions separately for a manual install", - Long: cmdutil.MacroCommandLongDescription, - } - return cmd }