diff --git a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go index fbf0090c265..dcf554fbabb 100644 --- a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go +++ b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go @@ -24,6 +24,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeletconfigv1alpha1 "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/v1alpha1" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) // Funcs returns the fuzzer functions for the kubeadm apis. @@ -39,20 +41,41 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { obj.Networking.DNSDomain = "foo" obj.AuthorizationModes = []string{"foo"} obj.CertificatesDir = "foo" - obj.APIServerCertSANs = []string{} + obj.APIServerCertSANs = []string{"foo"} obj.Token = "foo" obj.Etcd.Image = "foo" obj.Etcd.DataDir = "foo" obj.ImageRepository = "foo" obj.CIImageRepository = "" obj.UnifiedControlPlaneImage = "foo" - obj.FeatureGates = map[string]bool{} + obj.FeatureGates = map[string]bool{"foo": true} + obj.APIServerExtraArgs = map[string]string{"foo": "foo"} + obj.APIServerExtraVolumes = []kubeadm.HostPathMount{{ + Name: "foo", + HostPath: "foo", + MountPath: "foo", + }} + obj.Etcd.ExtraArgs = map[string]string{"foo": "foo"} obj.Etcd.SelfHosted = &kubeadm.SelfHostedEtcd{ CertificatesDir: "/etc/kubernetes/pki/etcd", ClusterServiceName: "etcd-cluster", EtcdVersion: "v0.1.0", OperatorVersion: "v0.1.0", } + obj.KubeletConfiguration = kubeadm.KubeletConfiguration{ + BaseConfig: &kubeletconfigv1alpha1.KubeletConfiguration{ + PodManifestPath: "foo", + AllowPrivileged: utilpointer.BoolPtr(true), + ClusterDNS: []string{"foo"}, + ClusterDomain: "foo", + Authorization: kubeletconfigv1alpha1.KubeletAuthorization{Mode: "foo"}, + Authentication: kubeletconfigv1alpha1.KubeletAuthentication{ + X509: kubeletconfigv1alpha1.KubeletX509Authentication{ClientCAFile: "foo"}, + }, + CAdvisorPort: utilpointer.Int32Ptr(0), + }, + } + kubeletconfigv1alpha1.SetDefaults_KubeletConfiguration(obj.KubeletConfiguration.BaseConfig) }, func(obj *kubeadm.NodeConfiguration, c fuzz.Continue) { c.FuzzNoCustom(obj) diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index 219c4e742f5..b02c4f55dd6 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -28,13 +28,14 @@ import ( type MasterConfiguration struct { metav1.TypeMeta - API API - Etcd Etcd - Networking Networking - KubernetesVersion string - CloudProvider string - NodeName string - AuthorizationModes []string + API API + Etcd Etcd + KubeletConfiguration KubeletConfiguration + Networking Networking + KubernetesVersion string + CloudProvider string + NodeName string + AuthorizationModes []string Token string TokenTTL *metav1.Duration diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go index 7227562a419..19887296b4b 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go @@ -104,6 +104,7 @@ func SetDefaults_MasterConfiguration(obj *MasterConfiguration) { } SetDefaultsEtcdSelfHosted(obj) + SetDefaults_KubeletConfiguration(obj) } // SetDefaults_NodeConfiguration assigns default values to a regular node @@ -150,26 +151,29 @@ func SetDefaultsEtcdSelfHosted(obj *MasterConfiguration) { } // SetDefaults_KubeletConfiguration assigns default values to kubelet -func SetDefaults_KubeletConfiguration(obj *KubeletConfiguration) { - if obj.BaseConfig.PodManifestPath == "" { - obj.BaseConfig.PodManifestPath = DefaultManifestsDir +func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) { + if obj.KubeletConfiguration.BaseConfig == nil { + obj.KubeletConfiguration.BaseConfig = &kubeletconfigv1alpha1.KubeletConfiguration{} } - if obj.BaseConfig.AllowPrivileged == nil { - obj.BaseConfig.AllowPrivileged = utilpointer.BoolPtr(true) + if obj.KubeletConfiguration.BaseConfig.PodManifestPath == "" { + obj.KubeletConfiguration.BaseConfig.PodManifestPath = DefaultManifestsDir } - if obj.BaseConfig.ClusterDNS == nil { - obj.BaseConfig.ClusterDNS = []string{DefaultClusterDNSIP} + if obj.KubeletConfiguration.BaseConfig.AllowPrivileged == nil { + obj.KubeletConfiguration.BaseConfig.AllowPrivileged = utilpointer.BoolPtr(true) } - if obj.BaseConfig.ClusterDomain == "" { - obj.BaseConfig.ClusterDomain = DefaultServiceDNSDomain + if obj.KubeletConfiguration.BaseConfig.ClusterDNS == nil { + obj.KubeletConfiguration.BaseConfig.ClusterDNS = []string{DefaultClusterDNSIP} } - if obj.BaseConfig.Authorization.Mode == "" { - obj.BaseConfig.Authorization.Mode = kubeletconfigv1alpha1.KubeletAuthorizationModeWebhook + if obj.KubeletConfiguration.BaseConfig.ClusterDomain == "" { + obj.KubeletConfiguration.BaseConfig.ClusterDomain = DefaultServiceDNSDomain } - if obj.BaseConfig.Authentication.X509.ClientCAFile == "" { - obj.BaseConfig.Authentication.X509.ClientCAFile = DefaultCACertPath + if obj.KubeletConfiguration.BaseConfig.Authorization.Mode == "" { + obj.KubeletConfiguration.BaseConfig.Authorization.Mode = kubeletconfigv1alpha1.KubeletAuthorizationModeWebhook } - if obj.BaseConfig.CAdvisorPort == nil { - obj.BaseConfig.CAdvisorPort = utilpointer.Int32Ptr(0) + if obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile == "" { + obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile = DefaultCACertPath + } + if obj.KubeletConfiguration.BaseConfig.CAdvisorPort == nil { + obj.KubeletConfiguration.BaseConfig.CAdvisorPort = utilpointer.Int32Ptr(0) } } diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go index 8bfd5a6349d..06ea582386d 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go @@ -28,13 +28,14 @@ import ( type MasterConfiguration struct { metav1.TypeMeta `json:",inline"` - API API `json:"api"` - Etcd Etcd `json:"etcd"` - Networking Networking `json:"networking"` - KubernetesVersion string `json:"kubernetesVersion"` - CloudProvider string `json:"cloudProvider"` - NodeName string `json:"nodeName"` - AuthorizationModes []string `json:"authorizationModes,omitempty"` + API API `json:"api"` + Etcd Etcd `json:"etcd"` + KubeletConfiguration KubeletConfiguration `json:"kubeletConfiguration"` + Networking Networking `json:"networking"` + KubernetesVersion string `json:"kubernetesVersion"` + CloudProvider string `json:"cloudProvider"` + NodeName string `json:"nodeName"` + AuthorizationModes []string `json:"authorizationModes,omitempty"` Token string `json:"token"` TokenTTL *metav1.Duration `json:"tokenTTL,omitempty"` diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index a41660ae5be..79b270f9915 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -355,8 +355,7 @@ func (i *Init) Run(out io.Writer) error { if err != nil { return err } - kubeletConfig := &kubeadmapiext.KubeletConfiguration{} - kubeletBytes, err := kubeadmutil.MarshalToYamlForCodecs(kubeletConfig.BaseConfig, kubeletconfigv1alpha1.SchemeGroupVersion, *kubeletCodecs) + kubeletBytes, err := kubeadmutil.MarshalToYamlForCodecs(i.cfg.KubeletConfiguration.BaseConfig, kubeletconfigv1alpha1.SchemeGroupVersion, *kubeletCodecs) if err != nil { return err } diff --git a/cmd/kubeadm/app/cmd/upgrade/common_test.go b/cmd/kubeadm/app/cmd/upgrade/common_test.go index ce00399b2cb..6074c03e2ff 100644 --- a/cmd/kubeadm/app/cmd/upgrade/common_test.go +++ b/cmd/kubeadm/app/cmd/upgrade/common_test.go @@ -51,6 +51,8 @@ func TestPrintConfiguration(t *testing.T) { image: "" keyFile: "" imageRepository: "" + kubeletConfiguration: + baseConfig: null kubernetesVersion: v1.7.1 networking: dnsDomain: "" @@ -82,6 +84,8 @@ func TestPrintConfiguration(t *testing.T) { image: "" keyFile: "" imageRepository: "" + kubeletConfiguration: + baseConfig: null kubernetesVersion: v1.7.1 networking: dnsDomain: "" @@ -123,6 +127,8 @@ func TestPrintConfiguration(t *testing.T) { etcdVersion: v0.1.0 operatorVersion: v0.1.0 imageRepository: "" + kubeletConfiguration: + baseConfig: null kubernetesVersion: v1.7.1 networking: dnsDomain: ""