From 358ec5beb06459cfd8fa3e89de4e1883d8275433 Mon Sep 17 00:00:00 2001 From: krypton36 Date: Sun, 1 Feb 2026 19:23:13 +0530 Subject: [PATCH 1/2] feat:Native Sidecar Default Mode + Backward Compatibility Signed-off-by: krypton36 --- pkg/application/inject/fuse/injector.go | 17 +++++++- pkg/common/types.go | 3 ++ pkg/utils/discovery/api_discover.go | 17 ++++++-- pkg/utils/discovery/sidecar.go | 55 +++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 pkg/utils/discovery/sidecar.go diff --git a/pkg/application/inject/fuse/injector.go b/pkg/application/inject/fuse/injector.go index 66c40b4906c..c9719b187d2 100644 --- a/pkg/application/inject/fuse/injector.go +++ b/pkg/application/inject/fuse/injector.go @@ -24,6 +24,7 @@ import ( "github.com/fluid-cloudnative/fluid/pkg/common" "github.com/fluid-cloudnative/fluid/pkg/ddc/base" "github.com/fluid-cloudnative/fluid/pkg/utils" + "github.com/fluid-cloudnative/fluid/pkg/utils/discovery" "github.com/fluid-cloudnative/fluid/pkg/utils/applications/defaultapp" podapp "github.com/fluid-cloudnative/fluid/pkg/utils/applications/pod" @@ -44,10 +45,24 @@ type Injector struct { } func NewInjector(client client.Client) *Injector { + configured := common.GetSidecarInjectionMode() + + if configured == common.SidecarInjectionMode_Default { + cfg, err := ctrl.GetConfig() + if err != nil { + // Fall back to legacy if we can't get config + ctrl.Log.WithName("fuse-injector").Error(err, "Failed to get k8s config, falling back to legacy sidecar mode") + configured = common.SidecarInjectionMode_Legacy + } else if discovery.SupportsNativeSidecar(cfg) { + configured = common.SidecarInjectionMode_NativeSidecar + } else { + configured = common.SidecarInjectionMode_Legacy + } + } return &Injector{ client: client, log: ctrl.Log.WithName("fuse-injector"), - sidecarInjectionMode: common.GetSidecarInjectionMode(), + sidecarInjectionMode: configured, } } diff --git a/pkg/common/types.go b/pkg/common/types.go index 5ae0c0d9459..9f0c438e1e3 100644 --- a/pkg/common/types.go +++ b/pkg/common/types.go @@ -189,6 +189,9 @@ func GetSidecarInjectionMode() SidecarInjectionMode { return SidecarInjectionMode_Legacy case "native-sidecar": return SidecarInjectionMode_NativeSidecar + case "": + // Backward compatibility: old behavior + return SidecarInjectionMode_Default default: return SidecarInjectionMode_Default } diff --git a/pkg/utils/discovery/api_discover.go b/pkg/utils/discovery/api_discover.go index 8fc1bf35f51..833e1924dee 100644 --- a/pkg/utils/discovery/api_discover.go +++ b/pkg/utils/discovery/api_discover.go @@ -60,11 +60,22 @@ func initDiscovery() { } func discoverFluidResourcesInCluster() { - restConfig := ctrl.GetConfigOrDie() - var discoveryClient discovery.DiscoveryInterface = discovery.NewDiscoveryClientForConfigOrDie(restConfig) + restConfig,err := ctrl.GetConfig() + if err!=nil{ + nativeLog.Fatalf("failed to get kubernetes config: %v", err) + } + + if restConfig == nil { + nativeLog.Fatalf("kubernetes config is nil") + } + + discoveryClient, err := discovery.NewDiscoveryClientForConfig(restConfig) + if err != nil { + nativeLog.Fatalf("failed to create discovery client: %v", err) + } fluidGroupVersion := fmt.Sprintf("%s/%s", datav1alpha1.Group, datav1alpha1.Version) - err := retry.OnError(backOff, func(err error) bool { return true }, func() error { + err = retry.OnError(backOff, func(err error) bool { return true }, func() error { resources, discoverErr := discoveryClient.ServerResourcesForGroupVersion(fluidGroupVersion) if discoverErr != nil { return discoverErr diff --git a/pkg/utils/discovery/sidecar.go b/pkg/utils/discovery/sidecar.go new file mode 100644 index 00000000000..7a775a35348 --- /dev/null +++ b/pkg/utils/discovery/sidecar.go @@ -0,0 +1,55 @@ +package discovery + +import ( + "fmt" + "strconv" + "strings" + + "k8s.io/client-go/discovery" + "k8s.io/client-go/rest" +) + +func SupportsNativeSidecarOrDefault(cfg *rest.Config, defaultValue bool) bool { + if cfg == nil { + return defaultValue + } + return SupportsNativeSidecar(cfg) +} + +func SupportsNativeSidecar(cfg *rest.Config) bool { + // Add nil check + if cfg == nil { + return false + } + + fmt.Printf("SupportsNativeSidecar: cfg.Host = %q\n", cfg.Host) + dc, err := discovery.NewDiscoveryClientForConfig(cfg) + if err != nil { + return false + } + + info, err := dc.ServerVersion() + if err != nil { + return false + } + + majorStr := strings.TrimPrefix(info.Major, "v") + minorStr := strings.TrimSuffix(info.Minor, "+") + + major, err := strconv.Atoi(majorStr) + if err != nil { + return false + } + + minor, err := strconv.Atoi(minorStr) + if err != nil { + return false + } + + // native sidecar supported from k8s 1.29+ + if major > 1 { + return true + } + + return major == 1 && minor >= 29 +} \ No newline at end of file From 82d3e98b50d7283495a0ae3625bb15ca1f8b2be1 Mon Sep 17 00:00:00 2001 From: krypton36 Date: Sun, 1 Feb 2026 22:04:31 +0530 Subject: [PATCH 2/2] fix:improved error handling and remove print statement Signed-off-by: krypton36 --- pkg/utils/discovery/sidecar.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/utils/discovery/sidecar.go b/pkg/utils/discovery/sidecar.go index 7a775a35348..8c4ad9153be 100644 --- a/pkg/utils/discovery/sidecar.go +++ b/pkg/utils/discovery/sidecar.go @@ -1,7 +1,7 @@ package discovery import ( - "fmt" + "log" "strconv" "strings" @@ -22,9 +22,10 @@ func SupportsNativeSidecar(cfg *rest.Config) bool { return false } - fmt.Printf("SupportsNativeSidecar: cfg.Host = %q\n", cfg.Host) + // fmt.Printf("SupportsNativeSidecar: cfg.Host = %q\n", cfg.Host) dc, err := discovery.NewDiscoveryClientForConfig(cfg) if err != nil { + log.Printf("Failed to create discovery client for native sidecar detection: %v", err) return false }