diff --git a/docs/api_reference/v1beta1.en.md b/docs/api_reference/v1beta1.en.md index 994ce3940..41eece834 100644 --- a/docs/api_reference/v1beta1.en.md +++ b/docs/api_reference/v1beta1.en.md @@ -1,6 +1,6 @@ +++ title = "v1beta1 API Reference" -date = 2021-12-23T21:13:02+05:00 +date = 2022-01-28T02:22:19+04:00 weight = 11 +++ ## v1beta1 diff --git a/docs/api_reference/v1beta2.en.md b/docs/api_reference/v1beta2.en.md index a829dd0a2..32b734f31 100644 --- a/docs/api_reference/v1beta2.en.md +++ b/docs/api_reference/v1beta2.en.md @@ -1,6 +1,6 @@ +++ title = "v1beta2 API Reference" -date = 2022-01-11T11:06:38+02:00 +date = 2022-01-28T02:22:19+04:00 weight = 11 +++ ## v1beta2 @@ -40,6 +40,7 @@ weight = 11 * [KubeOneCluster](#kubeonecluster) * [KubeProxyConfig](#kubeproxyconfig) * [KubeletConfig](#kubeletconfig) +* [LoggingConfig](#loggingconfig) * [MachineControllerConfig](#machinecontrollerconfig) * [MetricsServer](#metricsserver) * [NoneSpec](#nonespec) @@ -460,6 +461,7 @@ KubeOneCluster is KubeOne Cluster API Schema | addons | Addons are used to deploy additional manifests. | *[Addons](#addons) | false | | systemPackages | SystemPackages configure kubeone behaviour regarding OS packages. | *[SystemPackages](#systempackages) | false | | registryConfiguration | RegistryConfiguration configures how Docker images are pulled from an image registry | *[RegistryConfiguration](#registryconfiguration) | false | +| loggingConfig | LoggingConfig configures the Kubelet's log configuration | [LoggingConfig](#loggingconfig) | false | [Back to Group](#v1beta2) @@ -487,6 +489,16 @@ KubeletConfig provides some kubelet configuration options [Back to Group](#v1beta2) +### LoggingConfig + +LoggingConfig configures the Kubelet's log rotation + +| Field | Description | Scheme | Required | +| ----- | ----------- | ------ | -------- | +| containerLogMaxSize | ContainerLogMaxSize configures the maximum size of container log file before it is rotated See more at: https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/ | string | false | + +[Back to Group](#v1beta2) + ### MachineControllerConfig MachineControllerConfig configures kubermatic machine-controller deployment diff --git a/pkg/apis/kubeone/config/config.go b/pkg/apis/kubeone/config/config.go index 2b106a807..51e0b3d59 100644 --- a/pkg/apis/kubeone/config/config.go +++ b/pkg/apis/kubeone/config/config.go @@ -237,6 +237,16 @@ func SetKubeOneClusterDynamicDefaults(cluster *kubeoneapi.KubeOneCluster, creden } } + // Default ContainerLogMaxSize. + // NB: We intentionally default here because LoggingConfig is not available in + // the v1beta1 API. If we would default in the v1beta2 API instead, this value would + // be empty when converting from v1beta1 to internal. This means that v1beta1 API + // users would depend on default values provided by Docker/upstream, which are + // different than our default values, so we want to avoid this. + if cluster.LoggingConfig.ContainerLogMaxSize == "" { + cluster.LoggingConfig.ContainerLogMaxSize = "100Mi" + } + // Default the AssetsConfiguration internal API cluster.DefaultAssetConfiguration() diff --git a/pkg/apis/kubeone/types.go b/pkg/apis/kubeone/types.go index 2200fd560..585a72b3a 100644 --- a/pkg/apis/kubeone/types.go +++ b/pkg/apis/kubeone/types.go @@ -63,6 +63,15 @@ type KubeOneCluster struct { AssetConfiguration AssetConfiguration `json:"assetConfiguration,omitempty"` // RegistryConfiguration configures how Docker images are pulled from an image registry RegistryConfiguration *RegistryConfiguration `json:"registryConfiguration,omitempty"` + // LoggingConfig configures the Kubelet's log rotation + LoggingConfig LoggingConfig `json:"loggingConfig,omitempty"` +} + +// LoggingConfig configures the Kubelet's log rotation +type LoggingConfig struct { + // ContainerLogMaxSize configures the maximum size of container log file before it is rotated + // See more at: https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/ + ContainerLogMaxSize string `json:"containerLogMaxSize,omitempty"` } // ContainerRuntimeConfig diff --git a/pkg/apis/kubeone/v1beta1/conversion.go b/pkg/apis/kubeone/v1beta1/conversion.go index b37723e90..74a104038 100644 --- a/pkg/apis/kubeone/v1beta1/conversion.go +++ b/pkg/apis/kubeone/v1beta1/conversion.go @@ -69,3 +69,8 @@ func Convert_kubeone_HostConfig_To_v1beta1_HostConfig(in *kubeone.HostConfig, ou // explicitly skip kubelet conversion omitted in autoConvert_kubeone_HostConfig_To_v1beta1_HostConfig return autoConvert_kubeone_HostConfig_To_v1beta1_HostConfig(in, out, scope) } + +func Convert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(in *kubeone.KubeOneCluster, out *KubeOneCluster, s conversion.Scope) error { + // LoggingConfig was introduced only in new v1beta2 API, so we skip it here + return autoConvert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(in, out, s) +} diff --git a/pkg/apis/kubeone/v1beta1/zz_generated.conversion.go b/pkg/apis/kubeone/v1beta1/zz_generated.conversion.go index d73e482c1..f05f6c908 100644 --- a/pkg/apis/kubeone/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/kubeone/v1beta1/zz_generated.conversion.go @@ -303,11 +303,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*kubeone.KubeOneCluster)(nil), (*KubeOneCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(a.(*kubeone.KubeOneCluster), b.(*KubeOneCluster), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*KubeProxyConfig)(nil), (*kubeone.KubeProxyConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_KubeProxyConfig_To_kubeone_KubeProxyConfig(a.(*KubeProxyConfig), b.(*kubeone.KubeProxyConfig), scope) }); err != nil { @@ -538,6 +533,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*kubeone.KubeOneCluster)(nil), (*KubeOneCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(a.(*kubeone.KubeOneCluster), b.(*KubeOneCluster), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*CloudProviderSpec)(nil), (*kubeone.CloudProviderSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_CloudProviderSpec_To_kubeone_CloudProviderSpec(a.(*CloudProviderSpec), b.(*kubeone.CloudProviderSpec), scope) }); err != nil { @@ -1388,14 +1388,10 @@ func autoConvert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(in *kubeone.Ku return err } out.RegistryConfiguration = (*RegistryConfiguration)(unsafe.Pointer(in.RegistryConfiguration)) + // WARNING: in.LoggingConfig requires manual conversion: does not exist in peer-type return nil } -// Convert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster is an autogenerated conversion function. -func Convert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(in *kubeone.KubeOneCluster, out *KubeOneCluster, s conversion.Scope) error { - return autoConvert_kubeone_KubeOneCluster_To_v1beta1_KubeOneCluster(in, out, s) -} - func autoConvert_v1beta1_KubeProxyConfig_To_kubeone_KubeProxyConfig(in *KubeProxyConfig, out *kubeone.KubeProxyConfig, s conversion.Scope) error { out.SkipInstallation = in.SkipInstallation out.IPVS = (*kubeone.IPVSConfig)(unsafe.Pointer(in.IPVS)) diff --git a/pkg/apis/kubeone/v1beta2/types.go b/pkg/apis/kubeone/v1beta2/types.go index 427a69b46..22f7127f6 100644 --- a/pkg/apis/kubeone/v1beta2/types.go +++ b/pkg/apis/kubeone/v1beta2/types.go @@ -61,6 +61,15 @@ type KubeOneCluster struct { SystemPackages *SystemPackages `json:"systemPackages,omitempty"` // RegistryConfiguration configures how Docker images are pulled from an image registry RegistryConfiguration *RegistryConfiguration `json:"registryConfiguration,omitempty"` + // LoggingConfig configures the Kubelet's log configuration + LoggingConfig LoggingConfig `json:"loggingConfig,omitempty"` +} + +// LoggingConfig configures the Kubelet's log rotation +type LoggingConfig struct { + // ContainerLogMaxSize configures the maximum size of container log file before it is rotated + // See more at: https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/ + ContainerLogMaxSize string `json:"containerLogMaxSize,omitempty"` } // ContainerRuntimeConfig diff --git a/pkg/apis/kubeone/v1beta2/zz_generated.conversion.go b/pkg/apis/kubeone/v1beta2/zz_generated.conversion.go index ea6dfd707..5bc2751bd 100644 --- a/pkg/apis/kubeone/v1beta2/zz_generated.conversion.go +++ b/pkg/apis/kubeone/v1beta2/zz_generated.conversion.go @@ -383,6 +383,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*LoggingConfig)(nil), (*kubeone.LoggingConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig(a.(*LoggingConfig), b.(*kubeone.LoggingConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*kubeone.LoggingConfig)(nil), (*LoggingConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig(a.(*kubeone.LoggingConfig), b.(*LoggingConfig), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*MachineControllerConfig)(nil), (*kubeone.MachineControllerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_MachineControllerConfig_To_kubeone_MachineControllerConfig(a.(*MachineControllerConfig), b.(*kubeone.MachineControllerConfig), scope) }); err != nil { @@ -1396,6 +1406,9 @@ func autoConvert_v1beta2_KubeOneCluster_To_kubeone_KubeOneCluster(in *KubeOneClu out.Addons = (*kubeone.Addons)(unsafe.Pointer(in.Addons)) out.SystemPackages = (*kubeone.SystemPackages)(unsafe.Pointer(in.SystemPackages)) out.RegistryConfiguration = (*kubeone.RegistryConfiguration)(unsafe.Pointer(in.RegistryConfiguration)) + if err := Convert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig(&in.LoggingConfig, &out.LoggingConfig, s); err != nil { + return err + } return nil } @@ -1440,6 +1453,9 @@ func autoConvert_kubeone_KubeOneCluster_To_v1beta2_KubeOneCluster(in *kubeone.Ku out.SystemPackages = (*SystemPackages)(unsafe.Pointer(in.SystemPackages)) // WARNING: in.AssetConfiguration requires manual conversion: does not exist in peer-type out.RegistryConfiguration = (*RegistryConfiguration)(unsafe.Pointer(in.RegistryConfiguration)) + if err := Convert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig(&in.LoggingConfig, &out.LoggingConfig, s); err != nil { + return err + } return nil } @@ -1491,6 +1507,26 @@ func Convert_kubeone_KubeletConfig_To_v1beta2_KubeletConfig(in *kubeone.KubeletC return autoConvert_kubeone_KubeletConfig_To_v1beta2_KubeletConfig(in, out, s) } +func autoConvert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig(in *LoggingConfig, out *kubeone.LoggingConfig, s conversion.Scope) error { + out.ContainerLogMaxSize = in.ContainerLogMaxSize + return nil +} + +// Convert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig is an autogenerated conversion function. +func Convert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig(in *LoggingConfig, out *kubeone.LoggingConfig, s conversion.Scope) error { + return autoConvert_v1beta2_LoggingConfig_To_kubeone_LoggingConfig(in, out, s) +} + +func autoConvert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig(in *kubeone.LoggingConfig, out *LoggingConfig, s conversion.Scope) error { + out.ContainerLogMaxSize = in.ContainerLogMaxSize + return nil +} + +// Convert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig is an autogenerated conversion function. +func Convert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig(in *kubeone.LoggingConfig, out *LoggingConfig, s conversion.Scope) error { + return autoConvert_kubeone_LoggingConfig_To_v1beta2_LoggingConfig(in, out, s) +} + func autoConvert_v1beta2_MachineControllerConfig_To_kubeone_MachineControllerConfig(in *MachineControllerConfig, out *kubeone.MachineControllerConfig, s conversion.Scope) error { out.Deploy = in.Deploy return nil diff --git a/pkg/apis/kubeone/v1beta2/zz_generated.deepcopy.go b/pkg/apis/kubeone/v1beta2/zz_generated.deepcopy.go index a20d2e41f..ad71cba3b 100644 --- a/pkg/apis/kubeone/v1beta2/zz_generated.deepcopy.go +++ b/pkg/apis/kubeone/v1beta2/zz_generated.deepcopy.go @@ -792,6 +792,7 @@ func (in *KubeOneCluster) DeepCopyInto(out *KubeOneCluster) { *out = new(RegistryConfiguration) **out = **in } + out.LoggingConfig = in.LoggingConfig return } @@ -876,6 +877,22 @@ func (in *KubeletConfig) DeepCopy() *KubeletConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LoggingConfig) DeepCopyInto(out *LoggingConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoggingConfig. +func (in *LoggingConfig) DeepCopy() *LoggingConfig { + if in == nil { + return nil + } + out := new(LoggingConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MachineControllerConfig) DeepCopyInto(out *MachineControllerConfig) { *out = *in diff --git a/pkg/apis/kubeone/zz_generated.deepcopy.go b/pkg/apis/kubeone/zz_generated.deepcopy.go index baec2cc57..9e95d5d9f 100644 --- a/pkg/apis/kubeone/zz_generated.deepcopy.go +++ b/pkg/apis/kubeone/zz_generated.deepcopy.go @@ -817,6 +817,7 @@ func (in *KubeOneCluster) DeepCopyInto(out *KubeOneCluster) { *out = new(RegistryConfiguration) **out = **in } + out.LoggingConfig = in.LoggingConfig return } @@ -901,6 +902,22 @@ func (in *KubeletConfig) DeepCopy() *KubeletConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LoggingConfig) DeepCopyInto(out *LoggingConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoggingConfig. +func (in *LoggingConfig) DeepCopy() *LoggingConfig { + if in == nil { + return nil + } + out := new(LoggingConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MachineControllerConfig) DeepCopyInto(out *MachineControllerConfig) { *out = *in diff --git a/pkg/cmd/config.go b/pkg/cmd/config.go index 6ebafa264..5458e454c 100644 --- a/pkg/cmd/config.go +++ b/pkg/cmd/config.go @@ -79,6 +79,8 @@ type printOpts struct { EnableEncryptionProviders bool `longflag:"enable-encryption-providers"` DeployMachineController bool `longflag:"deploy-machine-controller"` + + ContainerLogMaxSize string `longflag:"container-log-max-size"` } // configCmd setups the config command @@ -174,6 +176,14 @@ func configPrintCmd() *cobra.Command { // MachineController cmd.Flags().BoolVar(&opts.DeployMachineController, longFlagName(opts, "DeployMachineController"), true, "deploy kubermatic machine-controller") + // LoggingConfig + cmd.Flags().StringVarP( + &opts.ContainerLogMaxSize, + longFlagName(opts, "ContainerLogMaxSize"), + shortFlagName(opts, "ContainerLogMaxSize"), + "100Mi", + "ContainerLogMaxSize") + return cmd } @@ -370,6 +380,8 @@ func createAndPrintManifest(printOptions *printOpts) error { cfg.Set(yamled.Path{"machineController", "deploy"}, printOptions.DeployMachineController) } + cfg.Set(yamled.Path{"loggingConfig", "containerLogMaxSize"}, printOptions.ContainerLogMaxSize) + // Print the manifest err := validateAndPrintConfig(cfg) if err != nil { @@ -972,4 +984,7 @@ machineController: # operatingSystem: 'ubuntu' # operatingSystemSpec: # distUpgradeOnBoot: true + +loggingConfig: + containerLogMaxSize: "{{ .ContainerLogMaxSize }}" ` diff --git a/pkg/containerruntime/docker_config.go b/pkg/containerruntime/docker_config.go index 539f60d22..127995997 100644 --- a/pkg/containerruntime/docker_config.go +++ b/pkg/containerruntime/docker_config.go @@ -18,6 +18,7 @@ package containerruntime import ( "encoding/json" + "strings" "k8c.io/kubeone/pkg/apis/kubeone" ) @@ -32,12 +33,17 @@ type dockerConfig struct { } func marshalDockerConfig(cluster *kubeone.KubeOneCluster) (string, error) { + logSize := strings.ToLower(cluster.LoggingConfig.ContainerLogMaxSize) + logSize = strings.ReplaceAll(logSize, "ki", "k") + logSize = strings.ReplaceAll(logSize, "mi", "m") + logSize = strings.ReplaceAll(logSize, "gi", "g") + cfg := dockerConfig{ ExecOpts: []string{"native.cgroupdriver=systemd"}, StorageDriver: "overlay2", LogDriver: "json-file", LogOpts: map[string]string{ - "max-size": "100m", + "max-size": logSize, }, } diff --git a/pkg/containerruntime/docker_config_test.go b/pkg/containerruntime/docker_config_test.go new file mode 100644 index 000000000..f7cd25199 --- /dev/null +++ b/pkg/containerruntime/docker_config_test.go @@ -0,0 +1,71 @@ +/* +Copyright 2022 The KubeOne 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 containerruntime + +import ( + "encoding/json" + "testing" + + "k8c.io/kubeone/pkg/apis/kubeone" +) + +func Test_marshalDockerConfig(t *testing.T) { + tests := []struct { + name string + cluster *kubeone.KubeOneCluster + want string + }{ + { + name: "Should be convert 100Mi to 100m", + cluster: genCluster(withContainerLogMaxSize("100Mi")), + want: "100m", + }, + { + name: "Should be convert 100Ki to 100k", + cluster: genCluster(withContainerLogMaxSize("100Ki")), + want: "100k", + }, + { + name: "Should be convert 100Gi to 100g", + cluster: genCluster(withContainerLogMaxSize("100Gi")), + want: "100g", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := marshalDockerConfig(tt.cluster) + if err != nil { + t.Errorf("marshalDockerConfig() error = %v,", err) + } + cfg := dockerConfig{} + err = json.Unmarshal([]byte(got), &cfg) + if err != nil { + t.Errorf("marshalDockerConfig() error = %v,", err) + } + gotLogSize := cfg.LogOpts["max-size"] + if gotLogSize != tt.want { + t.Errorf("marshalDockerConfig() got = %v, want %v", got, tt.want) + } + }) + } +} + +func withContainerLogMaxSize(logSize string) clusterOpts { + return func(cls *kubeone.KubeOneCluster) { + cls.LoggingConfig.ContainerLogMaxSize = logSize + } +} diff --git a/pkg/scripts/os_test.go b/pkg/scripts/os_test.go index 93065e36e..277c51dd9 100644 --- a/pkg/scripts/os_test.go +++ b/pkg/scripts/os_test.go @@ -101,6 +101,9 @@ func genCluster(opts ...genClusterOpts) kubeone.KubeOneCluster { HTTPS: "http://https.proxy", NoProxy: ".local", }, + LoggingConfig: kubeone.LoggingConfig{ + ContainerLogMaxSize: "100Mi", + }, } for _, fn := range opts { diff --git a/pkg/templates/kubeadm/v1beta2/kubeadm.go b/pkg/templates/kubeadm/v1beta2/kubeadm.go index e49f9e422..bc6d42378 100644 --- a/pkg/templates/kubeadm/v1beta2/kubeadm.go +++ b/pkg/templates/kubeadm/v1beta2/kubeadm.go @@ -166,11 +166,12 @@ func NewConfig(s *state.State, host kubeoneapi.HostConfig) ([]runtime.Object, er APIVersion: "kubelet.config.k8s.io/v1beta1", Kind: "KubeletConfiguration", }, - CgroupDriver: "systemd", - ReadOnlyPort: 0, - RotateCertificates: true, - ServerTLSBootstrap: true, - ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + CgroupDriver: "systemd", + ReadOnlyPort: 0, + RotateCertificates: true, + ServerTLSBootstrap: true, + ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + ContainerLogMaxSize: cluster.LoggingConfig.ContainerLogMaxSize, Authentication: kubeletconfigv1beta1.KubeletAuthentication{ Anonymous: kubeletconfigv1beta1.KubeletAnonymousAuthentication{ Enabled: &bfalse, @@ -358,11 +359,12 @@ func NewConfigWorker(s *state.State, host kubeoneapi.HostConfig) ([]runtime.Obje APIVersion: "kubelet.config.k8s.io/v1beta1", Kind: "KubeletConfiguration", }, - CgroupDriver: "systemd", - ReadOnlyPort: 0, - RotateCertificates: true, - ServerTLSBootstrap: true, - ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + CgroupDriver: "systemd", + ReadOnlyPort: 0, + RotateCertificates: true, + ServerTLSBootstrap: true, + ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + ContainerLogMaxSize: cluster.LoggingConfig.ContainerLogMaxSize, Authentication: kubeletconfigv1beta1.KubeletAuthentication{ Anonymous: kubeletconfigv1beta1.KubeletAnonymousAuthentication{ Enabled: &bfalse, diff --git a/pkg/templates/kubeadm/v1beta3/kubeadm.go b/pkg/templates/kubeadm/v1beta3/kubeadm.go index 037f48615..68662e084 100644 --- a/pkg/templates/kubeadm/v1beta3/kubeadm.go +++ b/pkg/templates/kubeadm/v1beta3/kubeadm.go @@ -166,11 +166,12 @@ func NewConfig(s *state.State, host kubeoneapi.HostConfig) ([]runtime.Object, er APIVersion: "kubelet.config.k8s.io/v1beta1", Kind: "KubeletConfiguration", }, - CgroupDriver: "systemd", - ReadOnlyPort: 0, - RotateCertificates: true, - ServerTLSBootstrap: true, - ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + CgroupDriver: "systemd", + ReadOnlyPort: 0, + RotateCertificates: true, + ServerTLSBootstrap: true, + ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + ContainerLogMaxSize: cluster.LoggingConfig.ContainerLogMaxSize, Authentication: kubeletconfigv1beta1.KubeletAuthentication{ Anonymous: kubeletconfigv1beta1.KubeletAnonymousAuthentication{ Enabled: &bfalse, @@ -358,11 +359,12 @@ func NewConfigWorker(s *state.State, host kubeoneapi.HostConfig) ([]runtime.Obje APIVersion: "kubelet.config.k8s.io/v1beta1", Kind: "KubeletConfiguration", }, - CgroupDriver: "systemd", - ReadOnlyPort: 0, - RotateCertificates: true, - ServerTLSBootstrap: true, - ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + CgroupDriver: "systemd", + ReadOnlyPort: 0, + RotateCertificates: true, + ServerTLSBootstrap: true, + ClusterDNS: []string{resources.NodeLocalDNSVirtualIP}, + ContainerLogMaxSize: cluster.LoggingConfig.ContainerLogMaxSize, Authentication: kubeletconfigv1beta1.KubeletAuthentication{ Anonymous: kubeletconfigv1beta1.KubeletAnonymousAuthentication{ Enabled: &bfalse,