@@ -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