diff --git a/pkg/controller/kubelet-config/helpers.go b/pkg/controller/kubelet-config/helpers.go index 50c0c597ab..3550438c9a 100644 --- a/pkg/controller/kubelet-config/helpers.go +++ b/pkg/controller/kubelet-config/helpers.go @@ -42,7 +42,7 @@ func createNewKubeletDynamicSystemReservedIgnition(autoSystemReserved *bool, use var systemReservedEphemeralStorage string if autoSystemReserved == nil { - autoNodeSizing = "false" + autoNodeSizing = "true" } else { autoNodeSizing = strconv.FormatBool(*autoSystemReserved) } @@ -68,7 +68,7 @@ func createNewKubeletDynamicSystemReservedIgnition(autoSystemReserved *bool, use config := fmt.Sprintf("NODE_SIZING_ENABLED=%s\nSYSTEM_RESERVED_MEMORY=%s\nSYSTEM_RESERVED_CPU=%s\nSYSTEM_RESERVED_ES=%s\n", autoNodeSizing, systemReservedMemory, systemReservedCPU, systemReservedEphemeralStorage) - r := ctrlcommon.NewIgnFileBytesOverwriting("/etc/node-sizing-enabled.env", []byte(config)) + r := ctrlcommon.NewIgnFileBytesOverwriting("/etc/auto-node-sizing-enabled.env", []byte(config)) return &r } @@ -461,6 +461,7 @@ func kubeletConfigToIgnFile(cfg *kubeletconfigv1beta1.KubeletConfiguration) (*ig // generateKubeletIgnFiles generates the Ignition files from the kubelet config func generateKubeletIgnFiles(kubeletConfig *mcfgv1.KubeletConfig, originalKubeConfig *kubeletconfigv1beta1.KubeletConfiguration) (*ign3types.File, *ign3types.File, *ign3types.File, error) { + klog.Infof("generateKubeletIgnFiles: starting for KubeletConfig %s", kubeletConfig.Name) var ( kubeletIgnition *ign3types.File logLevelIgnition *ign3types.File @@ -469,6 +470,7 @@ func generateKubeletIgnFiles(kubeletConfig *mcfgv1.KubeletConfig, originalKubeCo userDefinedSystemReserved := make(map[string]string) if kubeletConfig.Spec.KubeletConfig != nil && kubeletConfig.Spec.KubeletConfig.Raw != nil { + klog.Infof("generateKubeletIgnFiles: KubeletConfig %s has custom kubelet config, decoding", kubeletConfig.Name) specKubeletConfig, err := DecodeKubeletConfig(kubeletConfig.Spec.KubeletConfig.Raw) if err != nil { return nil, nil, nil, fmt.Errorf("could not deserialize the new Kubelet config: %w", err) @@ -477,16 +479,19 @@ func generateKubeletIgnFiles(kubeletConfig *mcfgv1.KubeletConfig, originalKubeCo if val, ok := specKubeletConfig.SystemReserved["memory"]; ok { userDefinedSystemReserved["memory"] = val delete(specKubeletConfig.SystemReserved, "memory") + klog.Infof("generateKubeletIgnFiles: KubeletConfig %s has user-defined systemReserved memory: %s", kubeletConfig.Name, val) } if val, ok := specKubeletConfig.SystemReserved["cpu"]; ok { userDefinedSystemReserved["cpu"] = val delete(specKubeletConfig.SystemReserved, "cpu") + klog.Infof("generateKubeletIgnFiles: KubeletConfig %s has user-defined systemReserved cpu: %s", kubeletConfig.Name, val) } if val, ok := specKubeletConfig.SystemReserved["ephemeral-storage"]; ok { userDefinedSystemReserved["ephemeral-storage"] = val delete(specKubeletConfig.SystemReserved, "ephemeral-storage") + klog.Infof("generateKubeletIgnFiles: KubeletConfig %s has user-defined systemReserved ephemeral-storage: %s", kubeletConfig.Name, val) } // FeatureGates must be set from the FeatureGate. @@ -502,6 +507,7 @@ func generateKubeletIgnFiles(kubeletConfig *mcfgv1.KubeletConfig, originalKubeCo originalKubeConfig.ProtectKernelDefaults = false } // Merge the Old and New + klog.Infof("generateKubeletIgnFiles: merging custom kubelet config for KubeletConfig %s", kubeletConfig.Name) err = mergo.Merge(originalKubeConfig, specKubeletConfig, mergo.WithOverride) if err != nil { return nil, nil, nil, fmt.Errorf("could not merge original config and new config: %w", err) @@ -509,20 +515,25 @@ func generateKubeletIgnFiles(kubeletConfig *mcfgv1.KubeletConfig, originalKubeCo } // Encode the new config into an Ignition File + klog.Infof("generateKubeletIgnFiles: encoding kubelet config to ignition file for KubeletConfig %s", kubeletConfig.Name) kubeletIgnition, err := kubeletConfigToIgnFile(originalKubeConfig) if err != nil { return nil, nil, nil, fmt.Errorf("could not encode JSON: %w", err) } if kubeletConfig.Spec.LogLevel != nil { + klog.Infof("generateKubeletIgnFiles: creating log level ignition for KubeletConfig %s with level %d", kubeletConfig.Name, *kubeletConfig.Spec.LogLevel) logLevelIgnition = createNewKubeletLogLevelIgnition(*kubeletConfig.Spec.LogLevel) } if kubeletConfig.Spec.AutoSizingReserved != nil && len(userDefinedSystemReserved) == 0 { + klog.Infof("KubeletConfig %s: autoSizingReserved is set to %t", kubeletConfig.Name, *kubeletConfig.Spec.AutoSizingReserved) autoSizingReservedIgnition = createNewKubeletDynamicSystemReservedIgnition(kubeletConfig.Spec.AutoSizingReserved, userDefinedSystemReserved) - } - if len(userDefinedSystemReserved) > 0 { + } else if len(userDefinedSystemReserved) > 0 { + klog.Infof("KubeletConfig %s: using user-defined systemReserved values: %v", kubeletConfig.Name, userDefinedSystemReserved) autoSizingReservedIgnition = createNewKubeletDynamicSystemReservedIgnition(nil, userDefinedSystemReserved) } + klog.Infof("generateKubeletIgnFiles: completed for KubeletConfig %s (kubeletIgnition=%v, logLevelIgnition=%v, autoSizingReservedIgnition=%v)", + kubeletConfig.Name, kubeletIgnition != nil, logLevelIgnition != nil, autoSizingReservedIgnition != nil) return kubeletIgnition, logLevelIgnition, autoSizingReservedIgnition, nil } diff --git a/pkg/daemon/update.go b/pkg/daemon/update.go index e7c91edcd3..b03bff4569 100644 --- a/pkg/daemon/update.go +++ b/pkg/daemon/update.go @@ -1863,27 +1863,30 @@ func (dn *Daemon) deleteStaleData(oldIgnConfig, newIgnConfig ign3types.Config) e newFileSet[f.Path] = struct{}{} } - // need to skip these on upgrade if they are in a MC, or else we will remove all certs! - certsToSkip := []string{ + // need to skip these on upgrade if they are in a MC, + // or else we will remove all certs! + // also required to ensure that clusters with node sizing disabled are not affected + filesToSkip := []string{ userCABundleFilePath, caBundleFilePath, cloudCABundleFilePath, + "/etc/node-sizing-enabled.env", } for _, f := range oldIgnConfig.Storage.Files { if _, ok := newFileSet[f.Path]; ok { continue } - skipBecauseCert := false - for _, cert := range certsToSkip { - if cert == f.Path { - skipBecauseCert = true + mustSkip := false + for _, fileToSkip := range filesToSkip { + if fileToSkip == f.Path { + mustSkip = true break } } if strings.Contains(filepath.Dir(f.Path), imageCAFilePath) { - skipBecauseCert = true + mustSkip = true } - if skipBecauseCert { + if mustSkip { continue } if _, err := os.Stat(noOrigFileStampName(f.Path)); err == nil { diff --git a/pkg/operator/sync_test.go b/pkg/operator/sync_test.go index 158f262c38..c69e7fd6ce 100644 --- a/pkg/operator/sync_test.go +++ b/pkg/operator/sync_test.go @@ -402,4 +402,4 @@ func buildMachineConfigurationWithBootImageUpdateEnabled() *opv1.MachineConfigur func buildMachineConfigurationWithNoBootImageConfiguration() *opv1.MachineConfiguration { return &opv1.MachineConfiguration{Spec: opv1.MachineConfigurationSpec{ManagedBootImages: apihelpers.GetManagedBootImagesWithNoConfiguration()}, ObjectMeta: metav1.ObjectMeta{Name: "cluster"}} -} +} \ No newline at end of file diff --git a/templates/common/_base/files/kubelet-auto-node-sizing-enabled.yaml b/templates/common/_base/files/kubelet-auto-node-sizing-enabled.yaml index d1c72a540f..1d9a1ba5cc 100644 --- a/templates/common/_base/files/kubelet-auto-node-sizing-enabled.yaml +++ b/templates/common/_base/files/kubelet-auto-node-sizing-enabled.yaml @@ -1,8 +1,8 @@ mode: 0644 -path: "/etc/node-sizing-enabled.env" +path: "/etc/auto-node-sizing-enabled.env" contents: inline: | - NODE_SIZING_ENABLED=false + NODE_SIZING_ENABLED=true SYSTEM_RESERVED_MEMORY=1Gi SYSTEM_RESERVED_CPU=500m SYSTEM_RESERVED_ES=1Gi \ No newline at end of file diff --git a/templates/common/_base/units/kubelet-auto-node-size.service.yaml b/templates/common/_base/units/kubelet-auto-node-size.service.yaml index 4c5dd79072..e48f611ce9 100644 --- a/templates/common/_base/units/kubelet-auto-node-size.service.yaml +++ b/templates/common/_base/units/kubelet-auto-node-size.service.yaml @@ -11,7 +11,8 @@ contents: | # Need oneshot to delay kubelet Type=oneshot RemainAfterExit=yes - EnvironmentFile=/etc/node-sizing-enabled.env + EnvironmentFile=/etc/auto-node-sizing-enabled.env + EnvironmentFile=-/etc/node-sizing-enabled.env ExecStart=/bin/bash /usr/local/sbin/dynamic-system-reserved-calc.sh ${NODE_SIZING_ENABLED} ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} [Install] RequiredBy=kubelet-dependencies.target