mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #66074 from rosti/print-default
Automatic merge from submit-queue (batch tested with PRs 66136, 64999, 65425, 66120, 66074). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. kubeadm: Printable default component configs **What this PR does / why we need it**: This PR makes default component configs printable via `kubeadm config print-default`. Component configs are not printed by default. You have to explicitly request that for concrete API objects via the `--api-objects` command line parameter. For a list of possible API objects use the help option. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Refs kubernetes/kubeadm#963 **Special notes for your reviewer**: /cc @kubernetes/sig-cluster-lifecycle-pr-reviews /area kubeadm /assign @luxas /assign @timothysc /kind feature **Release note**: ```release-note kubeadm: Default component configs are printable via kubeadm config print-default ```
This commit is contained in:
commit
64eb015471
@ -29,6 +29,7 @@ go_library(
|
|||||||
"//cmd/kubeadm/app/cmd/phases:go_default_library",
|
"//cmd/kubeadm/app/cmd/phases:go_default_library",
|
||||||
"//cmd/kubeadm/app/cmd/upgrade:go_default_library",
|
"//cmd/kubeadm/app/cmd/upgrade:go_default_library",
|
||||||
"//cmd/kubeadm/app/cmd/util:go_default_library",
|
"//cmd/kubeadm/app/cmd/util:go_default_library",
|
||||||
|
"//cmd/kubeadm/app/componentconfigs:go_default_library",
|
||||||
"//cmd/kubeadm/app/constants:go_default_library",
|
"//cmd/kubeadm/app/constants:go_default_library",
|
||||||
"//cmd/kubeadm/app/discovery:go_default_library",
|
"//cmd/kubeadm/app/discovery:go_default_library",
|
||||||
"//cmd/kubeadm/app/features:go_default_library",
|
"//cmd/kubeadm/app/features:go_default_library",
|
||||||
@ -57,7 +58,6 @@ go_library(
|
|||||||
"//pkg/version:go_default_library",
|
"//pkg/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/fields:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/duration:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/duration:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
|
@ -29,13 +29,13 @@ import (
|
|||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
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"
|
||||||
kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2"
|
kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/images"
|
"k8s.io/kubernetes/cmd/kubeadm/app/images"
|
||||||
@ -47,8 +47,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
defaultAPIObjects = []string{constants.InitConfigurationKind, constants.NodeConfigurationKind}
|
|
||||||
availableAPIObjects = []string{constants.InitConfigurationKind, constants.MasterConfigurationKind, constants.NodeConfigurationKind}
|
|
||||||
// sillyToken is only set statically to make kubeadm not randomize the token on every run
|
// sillyToken is only set statically to make kubeadm not randomize the token on every run
|
||||||
sillyToken = kubeadmapiv1alpha3.BootstrapToken{
|
sillyToken = kubeadmapiv1alpha3.BootstrapToken{
|
||||||
Token: &kubeadmapiv1alpha3.BootstrapTokenString{
|
Token: &kubeadmapiv1alpha3.BootstrapTokenString{
|
||||||
@ -90,7 +88,6 @@ func NewCmdConfig(out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewCmdConfigPrintDefault returns cobra.Command for "kubeadm config print-default" command
|
// NewCmdConfigPrintDefault returns cobra.Command for "kubeadm config print-default" command
|
||||||
// TODO: Make it possible to print the defaults for the componentconfig API objects, and default to printing them out as well
|
|
||||||
func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command {
|
func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command {
|
||||||
apiObjects := []string{}
|
apiObjects := []string{}
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -106,7 +103,7 @@ func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command {
|
|||||||
`), sillyToken),
|
`), sillyToken),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
if len(apiObjects) == 0 {
|
if len(apiObjects) == 0 {
|
||||||
apiObjects = defaultAPIObjects
|
apiObjects = getSupportedAPIObjects()
|
||||||
}
|
}
|
||||||
allBytes := [][]byte{}
|
allBytes := [][]byte{}
|
||||||
for _, apiObject := range apiObjects {
|
for _, apiObject := range apiObjects {
|
||||||
@ -118,36 +115,89 @@ func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
cmd.Flags().StringSliceVar(&apiObjects, "api-objects", apiObjects,
|
cmd.Flags().StringSliceVar(&apiObjects, "api-objects", apiObjects,
|
||||||
fmt.Sprintf("A comma-separated list for API objects to print the default values for. Available values: %v. This flag unset means 'print all known objects'", availableAPIObjects))
|
fmt.Sprintf("A comma-separated list for API objects to print the default values for. Available values: %v. This flag unset means 'print all known objects'", getAllAPIObjectNames()))
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDefaultAPIObjectBytes(apiObject string) ([]byte, error) {
|
func getDefaultAPIObjectBytes(apiObject string) ([]byte, error) {
|
||||||
var internalcfg runtime.Object
|
|
||||||
var err error
|
|
||||||
switch apiObject {
|
switch apiObject {
|
||||||
case constants.InitConfigurationKind, constants.MasterConfigurationKind:
|
case constants.InitConfigurationKind, constants.MasterConfigurationKind:
|
||||||
internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.InitConfiguration{
|
return getDefaultInitConfigBytes()
|
||||||
API: kubeadmapiv1alpha3.API{AdvertiseAddress: "1.2.3.4"},
|
|
||||||
BootstrapTokens: []kubeadmapiv1alpha3.BootstrapToken{sillyToken},
|
|
||||||
KubernetesVersion: fmt.Sprintf("v1.%d.0", constants.MinimumControlPlaneVersion.Minor()+1),
|
|
||||||
})
|
|
||||||
case constants.NodeConfigurationKind:
|
case constants.NodeConfigurationKind:
|
||||||
internalcfg, err = configutil.NodeConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.NodeConfiguration{
|
return getDefaultNodeConfigBytes()
|
||||||
Token: sillyToken.Token.String(),
|
|
||||||
DiscoveryTokenAPIServers: []string{"kube-apiserver:6443"},
|
|
||||||
DiscoveryTokenUnsafeSkipCAVerification: true,
|
|
||||||
})
|
|
||||||
// TODO: DiscoveryTokenUnsafeSkipCAVerification: true needs to be set for validation to pass, but shouldn't be recommended as the default
|
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("--api-object needs to be one of %v", availableAPIObjects)
|
// Is this a component config?
|
||||||
|
registration, ok := componentconfigs.Known[componentconfigs.RegistrationKind(apiObject)]
|
||||||
|
if !ok {
|
||||||
|
return []byte{}, fmt.Errorf("--api-object needs to be one of %v", getAllAPIObjectNames())
|
||||||
|
}
|
||||||
|
return getDefaultComponentConfigBytes(registration)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// getSupportedAPIObjects returns all currently supported API object names
|
||||||
|
func getSupportedAPIObjects() []string {
|
||||||
|
objects := []string{constants.InitConfigurationKind, constants.NodeConfigurationKind}
|
||||||
|
for componentType := range componentconfigs.Known {
|
||||||
|
objects = append(objects, string(componentType))
|
||||||
|
}
|
||||||
|
return objects
|
||||||
|
}
|
||||||
|
|
||||||
|
// getAllAPIObjectNames returns currently supported API object names and their historical aliases
|
||||||
|
func getAllAPIObjectNames() []string {
|
||||||
|
historicAPIObjectAliases := []string{constants.MasterConfigurationKind}
|
||||||
|
objects := getSupportedAPIObjects()
|
||||||
|
objects = append(objects, historicAPIObjectAliases...)
|
||||||
|
return objects
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDefaultedInitConfig() (*kubeadmapi.InitConfiguration, error) {
|
||||||
|
return configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.InitConfiguration{
|
||||||
|
API: kubeadmapiv1alpha3.API{AdvertiseAddress: "1.2.3.4"},
|
||||||
|
BootstrapTokens: []kubeadmapiv1alpha3.BootstrapToken{sillyToken},
|
||||||
|
KubernetesVersion: fmt.Sprintf("v1.%d.0", constants.MinimumControlPlaneVersion.Minor()+1),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDefaultInitConfigBytes() ([]byte, error) {
|
||||||
|
internalcfg, err := getDefaultedInitConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return configutil.MarshalKubeadmConfigObject(internalcfg)
|
return configutil.MarshalKubeadmConfigObject(internalcfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getDefaultNodeConfigBytes() ([]byte, error) {
|
||||||
|
internalcfg, err := configutil.NodeConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.NodeConfiguration{
|
||||||
|
Token: sillyToken.Token.String(),
|
||||||
|
DiscoveryTokenAPIServers: []string{"kube-apiserver:6443"},
|
||||||
|
DiscoveryTokenUnsafeSkipCAVerification: true, // TODO: DiscoveryTokenUnsafeSkipCAVerification: true needs to be set for validation to pass, but shouldn't be recommended as the default
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return configutil.MarshalKubeadmConfigObject(internalcfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDefaultComponentConfigBytes(registration componentconfigs.Registration) ([]byte, error) {
|
||||||
|
defaultedInitConfig, err := getDefaultedInitConfig()
|
||||||
|
if err != nil {
|
||||||
|
return []byte{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
realobj, ok := registration.GetFromInternalConfig(defaultedInitConfig)
|
||||||
|
if !ok {
|
||||||
|
return []byte{}, fmt.Errorf("GetFromInternalConfig failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
return registration.Marshal(realobj)
|
||||||
|
}
|
||||||
|
|
||||||
// NewCmdConfigMigrate returns cobra.Command for "kubeadm config migrate" command
|
// NewCmdConfigMigrate returns cobra.Command for "kubeadm config migrate" command
|
||||||
func NewCmdConfigMigrate(out io.Writer) *cobra.Command {
|
func NewCmdConfigMigrate(out io.Writer) *cobra.Command {
|
||||||
var oldCfgPath, newCfgPath string
|
var oldCfgPath, newCfgPath string
|
||||||
|
Loading…
Reference in New Issue
Block a user