mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
kubeadm: add mandatory configuration to "phase preflight"
Add the: - mandatory flag "--config" to the preflight phase and parse the specified config file for either "master" or "node". - flag "--ignore-preflight-errors" to the preflight phase to allow skipping errors. - the function AddIgnorePreflightErrorsFlag() to "options/generic.go", because the flag is used in multiple commands.
This commit is contained in:
parent
8d1127cb41
commit
57fc804ba5
@ -27,3 +27,11 @@ func AddKubeConfigFlag(fs *pflag.FlagSet, kubeConfigFile *string) {
|
|||||||
func AddConfigFlag(fs *pflag.FlagSet, cfgPath *string) {
|
func AddConfigFlag(fs *pflag.FlagSet, cfgPath *string) {
|
||||||
fs.StringVar(cfgPath, "config", *cfgPath, "Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)")
|
fs.StringVar(cfgPath, "config", *cfgPath, "Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddIgnorePreflightErrorsFlag adds the --ignore-preflight-errors flag to the given flagset
|
||||||
|
func AddIgnorePreflightErrorsFlag(fs *pflag.FlagSet, ignorePreflightErrors *[]string) {
|
||||||
|
fs.StringSliceVar(
|
||||||
|
ignorePreflightErrors, "ignore-preflight-errors", *ignorePreflightErrors,
|
||||||
|
"A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@ -49,7 +49,6 @@ go_library(
|
|||||||
"//pkg/util/normalizer:go_default_library",
|
"//pkg/util/normalizer:go_default_library",
|
||||||
"//pkg/util/version:go_default_library",
|
"//pkg/util/version:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1: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/apiserver/pkg/util/flag:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/bootstrap/token/api:go_default_library",
|
"//staging/src/k8s.io/client-go/tools/bootstrap/token/api:go_default_library",
|
||||||
|
@ -17,13 +17,19 @@ limitations under the License.
|
|||||||
package phases
|
package phases
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
||||||
|
"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"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
|
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
|
||||||
"k8s.io/kubernetes/pkg/util/normalizer"
|
"k8s.io/kubernetes/pkg/util/normalizer"
|
||||||
utilsexec "k8s.io/utils/exec"
|
utilsexec "k8s.io/utils/exec"
|
||||||
)
|
)
|
||||||
@ -46,32 +52,59 @@ var (
|
|||||||
# Run node pre-flight checks.
|
# Run node pre-flight checks.
|
||||||
kubeadm alpha phase preflight node
|
kubeadm alpha phase preflight node
|
||||||
`)
|
`)
|
||||||
|
|
||||||
|
errorMissingConfigFlag = errors.New("the --config flag is mandatory")
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdPreFlight calls cobra.Command for preflight checks
|
// NewCmdPreFlight calls cobra.Command for preflight checks
|
||||||
func NewCmdPreFlight() *cobra.Command {
|
func NewCmdPreFlight() *cobra.Command {
|
||||||
|
var cfgPath string
|
||||||
|
var ignorePreflightErrors []string
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "preflight",
|
Use: "preflight",
|
||||||
Short: "Run pre-flight checks",
|
Short: "Run pre-flight checks",
|
||||||
Long: cmdutil.MacroCommandLongDescription,
|
Long: cmdutil.MacroCommandLongDescription,
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.AddCommand(NewCmdPreFlightMaster())
|
options.AddConfigFlag(cmd.PersistentFlags(), &cfgPath)
|
||||||
cmd.AddCommand(NewCmdPreFlightNode())
|
options.AddIgnorePreflightErrorsFlag(cmd.PersistentFlags(), &ignorePreflightErrors)
|
||||||
|
|
||||||
|
cmd.AddCommand(NewCmdPreFlightMaster(&cfgPath, &ignorePreflightErrors))
|
||||||
|
cmd.AddCommand(NewCmdPreFlightNode(&cfgPath, &ignorePreflightErrors))
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCmdPreFlightMaster calls cobra.Command for master preflight checks
|
// NewCmdPreFlightMaster calls cobra.Command for master preflight checks
|
||||||
func NewCmdPreFlightMaster() *cobra.Command {
|
func NewCmdPreFlightMaster(cfgPath *string, ignorePreflightErrors *[]string) *cobra.Command {
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "master",
|
Use: "master",
|
||||||
Short: "Run master pre-flight checks",
|
Short: "Run master pre-flight checks",
|
||||||
Long: masterPreflightLongDesc,
|
Long: masterPreflightLongDesc,
|
||||||
Example: masterPreflightExample,
|
Example: masterPreflightExample,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
cfg := &kubeadmapi.InitConfiguration{}
|
if len(*cfgPath) == 0 {
|
||||||
err := preflight.RunInitMasterChecks(utilsexec.New(), cfg, sets.NewString())
|
kubeadmutil.CheckErr(errorMissingConfigFlag)
|
||||||
|
}
|
||||||
|
ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(*ignorePreflightErrors)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
cfg := &kubeadmapiv1alpha3.InitConfiguration{}
|
||||||
|
kubeadmscheme.Scheme.Default(cfg)
|
||||||
|
|
||||||
|
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg)
|
||||||
|
kubeadmutil.CheckErr(err)
|
||||||
|
err = configutil.VerifyAPIServerBindAddress(internalcfg.APIEndpoint.AdvertiseAddress)
|
||||||
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
fmt.Println("[preflight] running pre-flight checks")
|
||||||
|
|
||||||
|
err = preflight.RunInitMasterChecks(utilsexec.New(), internalcfg, ignorePreflightErrorsSet)
|
||||||
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
fmt.Println("[preflight] pre-flight checks passed")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,16 +112,33 @@ func NewCmdPreFlightMaster() *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewCmdPreFlightNode calls cobra.Command for node preflight checks
|
// NewCmdPreFlightNode calls cobra.Command for node preflight checks
|
||||||
func NewCmdPreFlightNode() *cobra.Command {
|
func NewCmdPreFlightNode(cfgPath *string, ignorePreflightErrors *[]string) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "node",
|
Use: "node",
|
||||||
Short: "Run node pre-flight checks",
|
Short: "Run node pre-flight checks",
|
||||||
Long: nodePreflightLongDesc,
|
Long: nodePreflightLongDesc,
|
||||||
Example: nodePreflightExample,
|
Example: nodePreflightExample,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
cfg := &kubeadmapi.JoinConfiguration{}
|
if len(*cfgPath) == 0 {
|
||||||
err := preflight.RunJoinNodeChecks(utilsexec.New(), cfg, sets.NewString())
|
kubeadmutil.CheckErr(errorMissingConfigFlag)
|
||||||
|
}
|
||||||
|
ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(*ignorePreflightErrors)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
cfg := &kubeadmapiv1alpha3.JoinConfiguration{}
|
||||||
|
kubeadmscheme.Scheme.Default(cfg)
|
||||||
|
|
||||||
|
internalcfg, err := configutil.NodeConfigFileAndDefaultsToInternalConfig(*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")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
@ -60,10 +61,7 @@ func NewCmdReset(in io.Reader, out io.Writer) *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.PersistentFlags().StringSliceVar(
|
options.AddIgnorePreflightErrorsFlag(cmd.PersistentFlags(), &ignorePreflightErrors)
|
||||||
&ignorePreflightErrors, "ignore-preflight-errors", ignorePreflightErrors,
|
|
||||||
"A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.",
|
|
||||||
)
|
|
||||||
|
|
||||||
cmd.PersistentFlags().StringVar(
|
cmd.PersistentFlags().StringVar(
|
||||||
&certsDir, "cert-dir", kubeadmapiv1alpha3.DefaultCertificatesDir,
|
&certsDir, "cert-dir", kubeadmapiv1alpha3.DefaultCertificatesDir,
|
||||||
|
@ -77,8 +77,8 @@ func addApplyPlanFlags(fs *pflag.FlagSet, flags *applyPlanFlags) {
|
|||||||
fs.BoolVar(&flags.allowExperimentalUpgrades, "allow-experimental-upgrades", flags.allowExperimentalUpgrades, "Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes.")
|
fs.BoolVar(&flags.allowExperimentalUpgrades, "allow-experimental-upgrades", flags.allowExperimentalUpgrades, "Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes.")
|
||||||
fs.BoolVar(&flags.allowRCUpgrades, "allow-release-candidate-upgrades", flags.allowRCUpgrades, "Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes.")
|
fs.BoolVar(&flags.allowRCUpgrades, "allow-release-candidate-upgrades", flags.allowRCUpgrades, "Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes.")
|
||||||
fs.BoolVar(&flags.printConfig, "print-config", flags.printConfig, "Specifies whether the configuration file that will be used in the upgrade should be printed or not.")
|
fs.BoolVar(&flags.printConfig, "print-config", flags.printConfig, "Specifies whether the configuration file that will be used in the upgrade should be printed or not.")
|
||||||
fs.StringSliceVar(&flags.ignorePreflightErrors, "ignore-preflight-errors", flags.ignorePreflightErrors, "A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.")
|
|
||||||
fs.MarkDeprecated("skip-preflight-checks", "it is now equivalent to --ignore-preflight-errors=all")
|
fs.MarkDeprecated("skip-preflight-checks", "it is now equivalent to --ignore-preflight-errors=all")
|
||||||
fs.StringVar(&flags.featureGatesString, "feature-gates", flags.featureGatesString, "A set of key=value pairs that describe feature gates for various features. "+
|
fs.StringVar(&flags.featureGatesString, "feature-gates", flags.featureGatesString, "A set of key=value pairs that describe feature gates for various features. "+
|
||||||
"Options are:\n"+strings.Join(features.KnownFeatures(&features.InitFeatureGates), "\n"))
|
"Options are:\n"+strings.Join(features.KnownFeatures(&features.InitFeatureGates), "\n"))
|
||||||
|
options.AddIgnorePreflightErrorsFlag(fs, &flags.ignorePreflightErrors)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user