kubeadm: add 'kubeadm config print reset-defaults' command for ResetConfiguration

This commit is contained in:
SataQiu 2023-07-15 11:14:28 +08:00
parent 13172cba5c
commit 22f0f2e210
2 changed files with 57 additions and 13 deletions

View File

@ -36,7 +36,8 @@ import (
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" kubeadmapiv1old "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3"
kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta4"
outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme" outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme"
outputapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha2" outputapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha2"
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
@ -93,6 +94,7 @@ func newCmdConfigPrint(out io.Writer) *cobra.Command {
} }
cmd.AddCommand(newCmdConfigPrintInitDefaults(out)) cmd.AddCommand(newCmdConfigPrintInitDefaults(out))
cmd.AddCommand(newCmdConfigPrintJoinDefaults(out)) cmd.AddCommand(newCmdConfigPrintJoinDefaults(out))
cmd.AddCommand(newCmdConfigPrintResetDefaults(out))
return cmd return cmd
} }
@ -106,6 +108,11 @@ func newCmdConfigPrintJoinDefaults(out io.Writer) *cobra.Command {
return newCmdConfigPrintActionDefaults(out, "join", getDefaultNodeConfigBytes) return newCmdConfigPrintActionDefaults(out, "join", getDefaultNodeConfigBytes)
} }
// newCmdConfigPrintResetDefaults returns cobra.Command for "kubeadm config print reset-defaults" command
func newCmdConfigPrintResetDefaults(out io.Writer) *cobra.Command {
return newCmdConfigPrintActionDefaults(out, "reset", getDefaultResetConfigBytes)
}
func newCmdConfigPrintActionDefaults(out io.Writer, action string, configBytesProc func() ([]byte, error)) *cobra.Command { func newCmdConfigPrintActionDefaults(out io.Writer, action string, configBytesProc func() ([]byte, error)) *cobra.Command {
kinds := []string{} kinds := []string{}
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -199,19 +206,19 @@ func getDefaultInitConfigBytes() ([]byte, error) {
return []byte{}, err return []byte{}, err
} }
return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1.SchemeGroupVersion) return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1old.SchemeGroupVersion)
} }
func getDefaultNodeConfigBytes() ([]byte, error) { func getDefaultNodeConfigBytes() ([]byte, error) {
internalcfg, err := configutil.DefaultedJoinConfiguration(&kubeadmapiv1.JoinConfiguration{ internalcfg, err := configutil.DefaultedJoinConfiguration(&kubeadmapiv1old.JoinConfiguration{
Discovery: kubeadmapiv1.Discovery{ Discovery: kubeadmapiv1old.Discovery{
BootstrapToken: &kubeadmapiv1.BootstrapTokenDiscovery{ BootstrapToken: &kubeadmapiv1old.BootstrapTokenDiscovery{
Token: configutil.PlaceholderToken.Token.String(), Token: configutil.PlaceholderToken.Token.String(),
APIServerEndpoint: "kube-apiserver:6443", APIServerEndpoint: "kube-apiserver:6443",
UnsafeSkipCAVerification: true, // TODO: UnsafeSkipCAVerification: true needs to be set for validation to pass, but shouldn't be recommended as the default UnsafeSkipCAVerification: true, // TODO: UnsafeSkipCAVerification: true needs to be set for validation to pass, but shouldn't be recommended as the default
}, },
}, },
NodeRegistration: kubeadmapiv1.NodeRegistrationOptions{ NodeRegistration: kubeadmapiv1old.NodeRegistrationOptions{
CRISocket: constants.DefaultCRISocket, // avoid CRI detection CRISocket: constants.DefaultCRISocket, // avoid CRI detection
}, },
}) })
@ -219,6 +226,17 @@ func getDefaultNodeConfigBytes() ([]byte, error) {
return []byte{}, err return []byte{}, err
} }
return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1old.SchemeGroupVersion)
}
func getDefaultResetConfigBytes() ([]byte, error) {
internalcfg, err := configutil.DefaultedResetConfiguration(&kubeadmapiv1.ResetConfiguration{
CRISocket: constants.DefaultCRISocket, // avoid CRI detection
})
if err != nil {
return []byte{}, err
}
return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1.SchemeGroupVersion) return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1.SchemeGroupVersion)
} }
@ -243,7 +261,7 @@ func newCmdConfigMigrate(out io.Writer) *cobra.Command {
In other words, the output of this command is what kubeadm actually would read internally if you In other words, the output of this command is what kubeadm actually would read internally if you
submitted this file to "kubeadm init" submitted this file to "kubeadm init"
`), kubeadmapiv1.SchemeGroupVersion, kubeadmapiv1.SchemeGroupVersion), `), kubeadmapiv1old.SchemeGroupVersion, kubeadmapiv1old.SchemeGroupVersion),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(oldCfgPath) == 0 { if len(oldCfgPath) == 0 {
return errors.New("the --old-config flag is mandatory") return errors.New("the --old-config flag is mandatory")
@ -293,7 +311,7 @@ func newCmdConfigValidate(out io.Writer) *cobra.Command {
In this version of kubeadm, the following API versions are supported: In this version of kubeadm, the following API versions are supported:
- %s - %s
`), kubeadmapiv1.SchemeGroupVersion), `), kubeadmapiv1old.SchemeGroupVersion),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(cfgPath) == 0 { if len(cfgPath) == 0 {
return errors.Errorf("the --%s flag is mandatory", options.CfgPath) return errors.Errorf("the --%s flag is mandatory", options.CfgPath)
@ -332,9 +350,9 @@ func newCmdConfigImages(out io.Writer) *cobra.Command {
// newCmdConfigImagesPull returns the `kubeadm config images pull` command // newCmdConfigImagesPull returns the `kubeadm config images pull` command
func newCmdConfigImagesPull() *cobra.Command { func newCmdConfigImagesPull() *cobra.Command {
externalClusterCfg := &kubeadmapiv1.ClusterConfiguration{} externalClusterCfg := &kubeadmapiv1old.ClusterConfiguration{}
kubeadmscheme.Scheme.Default(externalClusterCfg) kubeadmscheme.Scheme.Default(externalClusterCfg)
externalInitCfg := &kubeadmapiv1.InitConfiguration{} externalInitCfg := &kubeadmapiv1old.InitConfiguration{}
kubeadmscheme.Scheme.Default(externalInitCfg) kubeadmscheme.Scheme.Default(externalInitCfg)
var cfgPath, featureGatesString string var cfgPath, featureGatesString string
var err error var err error
@ -379,7 +397,7 @@ func PullControlPlaneImages(runtime utilruntime.ContainerRuntime, cfg *kubeadmap
// newCmdConfigImagesList returns the "kubeadm config images list" command // newCmdConfigImagesList returns the "kubeadm config images list" command
func newCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command { func newCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command {
externalcfg := &kubeadmapiv1.ClusterConfiguration{} externalcfg := &kubeadmapiv1old.ClusterConfiguration{}
kubeadmscheme.Scheme.Default(externalcfg) kubeadmscheme.Scheme.Default(externalcfg)
var cfgPath, featureGatesString string var cfgPath, featureGatesString string
var err error var err error
@ -421,7 +439,7 @@ func newCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Comman
} }
// NewImagesList returns the underlying struct for the "kubeadm config images list" command // NewImagesList returns the underlying struct for the "kubeadm config images list" command
func NewImagesList(cfgPath string, cfg *kubeadmapiv1.ClusterConfiguration) (*ImagesList, error) { func NewImagesList(cfgPath string, cfg *kubeadmapiv1old.ClusterConfiguration) (*ImagesList, error) {
initcfg, err := configutil.LoadOrDefaultInitConfiguration(cfgPath, cmdutil.DefaultInitConfiguration(), cfg) initcfg, err := configutil.LoadOrDefaultInitConfiguration(cfgPath, cmdutil.DefaultInitConfiguration(), cfg)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "could not convert cfg to an internal cfg") return nil, errors.Wrap(err, "could not convert cfg to an internal cfg")
@ -476,7 +494,7 @@ func (i *ImagesList) Run(out io.Writer, printer output.Printer) error {
} }
// AddImagesCommonConfigFlags adds the flags that configure kubeadm (and affect the images kubeadm will use) // AddImagesCommonConfigFlags adds the flags that configure kubeadm (and affect the images kubeadm will use)
func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1.ClusterConfiguration, cfgPath *string, featureGatesString *string) { func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1old.ClusterConfiguration, cfgPath *string, featureGatesString *string) {
options.AddKubernetesVersionFlag(flagSet, &cfg.KubernetesVersion) options.AddKubernetesVersionFlag(flagSet, &cfg.KubernetesVersion)
options.AddFeatureGatesStringFlag(flagSet, featureGatesString) options.AddFeatureGatesStringFlag(flagSet, featureGatesString)
options.AddImageMetaFlags(flagSet, &cfg.ImageRepository) options.AddImageMetaFlags(flagSet, &cfg.ImageRepository)

View File

@ -451,6 +451,32 @@ func TestNewCmdConfigPrintActionDefaults(t *testing.T) {
componentConfigs: "KubeProxyConfiguration,KubeletConfiguration", componentConfigs: "KubeProxyConfiguration,KubeletConfiguration",
cmdProc: newCmdConfigPrintJoinDefaults, cmdProc: newCmdConfigPrintJoinDefaults,
}, },
{
name: "ResetConfiguration: No component configs",
expectedKinds: []string{
constants.ResetConfigurationKind,
},
cmdProc: newCmdConfigPrintResetDefaults,
},
{
name: "JoinConfiguration: KubeProxyConfiguration",
expectedKinds: []string{
"KubeProxyConfiguration",
constants.ResetConfigurationKind,
},
componentConfigs: "KubeProxyConfiguration",
cmdProc: newCmdConfigPrintResetDefaults,
},
{
name: "JoinConfiguration: KubeProxyConfiguration and KubeletConfiguration",
expectedKinds: []string{
"KubeProxyConfiguration",
"KubeletConfiguration",
constants.ResetConfigurationKind,
},
componentConfigs: "KubeProxyConfiguration,KubeletConfiguration",
cmdProc: newCmdConfigPrintResetDefaults,
},
} }
for _, test := range tests { for _, test := range tests {