diff --git a/pkg/api/v1alpha1/conversion.go b/pkg/api/v1alpha1/conversion.go index 30318f976..44f7a3bc0 100644 --- a/pkg/api/v1alpha1/conversion.go +++ b/pkg/api/v1alpha1/conversion.go @@ -242,7 +242,7 @@ func enableProfilePluginsByType(profilePlugins api.Plugins, pluginInstance frame func checkBalance(profilePlugins api.Plugins, pluginInstance framework.Plugin, pluginConfig *api.PluginConfig) api.Plugins { _, ok := pluginInstance.(framework.BalancePlugin) if ok { - klog.V(3).Info("converting Balance plugin: %s", pluginInstance.Name()) + klog.V(3).Infof("converting Balance plugin: %s", pluginInstance.Name()) profilePlugins.Balance.Enabled = []string{pluginConfig.Name} } return profilePlugins @@ -251,7 +251,7 @@ func checkBalance(profilePlugins api.Plugins, pluginInstance framework.Plugin, p func checkDeschedule(profilePlugins api.Plugins, pluginInstance framework.Plugin, pluginConfig *api.PluginConfig) api.Plugins { _, ok := pluginInstance.(framework.DeschedulePlugin) if ok { - klog.V(3).Info("converting Deschedule plugin: %s", pluginInstance.Name()) + klog.V(3).Infof("converting Deschedule plugin: %s", pluginInstance.Name()) profilePlugins.Deschedule.Enabled = []string{pluginConfig.Name} } return profilePlugins diff --git a/pkg/descheduler/descheduler.go b/pkg/descheduler/descheduler.go index bac6ec11b..51fdffc52 100644 --- a/pkg/descheduler/descheduler.go +++ b/pkg/descheduler/descheduler.go @@ -19,6 +19,9 @@ package descheduler import ( "context" "fmt" + "math" + "strconv" + "strings" "time" componentbaseconfig "k8s.io/component-base/config" @@ -49,6 +52,7 @@ import ( "sigs.k8s.io/descheduler/pkg/framework/pluginregistry" "sigs.k8s.io/descheduler/pkg/framework/plugins/defaultevictor" "sigs.k8s.io/descheduler/pkg/utils" + "sigs.k8s.io/descheduler/pkg/version" ) type enabledDeschedulePluginEntry struct { @@ -83,6 +87,9 @@ func Run(ctx context.Context, rs *options.DeschedulerServer) error { return fmt.Errorf("deschedulerPolicy is nil") } + // Add k8s compatibility warnings to logs + versionCompatibilityCheck(rs) + evictionPolicyGroupVersion, err := eutils.SupportEviction(rs.Client) if err != nil || len(evictionPolicyGroupVersion) == 0 { return err @@ -110,6 +117,29 @@ func Run(ctx context.Context, rs *options.DeschedulerServer) error { return runFn() } +func versionCompatibilityCheck(rs *options.DeschedulerServer) { + serverVersion, serverErr := rs.Client.Discovery().ServerVersion() + if serverErr != nil { + klog.V(1).InfoS("Warning: Get Kubernetes server version fail") + return + } + + deschedulerMinorVersion := strings.Split(version.Get().Minor, ".")[0] + deschedulerMinorVersionFloat, err := strconv.ParseFloat(deschedulerMinorVersion, 64) + if err != nil { + klog.Warning("Warning: Convert Descheduler minor version to float fail") + } + + kubernetesMinorVersionFloat, err := strconv.ParseFloat(serverVersion.Minor, 64) + if err != nil { + klog.Warning("Warning: Convert Kubernetes server minor version to float fail") + } + + if math.Abs(deschedulerMinorVersionFloat-kubernetesMinorVersionFloat) > 3 { + klog.Warningf("Warning: Descheduler minor version %v is not supported on your version of Kubernetes %v.%v. See compatibility docs for more info: https://github.com/kubernetes-sigs/descheduler#compatibility-matrix", deschedulerMinorVersion, serverVersion.Major, serverVersion.Minor) + } +} + func cachedClient( realClient clientset.Interface, podLister listersv1.PodLister,