Decouple kubelet/cri/remote package from pkg/features
				
					
				
			Importing the `k8s.io/kubernetes/pkg/features` package in the remote runtime implementation makes it harder to separate the functionalities at some later point in time. We now decouple them by checking if the feature is enabled directly in the kubelet service creation path. Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
This commit is contained in:
		@@ -29,13 +29,11 @@ import (
 | 
				
			|||||||
	"google.golang.org/grpc/codes"
 | 
						"google.golang.org/grpc/codes"
 | 
				
			||||||
	"google.golang.org/grpc/credentials/insecure"
 | 
						"google.golang.org/grpc/credentials/insecure"
 | 
				
			||||||
	"google.golang.org/grpc/status"
 | 
						"google.golang.org/grpc/status"
 | 
				
			||||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
					 | 
				
			||||||
	tracing "k8s.io/component-base/tracing"
 | 
						tracing "k8s.io/component-base/tracing"
 | 
				
			||||||
	"k8s.io/klog/v2"
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	internalapi "k8s.io/cri-api/pkg/apis"
 | 
						internalapi "k8s.io/cri-api/pkg/apis"
 | 
				
			||||||
	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
						runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/util"
 | 
						"k8s.io/kubernetes/pkg/kubelet/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +59,7 @@ func NewRemoteImageService(endpoint string, connectionTimeout time.Duration, tp
 | 
				
			|||||||
		grpc.WithTransportCredentials(insecure.NewCredentials()),
 | 
							grpc.WithTransportCredentials(insecure.NewCredentials()),
 | 
				
			||||||
		grpc.WithContextDialer(dialer),
 | 
							grpc.WithContextDialer(dialer),
 | 
				
			||||||
		grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)))
 | 
							grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)))
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.KubeletTracing) {
 | 
						if tp != nil {
 | 
				
			||||||
		tracingOpts := []otelgrpc.Option{
 | 
							tracingOpts := []otelgrpc.Option{
 | 
				
			||||||
			otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents),
 | 
								otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents),
 | 
				
			||||||
			otelgrpc.WithPropagators(tracing.Propagators()),
 | 
								otelgrpc.WithPropagators(tracing.Propagators()),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,11 +26,8 @@ import (
 | 
				
			|||||||
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
 | 
						sdktrace "go.opentelemetry.io/otel/sdk/trace"
 | 
				
			||||||
	"go.opentelemetry.io/otel/sdk/trace/tracetest"
 | 
						"go.opentelemetry.io/otel/sdk/trace/tracetest"
 | 
				
			||||||
	oteltrace "go.opentelemetry.io/otel/trace"
 | 
						oteltrace "go.opentelemetry.io/otel/trace"
 | 
				
			||||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
					 | 
				
			||||||
	featuregatetesting "k8s.io/component-base/featuregate/testing"
 | 
					 | 
				
			||||||
	internalapi "k8s.io/cri-api/pkg/apis"
 | 
						internalapi "k8s.io/cri-api/pkg/apis"
 | 
				
			||||||
	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
						runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/util"
 | 
						"k8s.io/kubernetes/pkg/kubelet/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +46,6 @@ func createRemoteImageServiceWithoutTracerProvider(endpoint string, t *testing.T
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestImageServiceSpansWithTP(t *testing.T) {
 | 
					func TestImageServiceSpansWithTP(t *testing.T) {
 | 
				
			||||||
	featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)
 | 
					 | 
				
			||||||
	fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
						fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
		fakeRuntime.Stop()
 | 
							fakeRuntime.Stop()
 | 
				
			||||||
@@ -76,7 +72,6 @@ func TestImageServiceSpansWithTP(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestImageServiceSpansWithoutTP(t *testing.T) {
 | 
					func TestImageServiceSpansWithoutTP(t *testing.T) {
 | 
				
			||||||
	featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)
 | 
					 | 
				
			||||||
	fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
						fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
		fakeRuntime.Stop()
 | 
							fakeRuntime.Stop()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,13 +31,11 @@ import (
 | 
				
			|||||||
	"google.golang.org/grpc/codes"
 | 
						"google.golang.org/grpc/codes"
 | 
				
			||||||
	"google.golang.org/grpc/credentials/insecure"
 | 
						"google.golang.org/grpc/credentials/insecure"
 | 
				
			||||||
	"google.golang.org/grpc/status"
 | 
						"google.golang.org/grpc/status"
 | 
				
			||||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
					 | 
				
			||||||
	"k8s.io/component-base/logs/logreduction"
 | 
						"k8s.io/component-base/logs/logreduction"
 | 
				
			||||||
	tracing "k8s.io/component-base/tracing"
 | 
						tracing "k8s.io/component-base/tracing"
 | 
				
			||||||
	internalapi "k8s.io/cri-api/pkg/apis"
 | 
						internalapi "k8s.io/cri-api/pkg/apis"
 | 
				
			||||||
	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
						runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
 | 
				
			||||||
	"k8s.io/klog/v2"
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/util"
 | 
						"k8s.io/kubernetes/pkg/kubelet/util"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/probe/exec"
 | 
						"k8s.io/kubernetes/pkg/probe/exec"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,7 +87,7 @@ func NewRemoteRuntimeService(endpoint string, connectionTimeout time.Duration, t
 | 
				
			|||||||
		grpc.WithTransportCredentials(insecure.NewCredentials()),
 | 
							grpc.WithTransportCredentials(insecure.NewCredentials()),
 | 
				
			||||||
		grpc.WithContextDialer(dialer),
 | 
							grpc.WithContextDialer(dialer),
 | 
				
			||||||
		grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)))
 | 
							grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)))
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.KubeletTracing) {
 | 
						if tp != nil {
 | 
				
			||||||
		tracingOpts := []otelgrpc.Option{
 | 
							tracingOpts := []otelgrpc.Option{
 | 
				
			||||||
			otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents),
 | 
								otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents),
 | 
				
			||||||
			otelgrpc.WithPropagators(tracing.Propagators()),
 | 
								otelgrpc.WithPropagators(tracing.Propagators()),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,11 +28,8 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
					 | 
				
			||||||
	featuregatetesting "k8s.io/component-base/featuregate/testing"
 | 
					 | 
				
			||||||
	internalapi "k8s.io/cri-api/pkg/apis"
 | 
						internalapi "k8s.io/cri-api/pkg/apis"
 | 
				
			||||||
	apitest "k8s.io/cri-api/pkg/apis/testing"
 | 
						apitest "k8s.io/cri-api/pkg/apis/testing"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/features"
 | 
					 | 
				
			||||||
	fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake"
 | 
						fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/util"
 | 
						"k8s.io/kubernetes/pkg/kubelet/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -70,7 +67,6 @@ func createRemoteRuntimeServiceWithTracerProvider(endpoint string, tp oteltrace.
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestGetSpans(t *testing.T) {
 | 
					func TestGetSpans(t *testing.T) {
 | 
				
			||||||
	featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)
 | 
					 | 
				
			||||||
	fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
						fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
		fakeRuntime.Stop()
 | 
							fakeRuntime.Stop()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -322,10 +322,16 @@ func PreInitRuntimeService(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
 | 
				
			|||||||
		remoteImageEndpoint = kubeCfg.ContainerRuntimeEndpoint
 | 
							remoteImageEndpoint = kubeCfg.ContainerRuntimeEndpoint
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	if kubeDeps.RemoteRuntimeService, err = remote.NewRemoteRuntimeService(kubeCfg.ContainerRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider); err != nil {
 | 
					
 | 
				
			||||||
 | 
						var tp trace.TracerProvider
 | 
				
			||||||
 | 
						if utilfeature.DefaultFeatureGate.Enabled(features.KubeletTracing) {
 | 
				
			||||||
 | 
							tp = kubeDeps.TracerProvider
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if kubeDeps.RemoteRuntimeService, err = remote.NewRemoteRuntimeService(kubeCfg.ContainerRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, tp); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if kubeDeps.RemoteImageService, err = remote.NewRemoteImageService(remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider); err != nil {
 | 
						if kubeDeps.RemoteImageService, err = remote.NewRemoteImageService(remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, tp); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user