@@ -27,27 +27,6 @@ import (
2727
2828	// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) 
2929	// to ensure that exec-entrypoint and run can make use of them. 
30- 
31- 	"k8s.io/client-go/kubernetes" 
32- 	_ "k8s.io/client-go/plugin/pkg/client/auth" 
33- 	"k8s.io/client-go/rest" 
34- 	"k8s.io/klog/v2" 
35- 
36- 	"k8s.io/apimachinery/pkg/runtime" 
37- 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" 
38- 	clientgoscheme "k8s.io/client-go/kubernetes/scheme" 
39- 	"k8s.io/kubernetes/cmd/kube-scheduler/app" 
40- 	"k8s.io/kubernetes/pkg/scheduler" 
41- 	ctrl "sigs.k8s.io/controller-runtime" 
42- 	"sigs.k8s.io/controller-runtime/pkg/client" 
43- 	"sigs.k8s.io/controller-runtime/pkg/healthz" 
44- 	"sigs.k8s.io/controller-runtime/pkg/manager" 
45- 	"sigs.k8s.io/controller-runtime/pkg/metrics/filters" 
46- 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" 
47- 	"sigs.k8s.io/controller-runtime/pkg/webhook" 
48- 
49- 	"sigs.k8s.io/yaml" 
50- 
5130	tfv1 "github.com/NexusGPU/tensor-fusion/api/v1" 
5231	"github.com/NexusGPU/tensor-fusion/cmd/sched" 
5332	"github.com/NexusGPU/tensor-fusion/internal/alert" 
@@ -65,6 +44,25 @@ import (
6544	"github.com/NexusGPU/tensor-fusion/internal/utils" 
6645	"github.com/NexusGPU/tensor-fusion/internal/version" 
6746	webhookcorev1 "github.com/NexusGPU/tensor-fusion/internal/webhook/v1" 
47+ 	"k8s.io/apimachinery/pkg/runtime" 
48+ 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" 
49+ 	k8sVer "k8s.io/apimachinery/pkg/util/version" 
50+ 	"k8s.io/apiserver/pkg/util/feature" 
51+ 	"k8s.io/client-go/kubernetes" 
52+ 	clientgoscheme "k8s.io/client-go/kubernetes/scheme" 
53+ 	_ "k8s.io/client-go/plugin/pkg/client/auth" 
54+ 	"k8s.io/client-go/rest" 
55+ 	"k8s.io/klog/v2" 
56+ 	"k8s.io/kubernetes/cmd/kube-scheduler/app" 
57+ 	"k8s.io/kubernetes/pkg/scheduler" 
58+ 	ctrl "sigs.k8s.io/controller-runtime" 
59+ 	"sigs.k8s.io/controller-runtime/pkg/client" 
60+ 	"sigs.k8s.io/controller-runtime/pkg/healthz" 
61+ 	"sigs.k8s.io/controller-runtime/pkg/manager" 
62+ 	"sigs.k8s.io/controller-runtime/pkg/metrics/filters" 
63+ 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" 
64+ 	"sigs.k8s.io/controller-runtime/pkg/webhook" 
65+ 	"sigs.k8s.io/yaml" 
6866	// +kubebuilder:scaffold:imports 
6967)
7068
@@ -204,6 +202,14 @@ func main() {
204202	_  =  os .Setenv (constants .KubeApiVersionMajorEnv , version .Major )
205203	_  =  os .Setenv (constants .KubeApiVersionMinorEnv , version .Minor )
206204
205+ 	// TODO: there will still be risk after FeatureGate removed when the feature is stable for a long time 
206+ 	// To be compatible with long-term k8s version, need to patch Kubernetes source code 
207+ 	k8sVersion  :=  k8sVer .MustParseSemantic (version .String ())
208+ 	err  =  feature .DefaultMutableFeatureGate .SetEmulationVersion (k8sVersion )
209+ 	if  err  !=  nil  {
210+ 		setupLog .Error (err , "unable to set k8s version for feature gating" )
211+ 	}
212+ 
207213	alertEvaluatorReady  =  make (chan  struct {})
208214	setupTimeSeriesAndWatchGlobalConfigChanges (ctx , mgr )
209215
@@ -221,7 +227,7 @@ func main() {
221227	pricingProvider  :=  pricing .NewStaticPricingProvider ()
222228	startWebhook (mgr , portAllocator , pricingProvider )
223229
224- 	scheduler  :=  startScheduler (ctx , allocator , mgr )
230+ 	scheduler  :=  startScheduler (ctx , allocator , mgr ,  k8sVersion )
225231
226232	startCustomResourceController (ctx , mgr , metricsRecorder , allocator , portAllocator )
227233
@@ -461,6 +467,7 @@ func startScheduler(
461467	ctx  context.Context ,
462468	allocator  * gpuallocator.GpuAllocator ,
463469	mgr  manager.Manager ,
470+ 	k8sVersion  * k8sVer.Version ,
464471) * scheduler.Scheduler  {
465472	if  os .Getenv (constants .EnableSchedulerEnv ) ==  constants .FalseStringValue  {
466473		return  nil 
@@ -479,7 +486,9 @@ func startScheduler(
479486		gpuTopoPlugin .NewWithDeps (allocator , mgr .GetClient ()),
480487	)
481488
482- 	cc , scheduler , err  :=  sched .SetupScheduler (ctx , mgr , schedulerConfigPath , false , gpuResourceFitOpt , gpuTopoOpt )
489+ 	cc , scheduler , err  :=  sched .SetupScheduler (
490+ 		ctx , mgr , schedulerConfigPath , false , k8sVersion , gpuResourceFitOpt , gpuTopoOpt ,
491+ 	)
483492	if  err  !=  nil  {
484493		setupLog .Error (err , "unable to create tensor fusion scheduler" )
485494		os .Exit (1 )
0 commit comments