Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion pkg/application/inject/fuse/injector.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
}
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/common/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
17 changes: 14 additions & 3 deletions pkg/utils/discovery/api_discover.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
56 changes: 56 additions & 0 deletions pkg/utils/discovery/sidecar.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package discovery

import (
"log"
"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 {
log.Printf("Failed to create discovery client for native sidecar detection: %v", err)
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
}