diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 95c9ed7757..ae9b863cfd 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -25,6 +25,7 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm/v1alpha3:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library", + "//cmd/kubeadm/app/cmd/alpha:go_default_library", "//cmd/kubeadm/app/cmd/options:go_default_library", "//cmd/kubeadm/app/cmd/phases:go_default_library", "//cmd/kubeadm/app/cmd/phases/workflow:go_default_library", @@ -131,6 +132,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//cmd/kubeadm/app/cmd/alpha:all-srcs", "//cmd/kubeadm/app/cmd/options:all-srcs", "//cmd/kubeadm/app/cmd/phases:all-srcs", "//cmd/kubeadm/app/cmd/upgrade:all-srcs", diff --git a/cmd/kubeadm/app/cmd/phases/certs/BUILD b/cmd/kubeadm/app/cmd/alpha/BUILD similarity index 63% rename from cmd/kubeadm/app/cmd/phases/certs/BUILD rename to cmd/kubeadm/app/cmd/alpha/BUILD index 3f1ba58371..2aad820f93 100644 --- a/cmd/kubeadm/app/cmd/phases/certs/BUILD +++ b/cmd/kubeadm/app/cmd/alpha/BUILD @@ -2,36 +2,36 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", - srcs = ["renew.go"], - importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/certs", + srcs = [ + "alpha.go", + "certs.go", + "kubeconfig.go", + "kubelet.go", + "preflight.go", + ], + importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/alpha", visibility = ["//visibility:public"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/scheme:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", + "//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library", "//cmd/kubeadm/app/cmd/options:go_default_library", + "//cmd/kubeadm/app/cmd/phases:go_default_library", "//cmd/kubeadm/app/cmd/util:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/app/phases/certs/renewal:go_default_library", + "//cmd/kubeadm/app/phases/kubeconfig:go_default_library", + "//cmd/kubeadm/app/phases/kubelet:go_default_library", + "//cmd/kubeadm/app/preflight:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/config:go_default_library", "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//pkg/util/normalizer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", + "//vendor/github.com/pkg/errors:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = ["renewal_test.go"], - embed = [":go_default_library"], - deps = [ - "//cmd/kubeadm/app/constants:go_default_library", - "//cmd/kubeadm/app/phases/certs/pkiutil:go_default_library", - "//cmd/kubeadm/test:go_default_library", - "//cmd/kubeadm/test/certs:go_default_library", - "//cmd/kubeadm/test/cmd:go_default_library", - "//vendor/github.com/spf13/cobra:go_default_library", + "//vendor/k8s.io/utils/exec:go_default_library", ], ) @@ -48,3 +48,22 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = [ + "certs_test.go", + "kubeconfig_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/phases/certs/pkiutil:go_default_library", + "//cmd/kubeadm/test:go_default_library", + "//cmd/kubeadm/test/certs:go_default_library", + "//cmd/kubeadm/test/cmd:go_default_library", + "//cmd/kubeadm/test/kubeconfig:go_default_library", + "//staging/src/k8s.io/client-go/tools/clientcmd: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 new file mode 100644 index 0000000000..06cf9b4279 --- /dev/null +++ b/cmd/kubeadm/app/cmd/alpha/alpha.go @@ -0,0 +1,62 @@ +/* +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 ( + "io" + + "github.com/spf13/cobra" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases" + cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" +) + +// NewCmdAlpha returns "kubeadm alpha" command. +func NewCmdAlpha(out io.Writer) *cobra.Command { + cmd := &cobra.Command{ + Use: "alpha", + Short: "Kubeadm experimental sub-commands", + } + + cmd.AddCommand(newCmdCertsUtility()) + cmd.AddCommand(newCmdKubeletUtility()) + cmd.AddCommand(newCmdKubeConfigUtility(out)) + cmd.AddCommand(newCmdPreFlightUtility()) + + // 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, + } + + cmd.AddCommand(phases.NewCmdAddon()) + cmd.AddCommand(phases.NewCmdBootstrapToken()) + cmd.AddCommand(phases.NewCmdEtcd()) + cmd.AddCommand(phases.NewCmdMarkMaster()) + cmd.AddCommand(phases.NewCmdSelfhosting()) + cmd.AddCommand(phases.NewCmdUploadConfig()) + + return cmd +} diff --git a/cmd/kubeadm/app/cmd/phases/certs/renew.go b/cmd/kubeadm/app/cmd/alpha/certs.go similarity index 92% rename from cmd/kubeadm/app/cmd/phases/certs/renew.go rename to cmd/kubeadm/app/cmd/alpha/certs.go index 16c43781c3..e4ac840ba1 100644 --- a/cmd/kubeadm/app/cmd/phases/certs/renew.go +++ b/cmd/kubeadm/app/cmd/alpha/certs.go @@ -14,13 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package renew +package alpha import ( "fmt" "github.com/spf13/cobra" - kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" @@ -46,8 +45,20 @@ var ( `) ) -// NewCmdCertsRenewal creates a new `cert renew` command. -func NewCmdCertsRenewal() *cobra.Command { +// newCmdCertsUtility returns main command for certs phase +func newCmdCertsUtility() *cobra.Command { + cmd := &cobra.Command{ + Use: "certs", + Aliases: []string{"certificates"}, + Short: "Commands related to handling kubernetes certificates", + } + + cmd.AddCommand(newCmdCertsRenewal()) + return cmd +} + +// newCmdCertsRenewal creates a new `cert renew` command. +func newCmdCertsRenewal() *cobra.Command { cmd := &cobra.Command{ Use: "renew", Short: "Renews certificates for a Kubernetes cluster", diff --git a/cmd/kubeadm/app/cmd/phases/certs/renewal_test.go b/cmd/kubeadm/app/cmd/alpha/certs_test.go similarity index 99% rename from cmd/kubeadm/app/cmd/phases/certs/renewal_test.go rename to cmd/kubeadm/app/cmd/alpha/certs_test.go index 81bc781b34..abddf64da7 100644 --- a/cmd/kubeadm/app/cmd/phases/certs/renewal_test.go +++ b/cmd/kubeadm/app/cmd/alpha/certs_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package renew +package alpha import ( "crypto/rand" @@ -29,7 +29,6 @@ import ( "time" "github.com/spf13/cobra" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs/pkiutil" testutil "k8s.io/kubernetes/cmd/kubeadm/test" @@ -58,7 +57,7 @@ func TestCommandsGenerated(t *testing.T) { "renew etcd-healthcheck-client", } - renewCmd := NewCmdCertsRenewal() + renewCmd := newCmdCertsRenewal() fakeRoot := &cobra.Command{} fakeRoot.AddCommand(renewCmd) diff --git a/cmd/kubeadm/app/cmd/alpha/kubeconfig.go b/cmd/kubeadm/app/cmd/alpha/kubeconfig.go new file mode 100644 index 0000000000..6b1178ee62 --- /dev/null +++ b/cmd/kubeadm/app/cmd/alpha/kubeconfig.go @@ -0,0 +1,106 @@ +/* +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 ( + "io" + + "github.com/pkg/errors" + "github.com/spf13/cobra" + kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" + kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" + cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" + kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" + "k8s.io/kubernetes/pkg/util/normalizer" +) + +var ( + kubeconfigLongDesc = normalizer.LongDesc(` + Kubeconfig file utilities. + ` + cmdutil.AlphaDisclaimer) + + userKubeconfigLongDesc = normalizer.LongDesc(` + Outputs a kubeconfig file for an additional user. + ` + cmdutil.AlphaDisclaimer) + + userKubeconfigExample = normalizer.Examples(` + # Outputs a kubeconfig file for an additional user named foo + kubeadm alpha kubeconfig user --client-name=foo + `) +) + +// newCmdKubeConfigUtility returns main command for kubeconfig phase +func newCmdKubeConfigUtility(out io.Writer) *cobra.Command { + cmd := &cobra.Command{ + Use: "kubeconfig", + Short: "Kubeconfig file utilities", + Long: kubeconfigLongDesc, + } + + cmd.AddCommand(newCmdUserKubeConfig(out)) + return cmd +} + +// newCmdUserKubeConfig returns sub commands for kubeconfig phase +func newCmdUserKubeConfig(out io.Writer) *cobra.Command { + + cfg := &kubeadmapiv1beta1.InitConfiguration{} + + // Default values for the cobra help text + kubeadmscheme.Scheme.Default(cfg) + + var token, clientName string + var organizations []string + + // Creates the UX Command + cmd := &cobra.Command{ + Use: "user", + Short: "Outputs a kubeconfig file for an additional user", + Long: userKubeconfigLongDesc, + Example: userKubeconfigExample, + Run: func(cmd *cobra.Command, args []string) { + if clientName == "" { + kubeadmutil.CheckErr(errors.New("missing required argument --client-name")) + } + + // This call returns the ready-to-use configuration based on the configuration file that might or might not exist and the default cfg populated by flags + internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig("", cfg) + kubeadmutil.CheckErr(err) + + // if the kubeconfig file for an additional user has to use a token, use it + if token != "" { + kubeadmutil.CheckErr(kubeconfigphase.WriteKubeConfigWithToken(out, internalcfg, clientName, token)) + return + } + + // Otherwise, write a kubeconfig file with a generate client cert + kubeadmutil.CheckErr(kubeconfigphase.WriteKubeConfigWithClientCert(out, internalcfg, clientName, organizations)) + }, + } + + // Add flags to the command + cmd.Flags().StringVar(&cfg.CertificatesDir, "cert-dir", cfg.CertificatesDir, "The path where certificates are stored") + cmd.Flags().StringVar(&cfg.APIEndpoint.AdvertiseAddress, "apiserver-advertise-address", cfg.APIEndpoint.AdvertiseAddress, "The IP address the API server is accessible on") + cmd.Flags().Int32Var(&cfg.APIEndpoint.BindPort, "apiserver-bind-port", cfg.APIEndpoint.BindPort, "The port the API server is accessible on") + cmd.Flags().StringVar(&token, "token", token, "The token that should be used as the authentication mechanism for this kubeconfig, instead of client certificates") + cmd.Flags().StringVar(&clientName, "client-name", clientName, "The name of user. It will be used as the CN if client certificates are created") + cmd.Flags().StringSliceVar(&organizations, "org", organizations, "The orgnizations of the client certificate. It will be used as the O if client certificates are created") + + return cmd +} diff --git a/cmd/kubeadm/app/cmd/phases/kubeconfig_test.go b/cmd/kubeadm/app/cmd/alpha/kubeconfig_test.go similarity index 79% rename from cmd/kubeadm/app/cmd/phases/kubeconfig_test.go rename to cmd/kubeadm/app/cmd/alpha/kubeconfig_test.go index 26cfd3203b..8eab2ef080 100644 --- a/cmd/kubeadm/app/cmd/phases/kubeconfig_test.go +++ b/cmd/kubeadm/app/cmd/alpha/kubeconfig_test.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +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. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package phases +package alpha import ( "bytes" @@ -22,32 +22,13 @@ import ( "os" "testing" - "github.com/spf13/cobra" "k8s.io/client-go/tools/clientcmd" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs/pkiutil" testutil "k8s.io/kubernetes/cmd/kubeadm/test" - cmdtestutil "k8s.io/kubernetes/cmd/kubeadm/test/cmd" kubeconfigtestutil "k8s.io/kubernetes/cmd/kubeadm/test/kubeconfig" ) -func TestKubeConfigCSubCommandsHasFlags(t *testing.T) { - cmd := NewCmdUserKubeConfig(nil, "", phaseTestK8sVersion) - - flags := []string{ - "cert-dir", - "apiserver-advertise-address", - "apiserver-bind-port", - "kubeconfig-dir", - "token", - "client-name", - } - - cmdtestutil.AssertSubCommandHasFlags(t, []*cobra.Command{cmd}, "user", flags...) -} - -const phaseTestK8sVersion = "v1.11.0" - func TestKubeConfigSubCommandsThatWritesToOut(t *testing.T) { // Temporary folders for the test case @@ -57,8 +38,6 @@ func TestKubeConfigSubCommandsThatWritesToOut(t *testing.T) { // Adds a pki folder with a ca cert to the temp folder pkidir := testutil.SetupPkiDirWithCertificateAuthorithy(t, tmpdir) - outputdir := tmpdir - // Retrieves ca cert for assertions caCert, _, err := pkiutil.TryLoadCertAndKeyFromDisk(pkidir, kubeadmconstants.CACertAndKeyBaseName) if err != nil { @@ -70,7 +49,6 @@ func TestKubeConfigSubCommandsThatWritesToOut(t *testing.T) { "--apiserver-bind-port=1234", "--client-name=myUser", fmt.Sprintf("--cert-dir=%s", pkidir), - fmt.Sprintf("--kubeconfig-dir=%s", outputdir), } var tests = []struct { @@ -94,11 +72,14 @@ func TestKubeConfigSubCommandsThatWritesToOut(t *testing.T) { buf := new(bytes.Buffer) // Get subcommands working in the temporary directory - cmd := NewCmdUserKubeConfig(buf, tmpdir, phaseTestK8sVersion) + cmd := newCmdUserKubeConfig(buf) // Execute the subcommand allFlags := append(commonFlags, test.additionalFlags...) - cmdtestutil.RunSubCommand(t, []*cobra.Command{cmd}, test.command, allFlags...) + cmd.SetArgs(allFlags) + if err := cmd.Execute(); err != nil { + t.Fatal("Could not execute subcommand") + } // reads kubeconfig written to stdout config, err := clientcmd.Load(buf.Bytes()) diff --git a/cmd/kubeadm/app/cmd/alpha/kubelet.go b/cmd/kubeadm/app/cmd/alpha/kubelet.go new file mode 100644 index 0000000000..8ab3575ad9 --- /dev/null +++ b/cmd/kubeadm/app/cmd/alpha/kubelet.go @@ -0,0 +1,162 @@ +/* +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 ( + "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" + "k8s.io/kubernetes/cmd/kubeadm/app/preflight" + kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" + "k8s.io/kubernetes/pkg/util/normalizer" + utilsexec "k8s.io/utils/exec" +) + +var ( + kubeletConfigDownloadLongDesc = normalizer.LongDesc(` + Downloads the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, + where X is the minor version of the kubelet. Either kubeadm autodetects the kubelet version by exec-ing + "kubelet --version" or respects the --kubelet-version parameter. + ` + cmdutil.AlphaDisclaimer) + + kubeletConfigDownloadExample = normalizer.Examples(` + # Downloads the kubelet configuration from the ConfigMap in the cluster. Autodetects the kubelet version. + kubeadm alpha phase kubelet config download + + # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. + kubeadm alpha phase kubelet config download --kubelet-version v1.12.0 + `) + + kubeletConfigEnableDynamicLongDesc = normalizer.LongDesc(` + Enables or updates 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 feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it + may have surprising side-effects at this stage. + + ` + cmdutil.AlphaDisclaimer) + + kubeletConfigEnableDynamicExample = normalizer.Examples(` + # Enables dynamic kubelet configuration for a Node. + kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0 + + WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it + may have surprising side-effects at this stage. + `) +) + +// 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(newCmdKubeletConfigDownload()) + cmd.AddCommand(newCmdKubeletConfigEnableDynamic()) + return cmd +} + +// newCmdKubeletConfigDownload calls cobra.Command for downloading the kubelet configuration from the kubelet-config-1.X ConfigMap in the cluster +func newCmdKubeletConfigDownload() *cobra.Command { + var kubeletVersionStr string + // TODO: Be smarter about this and be able to load multiple kubeconfig files in different orders of precedence + kubeConfigFile := constants.GetKubeletKubeConfigPath() + + cmd := &cobra.Command{ + Use: "download", + Short: "Downloads the kubelet configuration from the cluster ConfigMap kubelet-config-1.X, where X is the minor version of the kubelet.", + Long: kubeletConfigDownloadLongDesc, + Example: kubeletConfigDownloadExample, + Run: func(cmd *cobra.Command, args []string) { + kubeletVersion, err := getKubeletVersion(kubeletVersionStr) + kubeadmutil.CheckErr(err) + + client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) + kubeadmutil.CheckErr(err) + + err = kubeletphase.DownloadConfig(client, kubeletVersion, constants.KubeletRunDirectory) + kubeadmutil.CheckErr(err) + }, + } + + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) + cmd.Flags().StringVar(&kubeletVersionStr, "kubelet-version", kubeletVersionStr, "The desired version for the kubelet. Defaults to being autodetected from 'kubelet --version'.") + return cmd +} + +func getKubeletVersion(kubeletVersionStr string) (*version.Version, error) { + if len(kubeletVersionStr) > 0 { + return version.ParseSemantic(kubeletVersionStr) + } + return preflight.GetKubeletVersion(utilsexec.New()) +} + +// 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 + kubeConfigFile := constants.GetAdminKubeConfigPath() + + cmd := &cobra.Command{ + Use: "enable-dynamic", + Short: "EXPERIMENTAL: Enables or updates dynamic kubelet configuration for a Node", + Long: kubeletConfigEnableDynamicLongDesc, + Example: kubeletConfigEnableDynamicExample, + Run: func(cmd *cobra.Command, args []string) { + if len(nodeName) == 0 { + kubeadmutil.CheckErr(errors.New("The --node-name argument is required")) + } + if len(kubeletVersionStr) == 0 { + kubeadmutil.CheckErr(errors.New("The --kubelet-version argument is required")) + } + + kubeletVersion, err := version.ParseSemantic(kubeletVersionStr) + kubeadmutil.CheckErr(err) + + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) + client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) + kubeadmutil.CheckErr(err) + + err = kubeletphase.EnableDynamicConfigForNode(client, nodeName, kubeletVersion) + kubeadmutil.CheckErr(err) + }, + } + + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) + cmd.Flags().StringVar(&nodeName, "node-name", 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/cmd/alpha/preflight.go b/cmd/kubeadm/app/cmd/alpha/preflight.go new file mode 100644 index 0000000000..40ff684c4b --- /dev/null +++ b/cmd/kubeadm/app/cmd/alpha/preflight.go @@ -0,0 +1,100 @@ +/* +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" + kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" + kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" + "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" + cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + "k8s.io/kubernetes/cmd/kubeadm/app/preflight" + kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" + "k8s.io/kubernetes/pkg/util/normalizer" + utilsexec "k8s.io/utils/exec" +) + +var ( + nodePreflightLongDesc = normalizer.LongDesc(` + Run node pre-flight checks, functionally equivalent to what implemented by kubeadm join. + ` + cmdutil.AlphaDisclaimer) + + nodePreflightExample = normalizer.Examples(` + # Run node pre-flight checks. + kubeadm alpha preflight node + `) + + errorMissingConfigFlag = errors.New("the --config flag is mandatory") +) + +// newCmdPreFlightUtility calls cobra.Command for preflight checks +func newCmdPreFlightUtility() *cobra.Command { + cmd := &cobra.Command{ + Use: "preflight", + Short: "Commands related to pre-flight checks", + Long: cmdutil.MacroCommandLongDescription, + } + + cmd.AddCommand(newCmdPreFlightNode()) + + return cmd +} + +// newCmdPreFlightNode calls cobra.Command for node preflight checks +func newCmdPreFlightNode() *cobra.Command { + var cfgPath string + var ignorePreflightErrors []string + + cmd := &cobra.Command{ + Use: "node", + Short: "Run node pre-flight checks", + Long: nodePreflightLongDesc, + Example: nodePreflightExample, + Run: func(cmd *cobra.Command, args []string) { + if len(cfgPath) == 0 { + kubeadmutil.CheckErr(errorMissingConfigFlag) + } + ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(ignorePreflightErrors) + kubeadmutil.CheckErr(err) + + cfg := &kubeadmapiv1beta1.JoinConfiguration{} + kubeadmscheme.Scheme.Default(cfg) + + internalcfg, err := configutil.JoinConfigFileAndDefaultsToInternalConfig(cfgPath, cfg) + kubeadmutil.CheckErr(err) + err = configutil.VerifyAPIServerBindAddress(internalcfg.APIEndpoint.AdvertiseAddress) + kubeadmutil.CheckErr(err) + + fmt.Println("[preflight] running pre-flight checks") + + err = preflight.RunJoinNodeChecks(utilsexec.New(), internalcfg, ignorePreflightErrorsSet) + kubeadmutil.CheckErr(err) + + fmt.Println("[preflight] pre-flight checks passed") + }, + } + + options.AddConfigFlag(cmd.PersistentFlags(), &cfgPath) + options.AddIgnorePreflightErrorsFlag(cmd.PersistentFlags(), &ignorePreflightErrors) + + return cmd +} diff --git a/cmd/kubeadm/app/cmd/cmd.go b/cmd/kubeadm/app/cmd/cmd.go index 14259211ea..74656288ee 100644 --- a/cmd/kubeadm/app/cmd/cmd.go +++ b/cmd/kubeadm/app/cmd/cmd.go @@ -22,8 +22,7 @@ import ( "github.com/renstrom/dedent" "github.com/spf13/cobra" "github.com/spf13/pflag" - - "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/alpha" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/upgrade" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" // Register the kubeadm configuration types because CLI flag generation @@ -90,14 +89,7 @@ func NewKubeadmCommand(in io.Reader, out, err io.Writer) *cobra.Command { cmds.AddCommand(NewCmdVersion(out)) cmds.AddCommand(NewCmdToken(out, err)) cmds.AddCommand(upgrade.NewCmdUpgrade(out)) - - // Wrap not yet fully supported commands in an alpha subcommand - experimentalCmd := &cobra.Command{ - Use: "alpha", - Short: "Experimental sub-commands not yet fully functional.", - } - experimentalCmd.AddCommand(phases.NewCmdPhase(out)) - cmds.AddCommand(experimentalCmd) + cmds.AddCommand(alpha.NewCmdAlpha(out)) AddKubeadmOtherFlags(cmds.PersistentFlags(), &rootfsPath) diff --git a/cmd/kubeadm/app/cmd/phases/BUILD b/cmd/kubeadm/app/cmd/phases/BUILD index 5bb49f8242..3c73b3ead1 100644 --- a/cmd/kubeadm/app/cmd/phases/BUILD +++ b/cmd/kubeadm/app/cmd/phases/BUILD @@ -11,7 +11,6 @@ go_library( "kubeconfig.go", "kubelet.go", "markmaster.go", - "phase.go", "preflight.go", "selfhosting.go", "uploadconfig.go", @@ -25,7 +24,6 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library", "//cmd/kubeadm/app/cmd/options:go_default_library", - "//cmd/kubeadm/app/cmd/phases/certs:go_default_library", "//cmd/kubeadm/app/cmd/phases/workflow:go_default_library", "//cmd/kubeadm/app/cmd/util:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", @@ -53,7 +51,6 @@ go_library( "//pkg/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/cluster-bootstrap/token/api:go_default_library", "//vendor/github.com/golang/glog:go_default_library", @@ -69,21 +66,14 @@ go_test( srcs = [ "addons_test.go", "etcd_test.go", - "kubeconfig_test.go", - "kubelet_test.go", "util_test.go", ], embed = [":go_default_library"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", - "//cmd/kubeadm/app/constants:go_default_library", - "//cmd/kubeadm/app/phases/certs/pkiutil:go_default_library", "//cmd/kubeadm/test:go_default_library", "//cmd/kubeadm/test/cmd:go_default_library", - "//cmd/kubeadm/test/kubeconfig:go_default_library", "//pkg/version:go_default_library", - "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", - "//vendor/github.com/spf13/cobra:go_default_library", ], ) @@ -98,7 +88,6 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//cmd/kubeadm/app/cmd/phases/certs:all-srcs", "//cmd/kubeadm/app/cmd/phases/workflow:all-srcs", ], tags = ["automanaged"], diff --git a/cmd/kubeadm/app/cmd/phases/certs.go b/cmd/kubeadm/app/cmd/phases/certs.go index 2f6a862467..20582e1113 100644 --- a/cmd/kubeadm/app/cmd/phases/certs.go +++ b/cmd/kubeadm/app/cmd/phases/certs.go @@ -21,11 +21,9 @@ import ( "strings" "github.com/pkg/errors" - "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" - certscmdphase "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/certs" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -68,24 +66,6 @@ func NewCertsPhase() workflow.Phase { } } -// NewCmdCerts returns main command for certs phase -func NewCmdCerts() *cobra.Command { - cmd := &cobra.Command{ - Use: "certs", - Aliases: []string{"certificates"}, - Short: "Generates certificates for a Kubernetes cluster", - Long: cmdutil.MacroCommandLongDescription, - } - - cmd.AddCommand(getCertsSubCommands()...) - return cmd -} - -// getCertsSubCommands returns sub commands for certs phase -func getCertsSubCommands() []*cobra.Command { - return []*cobra.Command{certscmdphase.NewCmdCertsRenewal()} -} - // newCertSubPhases returns sub phases for certs phase func newCertSubPhases() []workflow.Phase { subPhases := []workflow.Phase{} diff --git a/cmd/kubeadm/app/cmd/phases/etcd_test.go b/cmd/kubeadm/app/cmd/phases/etcd_test.go index cc12e3c822..640d9ed67b 100644 --- a/cmd/kubeadm/app/cmd/phases/etcd_test.go +++ b/cmd/kubeadm/app/cmd/phases/etcd_test.go @@ -25,6 +25,8 @@ import ( cmdtestutil "k8s.io/kubernetes/cmd/kubeadm/test/cmd" ) +const phaseTestK8sVersion = "v1.11.0" + func TestEtcdSubCommandsHasFlags(t *testing.T) { subCmds := getEtcdSubCommands("", phaseTestK8sVersion) diff --git a/cmd/kubeadm/app/cmd/phases/kubeconfig.go b/cmd/kubeadm/app/cmd/phases/kubeconfig.go index aa23e9890d..a905d3967f 100644 --- a/cmd/kubeadm/app/cmd/phases/kubeconfig.go +++ b/cmd/kubeadm/app/cmd/phases/kubeconfig.go @@ -18,34 +18,16 @@ package phases import ( "fmt" - "io" "github.com/pkg/errors" - "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" - kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" - kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" "k8s.io/kubernetes/pkg/util/normalizer" ) var ( - kubeconfigLongDesc = normalizer.LongDesc(` - kubeconfig file utilities. - ` + cmdutil.AlphaDisclaimer) - - userKubeconfigLongDesc = normalizer.LongDesc(` - Outputs a kubeconfig file for an additional user. - ` + cmdutil.AlphaDisclaimer) - - userKubeconfigExample = normalizer.Examples(` - # Outputs a kubeconfig file for an additional user named foo - kubeadm alpha kubeconfig user --client-name=foo - `) - kubeconfigFilePhaseProperties = map[string]struct { name string short string @@ -148,59 +130,3 @@ func runKubeConfigFile(kubeConfigFileName string) func(workflow.RunData) error { return kubeconfigphase.CreateKubeConfigFile(kubeConfigFileName, data.KubeConfigDir(), data.Cfg()) } } - -// NewCmdKubeConfig returns main command for kubeconfig phase -func NewCmdKubeConfig(out io.Writer) *cobra.Command { - cmd := &cobra.Command{ - Use: "kubeconfig", - Short: "kubeconfig file utilities", - Long: kubeconfigLongDesc, - } - - cmd.AddCommand(NewCmdUserKubeConfig(out, kubeadmconstants.KubernetesDir, "")) - return cmd -} - -// NewCmdUserKubeConfig returns sub commands for kubeconfig phase -func NewCmdUserKubeConfig(out io.Writer, outDir, defaultKubernetesVersion string) *cobra.Command { - - cfg := &kubeadmapiv1beta1.InitConfiguration{} - - // Default values for the cobra help text - kubeadmscheme.Scheme.Default(cfg) - - var cfgPath, token, clientName string - var organizations []string - - // Creates the UX Command - cmd := &cobra.Command{ - Use: "user", - Short: "Outputs a kubeconfig file for an additional user", - Long: userKubeconfigLongDesc, - Example: userKubeconfigExample, - Run: runCmdPhase(func(outDir string, cfg *kubeadmapi.InitConfiguration) error { - if clientName == "" { - return errors.New("missing required argument --client-name") - } - - // if the kubeconfig file for an additional user has to use a token, use it - if token != "" { - return kubeconfigphase.WriteKubeConfigWithToken(out, cfg, clientName, token) - } - - // Otherwise, write a kubeconfig file with a generate client cert - return kubeconfigphase.WriteKubeConfigWithClientCert(out, cfg, clientName, organizations) - }, &outDir, &cfgPath, cfg, defaultKubernetesVersion), - } - - // Add flags to the command - cmd.Flags().StringVar(&cfg.CertificatesDir, "cert-dir", cfg.CertificatesDir, "The path where certificates are stored") - cmd.Flags().StringVar(&cfg.APIEndpoint.AdvertiseAddress, "apiserver-advertise-address", cfg.APIEndpoint.AdvertiseAddress, "The IP address the API server is accessible on") - cmd.Flags().Int32Var(&cfg.APIEndpoint.BindPort, "apiserver-bind-port", cfg.APIEndpoint.BindPort, "The port the API server is accessible on") - cmd.Flags().StringVar(&outDir, "kubeconfig-dir", outDir, "The path where to save the kubeconfig file") - cmd.Flags().StringVar(&token, "token", token, "The token that should be used as the authentication mechanism for this kubeconfig, instead of client certificates") - cmd.Flags().StringVar(&clientName, "client-name", clientName, "The name of user. It will be used as the CN if client certificates are created") - cmd.Flags().StringSliceVar(&organizations, "org", organizations, "The orgnizations of the client certificate. It will be used as the O if client certificates are created") - - return cmd -} diff --git a/cmd/kubeadm/app/cmd/phases/kubelet.go b/cmd/kubeadm/app/cmd/phases/kubelet.go index 1ada6d7b1c..18b8486b91 100644 --- a/cmd/kubeadm/app/cmd/phases/kubelet.go +++ b/cmd/kubeadm/app/cmd/phases/kubelet.go @@ -20,7 +20,6 @@ import ( "github.com/golang/glog" "github.com/pkg/errors" "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/util/version" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" @@ -29,12 +28,10 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeletphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubelet" patchnodephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/patchnode" - "k8s.io/kubernetes/cmd/kubeadm/app/preflight" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" "k8s.io/kubernetes/pkg/util/normalizer" - utilsexec "k8s.io/utils/exec" ) var ( @@ -60,37 +57,6 @@ var ( kubeletConfigAnnotateCRIExample = normalizer.Examples(` kubeadm alpha phase kubelet config annotate-cri --config kubeadm.yaml `) - - kubeletConfigDownloadLongDesc = normalizer.LongDesc(` - Downloads the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, - where X is the minor version of the kubelet. Either kubeadm autodetects the kubelet version by exec-ing - "kubelet --version" or respects the --kubelet-version parameter. - ` + cmdutil.AlphaDisclaimer) - - kubeletConfigDownloadExample = normalizer.Examples(` - # Downloads the kubelet configuration from the ConfigMap in the cluster. Autodetects the kubelet version. - kubeadm alpha phase kubelet config download - - # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. - kubeadm alpha phase kubelet config download --kubelet-version v1.12.0 - `) - - kubeletConfigEnableDynamicLongDesc = normalizer.LongDesc(` - Enables or updates 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 feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it - may have surprising side-effects at this stage. - - ` + cmdutil.AlphaDisclaimer) - - kubeletConfigEnableDynamicExample = normalizer.Examples(` - # Enables dynamic kubelet configuration for a Node. - kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0 - - WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it - may have surprising side-effects at this stage. - `) ) // kubeletStartData defines the behavior that a runtime data struct passed to the kubelet start phase @@ -170,8 +136,6 @@ func NewCmdKubeletConfig() *cobra.Command { cmd.AddCommand(NewCmdKubeletConfigUpload()) cmd.AddCommand(NewCmdKubeletAnnotateCRI()) - cmd.AddCommand(NewCmdKubeletConfigDownload()) - cmd.AddCommand(NewCmdKubeletConfigEnableDynamic()) return cmd } @@ -250,75 +214,3 @@ func NewCmdKubeletAnnotateCRI() *cobra.Command { options.AddConfigFlag(cmd.Flags(), &cfgPath) return cmd } - -// NewCmdKubeletConfigDownload calls cobra.Command for downloading the kubelet configuration from the kubelet-config-1.X ConfigMap in the cluster -func NewCmdKubeletConfigDownload() *cobra.Command { - var kubeletVersionStr string - // TODO: Be smarter about this and be able to load multiple kubeconfig files in different orders of precedence - kubeConfigFile := constants.GetKubeletKubeConfigPath() - - cmd := &cobra.Command{ - Use: "download", - Short: "Downloads the kubelet configuration from the cluster ConfigMap kubelet-config-1.X, where X is the minor version of the kubelet.", - Long: kubeletConfigDownloadLongDesc, - Example: kubeletConfigDownloadExample, - Run: func(cmd *cobra.Command, args []string) { - kubeletVersion, err := getKubeletVersion(kubeletVersionStr) - kubeadmutil.CheckErr(err) - - client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) - kubeadmutil.CheckErr(err) - - err = kubeletphase.DownloadConfig(client, kubeletVersion, constants.KubeletRunDirectory) - kubeadmutil.CheckErr(err) - }, - } - - options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) - cmd.Flags().StringVar(&kubeletVersionStr, "kubelet-version", kubeletVersionStr, "The desired version for the kubelet. Defaults to being autodetected from 'kubelet --version'.") - return cmd -} - -func getKubeletVersion(kubeletVersionStr string) (*version.Version, error) { - if len(kubeletVersionStr) > 0 { - return version.ParseSemantic(kubeletVersionStr) - } - return preflight.GetKubeletVersion(utilsexec.New()) -} - -// 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 - kubeConfigFile := constants.GetAdminKubeConfigPath() - - cmd := &cobra.Command{ - Use: "enable-dynamic", - Short: "EXPERIMENTAL: Enables or updates dynamic kubelet configuration for a Node", - Long: kubeletConfigEnableDynamicLongDesc, - Example: kubeletConfigEnableDynamicExample, - Run: func(cmd *cobra.Command, args []string) { - if len(nodeName) == 0 { - kubeadmutil.CheckErr(errors.New("The --node-name argument is required")) - } - if len(kubeletVersionStr) == 0 { - kubeadmutil.CheckErr(errors.New("The --kubelet-version argument is required")) - } - - kubeletVersion, err := version.ParseSemantic(kubeletVersionStr) - kubeadmutil.CheckErr(err) - - kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) - client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) - kubeadmutil.CheckErr(err) - - err = kubeletphase.EnableDynamicConfigForNode(client, nodeName, kubeletVersion) - kubeadmutil.CheckErr(err) - }, - } - - options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) - cmd.Flags().StringVar(&nodeName, "node-name", 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/cmd/phases/kubelet_test.go b/cmd/kubeadm/app/cmd/phases/kubelet_test.go deleted file mode 100644 index d3b51c5fdf..0000000000 --- a/cmd/kubeadm/app/cmd/phases/kubelet_test.go +++ /dev/null @@ -1,67 +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 phases - -import ( - "testing" - - "github.com/spf13/cobra" - cmdtestutil "k8s.io/kubernetes/cmd/kubeadm/test/cmd" -) - -func TestKubeletSubCommandsHasFlags(t *testing.T) { - subCmds := []*cobra.Command{ - NewCmdKubeletConfigUpload(), - NewCmdKubeletConfigDownload(), - NewCmdKubeletConfigEnableDynamic(), - } - - commonFlags := []string{} - - var tests = []struct { - command string - additionalFlags []string - }{ - { - command: "upload", - additionalFlags: []string{ - "kubeconfig", - "config", - }, - }, - { - command: "download", - additionalFlags: []string{ - "kubeconfig", - "kubelet-version", - }, - }, - { - command: "enable-dynamic", - additionalFlags: []string{ - "kubeconfig", - "node-name", - "kubelet-version", - }, - }, - } - - for _, test := range tests { - expectedFlags := append(commonFlags, test.additionalFlags...) - cmdtestutil.AssertSubCommandHasFlags(t, subCmds, test.command, expectedFlags...) - } -} diff --git a/cmd/kubeadm/app/cmd/phases/phase.go b/cmd/kubeadm/app/cmd/phases/phase.go deleted file mode 100644 index bce2b4d243..0000000000 --- a/cmd/kubeadm/app/cmd/phases/phase.go +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2017 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 phases - -import ( - "io" - - "github.com/spf13/cobra" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" -) - -// NewCmdPhase returns the cobra command for the "kubeadm phase" command (currently alpha-gated) -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, - } - - cmd.AddCommand(NewCmdAddon()) - cmd.AddCommand(NewCmdBootstrapToken()) - cmd.AddCommand(NewCmdCerts()) - cmd.AddCommand(NewCmdEtcd()) - cmd.AddCommand(NewCmdKubelet()) - cmd.AddCommand(NewCmdKubeConfig(out)) - cmd.AddCommand(NewCmdMarkMaster()) - cmd.AddCommand(NewCmdPreFlight()) - cmd.AddCommand(NewCmdSelfhosting()) - cmd.AddCommand(NewCmdUploadConfig()) - - return cmd -} diff --git a/cmd/kubeadm/app/cmd/phases/preflight.go b/cmd/kubeadm/app/cmd/phases/preflight.go index 0e70166ad5..de9fca2569 100644 --- a/cmd/kubeadm/app/cmd/phases/preflight.go +++ b/cmd/kubeadm/app/cmd/phases/preflight.go @@ -17,21 +17,13 @@ limitations under the License. package phases import ( - "errors" "fmt" - "github.com/spf13/cobra" + "github.com/pkg/errors" "k8s.io/apimachinery/pkg/util/sets" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" - kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" - kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" - "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" - "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" - kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" - configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" "k8s.io/kubernetes/pkg/util/normalizer" utilsexec "k8s.io/utils/exec" ) @@ -41,17 +33,6 @@ var ( # Run master pre-flight checks using a config file. kubeadm init phase preflight --config kubeadm-config.yml `) - - nodePreflightLongDesc = normalizer.LongDesc(` - Run node pre-flight checks, functionally equivalent to what implemented by kubeadm join. - ` + cmdutil.AlphaDisclaimer) - - nodePreflightExample = normalizer.Examples(` - # Run node pre-flight checks. - kubeadm alpha phase preflight node - `) - - errorMissingConfigFlag = errors.New("the --config flag is mandatory") ) // preflightMasterData defines the behavior that a runtime data struct passed to the PreflightMaster master phase @@ -99,56 +80,3 @@ func runPreflightMaster(c workflow.RunData) error { return nil } - -// NewCmdPreFlight calls cobra.Command for preflight checks -func NewCmdPreFlight() *cobra.Command { - var cfgPath string - var ignorePreflightErrors []string - - cmd := &cobra.Command{ - Use: "preflight", - Short: "Run pre-flight checks", - Long: cmdutil.MacroCommandLongDescription, - } - - options.AddConfigFlag(cmd.PersistentFlags(), &cfgPath) - options.AddIgnorePreflightErrorsFlag(cmd.PersistentFlags(), &ignorePreflightErrors) - - cmd.AddCommand(NewCmdPreFlightNode(&cfgPath, &ignorePreflightErrors)) - - return cmd -} - -// NewCmdPreFlightNode calls cobra.Command for node preflight checks -func NewCmdPreFlightNode(cfgPath *string, ignorePreflightErrors *[]string) *cobra.Command { - cmd := &cobra.Command{ - Use: "node", - Short: "Run node pre-flight checks", - Long: nodePreflightLongDesc, - Example: nodePreflightExample, - Run: func(cmd *cobra.Command, args []string) { - if len(*cfgPath) == 0 { - kubeadmutil.CheckErr(errorMissingConfigFlag) - } - ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(*ignorePreflightErrors) - kubeadmutil.CheckErr(err) - - cfg := &kubeadmapiv1beta1.JoinConfiguration{} - kubeadmscheme.Scheme.Default(cfg) - - internalcfg, err := configutil.JoinConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg) - kubeadmutil.CheckErr(err) - err = configutil.VerifyAPIServerBindAddress(internalcfg.APIEndpoint.AdvertiseAddress) - kubeadmutil.CheckErr(err) - - fmt.Println("[preflight] running pre-flight checks") - - err = preflight.RunJoinNodeChecks(utilsexec.New(), internalcfg, ignorePreflightErrorsSet) - kubeadmutil.CheckErr(err) - - fmt.Println("[preflight] pre-flight checks passed") - }, - } - - return cmd -} diff --git a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go index 8fc774d310..0d9bca5cc9 100644 --- a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go +++ b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go @@ -268,7 +268,7 @@ func WriteKubeConfigWithClientCert(out io.Writer, cfg *kubeadmapi.InitConfigurat // creates the KubeConfigSpecs, actualized for the current InitConfiguration caCert, caKey, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) if err != nil { - return errors.Wrap(err, "couldn't create a kubeconfig; the CA files couldn't be loaded: %v") + return errors.Wrap(err, "couldn't create a kubeconfig; the CA files couldn't be loaded") } masterEndpoint, err := kubeadmutil.GetMasterEndpoint(cfg) @@ -295,7 +295,7 @@ func WriteKubeConfigWithToken(out io.Writer, cfg *kubeadmapi.InitConfiguration, // creates the KubeConfigSpecs, actualized for the current InitConfiguration caCert, _, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) if err != nil { - return errors.Wrapf(err, "couldn't create a kubeconfig; the CA files couldn't be loaded") + return errors.Wrap(err, "couldn't create a kubeconfig; the CA files couldn't be loaded") } masterEndpoint, err := kubeadmutil.GetMasterEndpoint(cfg) diff --git a/docs/.generated_docs b/docs/.generated_docs index 11deb6312b..27089a5a9c 100644 --- a/docs/.generated_docs +++ b/docs/.generated_docs @@ -6,6 +6,22 @@ docs/admin/kube-proxy.md docs/admin/kube-scheduler.md docs/admin/kubeadm.md docs/admin/kubeadm_alpha.md +docs/admin/kubeadm_alpha_certs.md +docs/admin/kubeadm_alpha_certs_renew.md +docs/admin/kubeadm_alpha_certs_renew_all.md +docs/admin/kubeadm_alpha_certs_renew_apiserver-etcd-client.md +docs/admin/kubeadm_alpha_certs_renew_apiserver-kubelet-client.md +docs/admin/kubeadm_alpha_certs_renew_apiserver.md +docs/admin/kubeadm_alpha_certs_renew_etcd-healthcheck-client.md +docs/admin/kubeadm_alpha_certs_renew_etcd-peer.md +docs/admin/kubeadm_alpha_certs_renew_etcd-server.md +docs/admin/kubeadm_alpha_certs_renew_front-proxy-client.md +docs/admin/kubeadm_alpha_kubeconfig.md +docs/admin/kubeadm_alpha_kubeconfig_user.md +docs/admin/kubeadm_alpha_kubelet.md +docs/admin/kubeadm_alpha_kubelet_config.md +docs/admin/kubeadm_alpha_kubelet_config_download.md +docs/admin/kubeadm_alpha_kubelet_config_enable-dynamic.md docs/admin/kubeadm_alpha_phase.md docs/admin/kubeadm_alpha_phase_addon.md docs/admin/kubeadm_alpha_phase_addon_all.md @@ -18,32 +34,14 @@ docs/admin/kubeadm_alpha_phase_bootstrap-token_create.md docs/admin/kubeadm_alpha_phase_bootstrap-token_node.md docs/admin/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md docs/admin/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md -docs/admin/kubeadm_alpha_phase_certs.md -docs/admin/kubeadm_alpha_phase_certs_renew.md -docs/admin/kubeadm_alpha_phase_certs_renew_all.md -docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md -docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md -docs/admin/kubeadm_alpha_phase_certs_renew_apiserver.md -docs/admin/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md -docs/admin/kubeadm_alpha_phase_certs_renew_etcd-peer.md -docs/admin/kubeadm_alpha_phase_certs_renew_etcd-server.md -docs/admin/kubeadm_alpha_phase_certs_renew_front-proxy-client.md docs/admin/kubeadm_alpha_phase_etcd.md docs/admin/kubeadm_alpha_phase_etcd_local.md -docs/admin/kubeadm_alpha_phase_kubeconfig.md -docs/admin/kubeadm_alpha_phase_kubeconfig_user.md -docs/admin/kubeadm_alpha_phase_kubelet.md -docs/admin/kubeadm_alpha_phase_kubelet_config.md -docs/admin/kubeadm_alpha_phase_kubelet_config_annotate-cri.md -docs/admin/kubeadm_alpha_phase_kubelet_config_download.md -docs/admin/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md -docs/admin/kubeadm_alpha_phase_kubelet_config_upload.md docs/admin/kubeadm_alpha_phase_mark-master.md -docs/admin/kubeadm_alpha_phase_preflight.md -docs/admin/kubeadm_alpha_phase_preflight_node.md docs/admin/kubeadm_alpha_phase_selfhosting.md docs/admin/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md docs/admin/kubeadm_alpha_phase_upload-config.md +docs/admin/kubeadm_alpha_preflight.md +docs/admin/kubeadm_alpha_preflight_node.md docs/admin/kubeadm_completion.md docs/admin/kubeadm_config.md docs/admin/kubeadm_config_images.md @@ -103,6 +101,22 @@ docs/man/man1/kube-apiserver.1 docs/man/man1/kube-controller-manager.1 docs/man/man1/kube-proxy.1 docs/man/man1/kube-scheduler.1 +docs/man/man1/kubeadm-alpha-certs-renew-all.1 +docs/man/man1/kubeadm-alpha-certs-renew-apiserver-etcd-client.1 +docs/man/man1/kubeadm-alpha-certs-renew-apiserver-kubelet-client.1 +docs/man/man1/kubeadm-alpha-certs-renew-apiserver.1 +docs/man/man1/kubeadm-alpha-certs-renew-etcd-healthcheck-client.1 +docs/man/man1/kubeadm-alpha-certs-renew-etcd-peer.1 +docs/man/man1/kubeadm-alpha-certs-renew-etcd-server.1 +docs/man/man1/kubeadm-alpha-certs-renew-front-proxy-client.1 +docs/man/man1/kubeadm-alpha-certs-renew.1 +docs/man/man1/kubeadm-alpha-certs.1 +docs/man/man1/kubeadm-alpha-kubeconfig-user.1 +docs/man/man1/kubeadm-alpha-kubeconfig.1 +docs/man/man1/kubeadm-alpha-kubelet-config-download.1 +docs/man/man1/kubeadm-alpha-kubelet-config-enable-dynamic.1 +docs/man/man1/kubeadm-alpha-kubelet-config.1 +docs/man/man1/kubeadm-alpha-kubelet.1 docs/man/man1/kubeadm-alpha-phase-addon-all.1 docs/man/man1/kubeadm-alpha-phase-addon-coredns.1 docs/man/man1/kubeadm-alpha-phase-addon-kube-proxy.1 @@ -114,33 +128,15 @@ docs/man/man1/kubeadm-alpha-phase-bootstrap-token-node-allow-auto-approve.1 docs/man/man1/kubeadm-alpha-phase-bootstrap-token-node-allow-post-csrs.1 docs/man/man1/kubeadm-alpha-phase-bootstrap-token-node.1 docs/man/man1/kubeadm-alpha-phase-bootstrap-token.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-all.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-etcd-client.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-kubelet-client.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-healthcheck-client.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-peer.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-server.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew-front-proxy-client.1 -docs/man/man1/kubeadm-alpha-phase-certs-renew.1 -docs/man/man1/kubeadm-alpha-phase-certs.1 docs/man/man1/kubeadm-alpha-phase-etcd-local.1 docs/man/man1/kubeadm-alpha-phase-etcd.1 -docs/man/man1/kubeadm-alpha-phase-kubeconfig-user.1 -docs/man/man1/kubeadm-alpha-phase-kubeconfig.1 -docs/man/man1/kubeadm-alpha-phase-kubelet-config-annotate-cri.1 -docs/man/man1/kubeadm-alpha-phase-kubelet-config-download.1 -docs/man/man1/kubeadm-alpha-phase-kubelet-config-enable-dynamic.1 -docs/man/man1/kubeadm-alpha-phase-kubelet-config-upload.1 -docs/man/man1/kubeadm-alpha-phase-kubelet-config.1 -docs/man/man1/kubeadm-alpha-phase-kubelet.1 docs/man/man1/kubeadm-alpha-phase-mark-master.1 -docs/man/man1/kubeadm-alpha-phase-preflight-node.1 -docs/man/man1/kubeadm-alpha-phase-preflight.1 docs/man/man1/kubeadm-alpha-phase-selfhosting-convert-from-staticpods.1 docs/man/man1/kubeadm-alpha-phase-selfhosting.1 docs/man/man1/kubeadm-alpha-phase-upload-config.1 docs/man/man1/kubeadm-alpha-phase.1 +docs/man/man1/kubeadm-alpha-preflight-node.1 +docs/man/man1/kubeadm-alpha-preflight.1 docs/man/man1/kubeadm-alpha.1 docs/man/man1/kubeadm-completion.1 docs/man/man1/kubeadm-config-images-list.1 diff --git a/docs/admin/kubeadm_alpha_phase_certs.md b/docs/admin/kubeadm_alpha_certs.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs.md rename to docs/admin/kubeadm_alpha_certs.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew.md b/docs/admin/kubeadm_alpha_certs_renew.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew.md rename to docs/admin/kubeadm_alpha_certs_renew.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_all.md b/docs/admin/kubeadm_alpha_certs_renew_all.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_all.md rename to docs/admin/kubeadm_alpha_certs_renew_all.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md b/docs/admin/kubeadm_alpha_certs_renew_apiserver-etcd-client.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-etcd-client.md rename to docs/admin/kubeadm_alpha_certs_renew_apiserver-etcd-client.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md b/docs/admin/kubeadm_alpha_certs_renew_apiserver-kubelet-client.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_apiserver-kubelet-client.md rename to docs/admin/kubeadm_alpha_certs_renew_apiserver-kubelet-client.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_apiserver.md b/docs/admin/kubeadm_alpha_certs_renew_apiserver.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_apiserver.md rename to docs/admin/kubeadm_alpha_certs_renew_apiserver.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md b/docs/admin/kubeadm_alpha_certs_renew_etcd-healthcheck-client.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_etcd-healthcheck-client.md rename to docs/admin/kubeadm_alpha_certs_renew_etcd-healthcheck-client.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_etcd-peer.md b/docs/admin/kubeadm_alpha_certs_renew_etcd-peer.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_etcd-peer.md rename to docs/admin/kubeadm_alpha_certs_renew_etcd-peer.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_etcd-server.md b/docs/admin/kubeadm_alpha_certs_renew_etcd-server.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_etcd-server.md rename to docs/admin/kubeadm_alpha_certs_renew_etcd-server.md diff --git a/docs/admin/kubeadm_alpha_phase_certs_renew_front-proxy-client.md b/docs/admin/kubeadm_alpha_certs_renew_front-proxy-client.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_certs_renew_front-proxy-client.md rename to docs/admin/kubeadm_alpha_certs_renew_front-proxy-client.md diff --git a/docs/admin/kubeadm_alpha_phase_kubeconfig.md b/docs/admin/kubeadm_alpha_kubeconfig.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubeconfig.md rename to docs/admin/kubeadm_alpha_kubeconfig.md diff --git a/docs/admin/kubeadm_alpha_phase_kubeconfig_user.md b/docs/admin/kubeadm_alpha_kubeconfig_user.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubeconfig_user.md rename to docs/admin/kubeadm_alpha_kubeconfig_user.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet.md b/docs/admin/kubeadm_alpha_kubelet.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet.md rename to docs/admin/kubeadm_alpha_kubelet.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet_config.md b/docs/admin/kubeadm_alpha_kubelet_config.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet_config.md rename to docs/admin/kubeadm_alpha_kubelet_config.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet_config_annotate-cri.md b/docs/admin/kubeadm_alpha_kubelet_config_download.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet_config_annotate-cri.md rename to docs/admin/kubeadm_alpha_kubelet_config_download.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet_config_download.md b/docs/admin/kubeadm_alpha_kubelet_config_enable-dynamic.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet_config_download.md rename to docs/admin/kubeadm_alpha_kubelet_config_enable-dynamic.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md b/docs/admin/kubeadm_alpha_preflight.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet_config_enable-dynamic.md rename to docs/admin/kubeadm_alpha_preflight.md diff --git a/docs/admin/kubeadm_alpha_phase_kubelet_config_upload.md b/docs/admin/kubeadm_alpha_preflight_node.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_kubelet_config_upload.md rename to docs/admin/kubeadm_alpha_preflight_node.md diff --git a/docs/admin/kubeadm_alpha_phase_preflight.md b/docs/man/man1/kubeadm-alpha-certs-renew-all.1 similarity index 100% rename from docs/admin/kubeadm_alpha_phase_preflight.md rename to docs/man/man1/kubeadm-alpha-certs-renew-all.1 diff --git a/docs/admin/kubeadm_alpha_phase_preflight_node.md b/docs/man/man1/kubeadm-alpha-certs-renew-apiserver-etcd-client.1 similarity index 100% rename from docs/admin/kubeadm_alpha_phase_preflight_node.md rename to docs/man/man1/kubeadm-alpha-certs-renew-apiserver-etcd-client.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-all.1 b/docs/man/man1/kubeadm-alpha-certs-renew-apiserver-kubelet-client.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-all.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-apiserver-kubelet-client.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-etcd-client.1 b/docs/man/man1/kubeadm-alpha-certs-renew-apiserver.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-etcd-client.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-apiserver.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-kubelet-client.1 b/docs/man/man1/kubeadm-alpha-certs-renew-etcd-healthcheck-client.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver-kubelet-client.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-etcd-healthcheck-client.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver.1 b/docs/man/man1/kubeadm-alpha-certs-renew-etcd-peer.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-apiserver.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-etcd-peer.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-healthcheck-client.1 b/docs/man/man1/kubeadm-alpha-certs-renew-etcd-server.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-healthcheck-client.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-etcd-server.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-peer.1 b/docs/man/man1/kubeadm-alpha-certs-renew-front-proxy-client.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-peer.1 rename to docs/man/man1/kubeadm-alpha-certs-renew-front-proxy-client.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-server.1 b/docs/man/man1/kubeadm-alpha-certs-renew.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-etcd-server.1 rename to docs/man/man1/kubeadm-alpha-certs-renew.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew-front-proxy-client.1 b/docs/man/man1/kubeadm-alpha-certs.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew-front-proxy-client.1 rename to docs/man/man1/kubeadm-alpha-certs.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs-renew.1 b/docs/man/man1/kubeadm-alpha-kubeconfig-user.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs-renew.1 rename to docs/man/man1/kubeadm-alpha-kubeconfig-user.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-certs.1 b/docs/man/man1/kubeadm-alpha-kubeconfig.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-certs.1 rename to docs/man/man1/kubeadm-alpha-kubeconfig.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubeconfig-user.1 b/docs/man/man1/kubeadm-alpha-kubelet-config-download.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubeconfig-user.1 rename to docs/man/man1/kubeadm-alpha-kubelet-config-download.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubeconfig.1 b/docs/man/man1/kubeadm-alpha-kubelet-config-enable-dynamic.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubeconfig.1 rename to docs/man/man1/kubeadm-alpha-kubelet-config-enable-dynamic.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet-config-annotate-cri.1 b/docs/man/man1/kubeadm-alpha-kubelet-config.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubelet-config-annotate-cri.1 rename to docs/man/man1/kubeadm-alpha-kubelet-config.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet-config-download.1 b/docs/man/man1/kubeadm-alpha-kubelet.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubelet-config-download.1 rename to docs/man/man1/kubeadm-alpha-kubelet.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet-config.1 b/docs/man/man1/kubeadm-alpha-phase-kubelet-config.1 deleted file mode 100644 index b6fd7a0f98..0000000000 --- a/docs/man/man1/kubeadm-alpha-phase-kubelet-config.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet.1 b/docs/man/man1/kubeadm-alpha-phase-kubelet.1 deleted file mode 100644 index b6fd7a0f98..0000000000 --- a/docs/man/man1/kubeadm-alpha-phase-kubelet.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-preflight-node.1 b/docs/man/man1/kubeadm-alpha-phase-preflight-node.1 deleted file mode 100644 index b6fd7a0f98..0000000000 --- a/docs/man/man1/kubeadm-alpha-phase-preflight-node.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-preflight.1 b/docs/man/man1/kubeadm-alpha-phase-preflight.1 deleted file mode 100644 index b6fd7a0f98..0000000000 --- a/docs/man/man1/kubeadm-alpha-phase-preflight.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet-config-enable-dynamic.1 b/docs/man/man1/kubeadm-alpha-preflight-node.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubelet-config-enable-dynamic.1 rename to docs/man/man1/kubeadm-alpha-preflight-node.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-kubelet-config-upload.1 b/docs/man/man1/kubeadm-alpha-preflight.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-kubelet-config-upload.1 rename to docs/man/man1/kubeadm-alpha-preflight.1