From f28f40e52134cc819f511eabb59357eb97a8a623 Mon Sep 17 00:00:00 2001 From: Paco Xu Date: Wed, 12 Oct 2022 02:09:19 +0800 Subject: [PATCH] remove a flag check that was introduced in #112542; address several comments Signed-off-by: Paco Xu --- cmd/kubelet/app/options/options.go | 7 ------- cmd/kubelet/app/options/options_test.go | 3 +-- cmd/kubemark/hollow-node.go | 2 +- pkg/generated/openapi/zz_generated.openapi.go | 4 ++-- pkg/kubelet/apis/config/fuzzer/fuzzer.go | 2 +- .../testdata/KubeletConfiguration/after/v1beta1.yaml | 2 +- .../KubeletConfiguration/roundtrip/default/v1beta1.yaml | 3 +-- pkg/kubelet/apis/config/types.go | 2 +- pkg/kubelet/apis/config/v1beta1/defaults.go | 4 ++-- pkg/kubelet/apis/config/v1beta1/defaults_test.go | 6 ++++++ pkg/kubelet/apis/config/validation/validation.go | 4 ++++ pkg/kubelet/apis/config/validation/validation_test.go | 1 + pkg/kubelet/kubelet.go | 6 +++++- staging/src/k8s.io/kubelet/config/v1beta1/types.go | 8 +++++--- 14 files changed, 31 insertions(+), 23 deletions(-) diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 5f47756ea4f..8be25ccdc4a 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -189,13 +189,6 @@ func ValidateKubeletFlags(f *KubeletFlags) error { return fmt.Errorf("unsupported CRI runtime: %q, only %q is currently supported", f.ContainerRuntime, kubetypes.RemoteContainerRuntime) } - // Note: maybe we can test it for being a valid socket address as an additional improvement. - // The only problem with it will be that some setups may not specify 'unix://' prefix. - // So just check empty for back compat. - if f.RemoteRuntimeEndpoint == "" { - return fmt.Errorf("the container runtime endpoint address was not specified or empty, use --container-runtime-endpoint to set") - } - return nil } diff --git a/cmd/kubelet/app/options/options_test.go b/cmd/kubelet/app/options/options_test.go index 13d8e32bca2..e306d7ea914 100644 --- a/cmd/kubelet/app/options/options_test.go +++ b/cmd/kubelet/app/options/options_test.go @@ -183,8 +183,7 @@ func TestValidateKubeletFlags(t *testing.T) { ContainerRuntimeOptions: config.ContainerRuntimeOptions{ ContainerRuntime: kubetypes.RemoteContainerRuntime, }, - RemoteRuntimeEndpoint: "unix:///run/containerd/containerd.sock", - NodeLabels: tt.labels, + NodeLabels: tt.labels, }) if tt.error && err == nil { diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index 02f11c99000..773cdebd019 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -254,7 +254,7 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) error { var imageService internalapi.ImageManagerService = fakeRemoteRuntime.ImageService if config.UseHostImageService { - imageService, err = remote.NewRemoteImageService(c.ContainerRuntimeEndpoint, 15*time.Second, oteltrace.NewNoopTracerProvider()) + imageService, err = remote.NewRemoteImageService(c.ImageServiceEndpoint, 15*time.Second, oteltrace.NewNoopTracerProvider()) if err != nil { return fmt.Errorf("Failed to init image service, error: %w", err) } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 3a848e2a729..fefddbc2a82 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -58631,7 +58631,7 @@ func schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref common.Referen }, "containerRuntimeEndpoint": { SchemaProps: spec.SchemaProps{ - Description: "ContainerRuntimeEndpoint is the endpoint of container runtime. unix domain sockets supported on Linux while npipes and tcp endpoints are supported for windows. Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime", + Description: "ContainerRuntimeEndpoint is the endpoint of container runtime. Unix Domain Sockets are supported on Linux, while npipe and tcp endpoints are supported on Windows. Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime'", Default: "", Type: []string{"string"}, Format: "", @@ -58639,7 +58639,7 @@ func schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref common.Referen }, "imageServiceEndpoint": { SchemaProps: spec.SchemaProps{ - Description: "ImageServiceEndpoint is the endpoint of container image service. If not specified the default value is ContainerRuntimeEndpoint", + Description: "ImageServiceEndpoint is the endpoint of container image service. Unix Domain Socket are supported on Linux, while npipe and tcp endpoints are supported on Windows. Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime'. If not specified, the value in containerRuntimeEndpoint is used.", Type: []string{"string"}, Format: "", }, diff --git a/pkg/kubelet/apis/config/fuzzer/fuzzer.go b/pkg/kubelet/apis/config/fuzzer/fuzzer.go index f3d6de4324d..b00dd10bcb8 100644 --- a/pkg/kubelet/apis/config/fuzzer/fuzzer.go +++ b/pkg/kubelet/apis/config/fuzzer/fuzzer.go @@ -107,7 +107,7 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { obj.ConfigMapAndSecretChangeDetectionStrategy = "Watch" obj.AllowedUnsafeSysctls = []string{} obj.VolumePluginDir = kubeletconfigv1beta1.DefaultVolumePluginDir - obj.ContainerRuntimeEndpoint = "containerd.sock" + obj.ContainerRuntimeEndpoint = "unix:///run/containerd/containerd.sock" if obj.Logging.Format == "" { obj.Logging.Format = "text" diff --git a/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/after/v1beta1.yaml b/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/after/v1beta1.yaml index f346d547bc5..401cc7b8eb4 100644 --- a/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/after/v1beta1.yaml +++ b/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/after/v1beta1.yaml @@ -17,7 +17,7 @@ cgroupsPerQOS: true configMapAndSecretChangeDetectionStrategy: Watch containerLogMaxFiles: 5 containerLogMaxSize: 10Mi -containerRuntimeEndpoint: "" +containerRuntimeEndpoint: unix:///run/containerd/containerd.sock contentType: application/vnd.kubernetes.protobuf cpuCFSQuota: true cpuCFSQuotaPeriod: 100ms diff --git a/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/roundtrip/default/v1beta1.yaml b/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/roundtrip/default/v1beta1.yaml index 0b4f35b30a1..401cc7b8eb4 100644 --- a/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/roundtrip/default/v1beta1.yaml +++ b/pkg/kubelet/apis/config/scheme/testdata/KubeletConfiguration/roundtrip/default/v1beta1.yaml @@ -17,7 +17,7 @@ cgroupsPerQOS: true configMapAndSecretChangeDetectionStrategy: Watch containerLogMaxFiles: 5 containerLogMaxSize: 10Mi -containerRuntimeEndpoint: "" +containerRuntimeEndpoint: unix:///run/containerd/containerd.sock contentType: application/vnd.kubernetes.protobuf cpuCFSQuota: true cpuCFSQuotaPeriod: 100ms @@ -43,7 +43,6 @@ httpCheckFrequency: 20s imageGCHighThresholdPercent: 85 imageGCLowThresholdPercent: 80 imageMinimumGCAge: 2m0s -imageServiceEndpoint: containerd.sock iptablesDropBit: 15 iptablesMasqueradeBit: 14 kind: KubeletConfiguration diff --git a/pkg/kubelet/apis/config/types.go b/pkg/kubelet/apis/config/types.go index a9ceb7d29b4..e0a30fe26db 100644 --- a/pkg/kubelet/apis/config/types.go +++ b/pkg/kubelet/apis/config/types.go @@ -469,7 +469,7 @@ type KubeletConfiguration struct { // ContainerRuntimeEndpoint is the endpoint of container runtime. // unix domain sockets supported on Linux while npipes and tcp endpoints are supported for windows. - // Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime + // Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime' ContainerRuntimeEndpoint string // ImageServiceEndpoint is the endpoint of container image service. diff --git a/pkg/kubelet/apis/config/v1beta1/defaults.go b/pkg/kubelet/apis/config/v1beta1/defaults.go index 68eea1079b8..018368d4e51 100644 --- a/pkg/kubelet/apis/config/v1beta1/defaults.go +++ b/pkg/kubelet/apis/config/v1beta1/defaults.go @@ -264,7 +264,7 @@ func SetDefaults_KubeletConfiguration(obj *kubeletconfigv1beta1.KubeletConfigura if obj.LocalStorageCapacityIsolation == nil { obj.LocalStorageCapacityIsolation = utilpointer.BoolPtr(true) } - if obj.ImageServiceEndpoint == "" && obj.ContainerRuntimeEndpoint != "" { - obj.ImageServiceEndpoint = obj.ContainerRuntimeEndpoint + if obj.ContainerRuntimeEndpoint == "" { + obj.ContainerRuntimeEndpoint = "unix:///run/containerd/containerd.sock" } } diff --git a/pkg/kubelet/apis/config/v1beta1/defaults_test.go b/pkg/kubelet/apis/config/v1beta1/defaults_test.go index 447e5f5dad3..6c01d476730 100644 --- a/pkg/kubelet/apis/config/v1beta1/defaults_test.go +++ b/pkg/kubelet/apis/config/v1beta1/defaults_test.go @@ -78,6 +78,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { ImageMinimumGCAge: metav1.Duration{Duration: 2 * time.Minute}, ImageGCHighThresholdPercent: utilpointer.Int32Ptr(85), ImageGCLowThresholdPercent: utilpointer.Int32Ptr(80), + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", VolumeStatsAggPeriod: metav1.Duration{Duration: time.Minute}, CgroupsPerQOS: utilpointer.BoolPtr(true), CgroupDriver: "cgroupfs", @@ -173,6 +174,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { NodeStatusUpdateFrequency: zeroDuration, NodeStatusReportFrequency: zeroDuration, NodeLeaseDurationSeconds: 0, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", ImageMinimumGCAge: zeroDuration, ImageGCHighThresholdPercent: utilpointer.Int32(0), ImageGCLowThresholdPercent: utilpointer.Int32(0), @@ -285,6 +287,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { NodeStatusUpdateFrequency: metav1.Duration{Duration: 10 * time.Second}, NodeStatusReportFrequency: metav1.Duration{Duration: 5 * time.Minute}, NodeLeaseDurationSeconds: 40, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", ImageMinimumGCAge: metav1.Duration{Duration: 2 * time.Minute}, ImageGCHighThresholdPercent: utilpointer.Int32(0), ImageGCLowThresholdPercent: utilpointer.Int32(0), @@ -394,6 +397,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { NodeStatusUpdateFrequency: metav1.Duration{Duration: 60 * time.Second}, NodeStatusReportFrequency: metav1.Duration{Duration: 60 * time.Second}, NodeLeaseDurationSeconds: 1, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", ImageMinimumGCAge: metav1.Duration{Duration: 60 * time.Second}, ImageGCHighThresholdPercent: utilpointer.Int32(1), ImageGCLowThresholdPercent: utilpointer.Int32(1), @@ -538,6 +542,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { NodeStatusUpdateFrequency: metav1.Duration{Duration: 60 * time.Second}, NodeStatusReportFrequency: metav1.Duration{Duration: 60 * time.Second}, NodeLeaseDurationSeconds: 1, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", ImageMinimumGCAge: metav1.Duration{Duration: 60 * time.Second}, ImageGCHighThresholdPercent: utilpointer.Int32(1), ImageGCLowThresholdPercent: utilpointer.Int32(1), @@ -674,6 +679,7 @@ func TestSetDefaultsKubeletConfiguration(t *testing.T) { NodeStatusUpdateFrequency: metav1.Duration{Duration: 1 * time.Minute}, NodeStatusReportFrequency: metav1.Duration{Duration: 1 * time.Minute}, NodeLeaseDurationSeconds: 40, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", ImageMinimumGCAge: metav1.Duration{Duration: 2 * time.Minute}, ImageGCHighThresholdPercent: utilpointer.Int32Ptr(85), ImageGCLowThresholdPercent: utilpointer.Int32Ptr(80), diff --git a/pkg/kubelet/apis/config/validation/validation.go b/pkg/kubelet/apis/config/validation/validation.go index dc1c2b7c007..aa4c2c5fcfa 100644 --- a/pkg/kubelet/apis/config/validation/validation.go +++ b/pkg/kubelet/apis/config/validation/validation.go @@ -257,5 +257,9 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration, featur allErrors = append(allErrors, fmt.Errorf("invalid configuration: memoryThrottlingFactor %v must be greater than 0 and less than or equal to 1.0", *kc.MemoryThrottlingFactor)) } + if kc.ContainerRuntimeEndpoint == "" { + allErrors = append(allErrors, fmt.Errorf("invalid configuration: the containerRuntimeEndpoint was not specified or empty")) + } + return utilerrors.NewAggregate(allErrors) } diff --git a/pkg/kubelet/apis/config/validation/validation_test.go b/pkg/kubelet/apis/config/validation/validation_test.go index 81de56d554b..71cd2bdddab 100644 --- a/pkg/kubelet/apis/config/validation/validation_test.go +++ b/pkg/kubelet/apis/config/validation/validation_test.go @@ -73,6 +73,7 @@ var ( Logging: logsapi.LoggingConfiguration{ Format: "text", }, + ContainerRuntimeEndpoint: "unix:///run/containerd/containerd.sock", } ) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 052c75bf387..8a8156f507d 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -301,11 +301,15 @@ func makePodSourceConfig(kubeCfg *kubeletconfiginternal.KubeletConfiguration, ku // PreInitRuntimeService will init runtime service before RunKubelet. func PreInitRuntimeService(kubeCfg *kubeletconfiginternal.KubeletConfiguration, kubeDeps *Dependencies) error { + remoteImageEndpoint := kubeCfg.ImageServiceEndpoint + if remoteImageEndpoint == "" && kubeCfg.ContainerRuntimeEndpoint != "" { + remoteImageEndpoint = kubeCfg.ContainerRuntimeEndpoint + } var err error if kubeDeps.RemoteRuntimeService, err = remote.NewRemoteRuntimeService(kubeCfg.ContainerRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider); err != nil { return err } - if kubeDeps.RemoteImageService, err = remote.NewRemoteImageService(kubeCfg.ImageServiceEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider); err != nil { + if kubeDeps.RemoteImageService, err = remote.NewRemoteImageService(remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout.Duration, kubeDeps.TracerProvider); err != nil { return err } diff --git a/staging/src/k8s.io/kubelet/config/v1beta1/types.go b/staging/src/k8s.io/kubelet/config/v1beta1/types.go index d73dcddd655..79bca2b3459 100644 --- a/staging/src/k8s.io/kubelet/config/v1beta1/types.go +++ b/staging/src/k8s.io/kubelet/config/v1beta1/types.go @@ -805,12 +805,14 @@ type KubeletConfiguration struct { LocalStorageCapacityIsolation *bool `json:"localStorageCapacityIsolation,omitempty"` // ContainerRuntimeEndpoint is the endpoint of container runtime. - // unix domain sockets supported on Linux while npipes and tcp endpoints are supported for windows. - // Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime + // Unix Domain Sockets are supported on Linux, while npipe and tcp endpoints are supported on Windows. + // Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime' ContainerRuntimeEndpoint string `json:"containerRuntimeEndpoint"` // ImageServiceEndpoint is the endpoint of container image service. - // If not specified the default value is ContainerRuntimeEndpoint + // Unix Domain Socket are supported on Linux, while npipe and tcp endpoints are supported on Windows. + // Examples:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime'. + // If not specified, the value in containerRuntimeEndpoint is used. // +optional ImageServiceEndpoint string `json:"imageServiceEndpoint,omitempty"` }