From ff6f4e1f633a69111911b960076a0d1ba65a627e Mon Sep 17 00:00:00 2001 From: Tim Allclair Date: Wed, 31 Jan 2024 16:15:03 -0800 Subject: [PATCH 1/2] Move kubelet config code to kubeletconfig --- cmd/kubelet/app/options/options.go | 20 ++++++------- cmd/kubelet/app/options/options_test.go | 4 +-- .../cm/devicemanager/plugin/v1beta1/server.go | 4 +-- pkg/kubelet/kubelet.go | 7 +++-- pkg/kubelet/kubelet_getters.go | 30 +++++++++---------- pkg/kubelet/kubelet_test.go | 3 +- .../{config => kubeletconfig}/defaults.go | 2 +- .../{config => kubeletconfig}/flags.go | 2 +- .../reconciler/reconstruct_common.go | 6 ++-- pkg/volume/hostpath/host_path.go | 4 +-- pkg/volume/iscsi/iscsi_util.go | 4 +-- pkg/volume/iscsi/iscsi_util_test.go | 8 ++--- 12 files changed, 48 insertions(+), 46 deletions(-) rename pkg/kubelet/{config => kubeletconfig}/defaults.go (98%) rename pkg/kubelet/{config => kubeletconfig}/flags.go (99%) diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 8bcadbd90e315..6d446e1babad2 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -34,10 +34,10 @@ import ( "k8s.io/kubelet/config/v1beta1" kubeletapis "k8s.io/kubelet/pkg/apis" "k8s.io/kubernetes/pkg/cluster/ports" - kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" + kubeletconfigapi "k8s.io/kubernetes/pkg/kubelet/apis/config" kubeletscheme "k8s.io/kubernetes/pkg/kubelet/apis/config/scheme" kubeletconfigvalidation "k8s.io/kubernetes/pkg/kubelet/apis/config/validation" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" utilflag "k8s.io/kubernetes/pkg/util/flag" ) @@ -63,7 +63,7 @@ type KubeletFlags struct { NodeIP string // Container-runtime-specific options. - config.ContainerRuntimeOptions + kubeletconfig.ContainerRuntimeOptions // certDirectory is the directory where the TLS certs are located. // If tlsCertFile and tlsPrivateKeyFile are provided, this flag will be ignored. @@ -134,7 +134,7 @@ type KubeletFlags struct { // NewKubeletFlags will create a new KubeletFlags with default values func NewKubeletFlags() *KubeletFlags { return &KubeletFlags{ - ContainerRuntimeOptions: config.ContainerRuntimeOptions{}, + ContainerRuntimeOptions: kubeletconfig.ContainerRuntimeOptions{}, CertDirectory: "/var/lib/kubelet/pki", RootDirectory: filepath.Clean(defaultRootDir), MaxContainerCount: -1, @@ -192,14 +192,14 @@ func getLabelNamespace(key string) string { } // NewKubeletConfiguration will create a new KubeletConfiguration with default values -func NewKubeletConfiguration() (*kubeletconfig.KubeletConfiguration, error) { +func NewKubeletConfiguration() (*kubeletconfigapi.KubeletConfiguration, error) { scheme, _, err := kubeletscheme.NewSchemeAndCodecs() if err != nil { return nil, err } versioned := &v1beta1.KubeletConfiguration{} scheme.Default(versioned) - config := &kubeletconfig.KubeletConfiguration{} + config := &kubeletconfigapi.KubeletConfiguration{} if err := scheme.Convert(versioned, config, nil); err != nil { return nil, err } @@ -210,13 +210,13 @@ func NewKubeletConfiguration() (*kubeletconfig.KubeletConfiguration, error) { // applyLegacyDefaults applies legacy default values to the KubeletConfiguration in order to // preserve the command line API. This is used to construct the baseline default KubeletConfiguration // before the first round of flag parsing. -func applyLegacyDefaults(kc *kubeletconfig.KubeletConfiguration) { +func applyLegacyDefaults(kc *kubeletconfigapi.KubeletConfiguration) { // --anonymous-auth kc.Authentication.Anonymous.Enabled = true // --authentication-token-webhook kc.Authentication.Webhook.Enabled = false // --authorization-mode - kc.Authorization.Mode = kubeletconfig.KubeletAuthorizationModeAlwaysAllow + kc.Authorization.Mode = kubeletconfigapi.KubeletAuthorizationModeAlwaysAllow // --read-only-port kc.ReadOnlyPort = ports.KubeletReadOnlyPort } @@ -225,7 +225,7 @@ func applyLegacyDefaults(kc *kubeletconfig.KubeletConfiguration) { // a kubelet. These can either be set via command line or directly. type KubeletServer struct { KubeletFlags - kubeletconfig.KubeletConfiguration + kubeletconfigapi.KubeletConfiguration } // NewKubeletServer will create a new KubeletServer with default values. @@ -318,7 +318,7 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { } // AddKubeletConfigFlags adds flags for a specific kubeletconfig.KubeletConfiguration to the specified FlagSet -func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfig.KubeletConfiguration) { +func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfigapi.KubeletConfiguration) { fs := pflag.NewFlagSet("", pflag.ExitOnError) defer func() { // All KubeletConfiguration flags are now deprecated, and any new flags that point to diff --git a/cmd/kubelet/app/options/options_test.go b/cmd/kubelet/app/options/options_test.go index 3ec297cd17272..a229d812d5690 100644 --- a/cmd/kubelet/app/options/options_test.go +++ b/cmd/kubelet/app/options/options_test.go @@ -25,7 +25,7 @@ import ( "github.com/spf13/pflag" cliflag "k8s.io/component-base/cli/flag" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" ) func newKubeletServerOrDie() *KubeletServer { @@ -179,7 +179,7 @@ func TestValidateKubeletFlags(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := ValidateKubeletFlags(&KubeletFlags{ - ContainerRuntimeOptions: config.ContainerRuntimeOptions{}, + ContainerRuntimeOptions: kubeletconfig.ContainerRuntimeOptions{}, NodeLabels: tt.labels, }) diff --git a/pkg/kubelet/cm/devicemanager/plugin/v1beta1/server.go b/pkg/kubelet/cm/devicemanager/plugin/v1beta1/server.go index 56a379553e144..66c6d3777e127 100644 --- a/pkg/kubelet/cm/devicemanager/plugin/v1beta1/server.go +++ b/pkg/kubelet/cm/devicemanager/plugin/v1beta1/server.go @@ -33,7 +33,7 @@ import ( "k8s.io/klog/v2" api "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/pluginmanager/cache" ) @@ -92,7 +92,7 @@ func (s *server) Start() error { } if selinux.GetEnabled() { - if err := selinux.SetFileLabel(s.socketDir, config.KubeletPluginsDirSELinuxLabel); err != nil { + if err := selinux.SetFileLabel(s.socketDir, kubeletconfig.KubeletPluginsDirSELinuxLabel); err != nil { klog.ErrorS(err, "Unprivileged containerized plugins might not work. Could not set selinux context on socket dir", "path", s.socketDir) } } diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 600a006f0541e..56f91823a84ee 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -95,6 +95,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/images" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/kuberuntime" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/logs" @@ -415,7 +416,7 @@ func PreInitRuntimeService(kubeCfg *kubeletconfiginternal.KubeletConfiguration, func NewMainKubelet(ctx context.Context, kubeCfg *kubeletconfiginternal.KubeletConfiguration, kubeDeps *Dependencies, - crOptions *config.ContainerRuntimeOptions, + crOptions *kubeletconfig.ContainerRuntimeOptions, hostname string, nodeName types.NodeName, nodeIPs []net.IP, @@ -1562,11 +1563,11 @@ func (kl *Kubelet) setupDataDirs() error { } } if selinux.GetEnabled() { - err := selinux.SetFileLabel(pluginRegistrationDir, config.KubeletPluginsDirSELinuxLabel) + err := selinux.SetFileLabel(pluginRegistrationDir, kubeletconfig.KubeletPluginsDirSELinuxLabel) if err != nil { klog.InfoS("Unprivileged containerized plugins might not work, could not set selinux context on plugin registration dir", "path", pluginRegistrationDir, "err", err) } - err = selinux.SetFileLabel(pluginsDir, config.KubeletPluginsDirSELinuxLabel) + err = selinux.SetFileLabel(pluginsDir, kubeletconfig.KubeletPluginsDirSELinuxLabel) if err != nil { klog.InfoS("Unprivileged containerized plugins might not work, could not set selinux context on plugins dir", "path", pluginsDir, "err", err) } diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index 87b7aac502966..7858fb443d002 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -33,8 +33,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/kubelet/cm" - "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" utilnode "k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/volume/csi" @@ -58,7 +58,7 @@ func (kl *Kubelet) getPodLogsDir() string { // getPodsDir returns the full path to the directory under which pod // directories are created. func (kl *Kubelet) getPodsDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletPodsDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletPodsDirName) } // getPluginsDir returns the full path to the directory under which plugin @@ -66,7 +66,7 @@ func (kl *Kubelet) getPodsDir() string { // they need to persist. Plugins should create subdirectories under this named // after their own names. func (kl *Kubelet) getPluginsDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletPluginsDirName) } // getPluginsRegistrationDir returns the full path to the directory under which @@ -74,7 +74,7 @@ func (kl *Kubelet) getPluginsDir() string { // More information is available about plugin registration in the pluginwatcher // module func (kl *Kubelet) getPluginsRegistrationDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsRegistrationDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletPluginsRegistrationDirName) } // getPluginDir returns a data directory name for a given plugin name. @@ -87,7 +87,7 @@ func (kl *Kubelet) getPluginDir(pluginName string) string { // getCheckpointsDir returns a data directory name for checkpoints. // Checkpoints can be stored in this directory for further use. func (kl *Kubelet) getCheckpointsDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletCheckpointsDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletCheckpointsDirName) } // getVolumeDevicePluginsDir returns the full path to the directory under which plugin @@ -95,14 +95,14 @@ func (kl *Kubelet) getCheckpointsDir() string { // they need to persist. Plugins should create subdirectories under this named // after their own names. func (kl *Kubelet) getVolumeDevicePluginsDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletPluginsDirName) } // getVolumeDevicePluginDir returns a data directory name for a given plugin name. // Plugins can use these directories to store data that they need to persist. // For per-pod plugin data, see getVolumeDevicePluginsDir. func (kl *Kubelet) getVolumeDevicePluginDir(pluginName string) string { - return filepath.Join(kl.getVolumeDevicePluginsDir(), pluginName, config.DefaultKubeletVolumeDevicesDirName) + return filepath.Join(kl.getVolumeDevicePluginsDir(), pluginName, kubeletconfig.DefaultKubeletVolumeDevicesDirName) } // GetPodDir returns the full path to the per-pod data directory for the @@ -144,11 +144,11 @@ func (kl *Kubelet) GetMaxPods() int { func (kl *Kubelet) GetUserNamespacesIDsPerPod() uint32 { userNs := kl.kubeletConfiguration.UserNamespaces if userNs == nil { - return config.DefaultKubeletUserNamespacesIDsPerPod + return kubeletconfig.DefaultKubeletUserNamespacesIDsPerPod } idsPerPod := userNs.IDsPerPod if idsPerPod == nil || *idsPerPod == 0 { - return config.DefaultKubeletUserNamespacesIDsPerPod + return kubeletconfig.DefaultKubeletUserNamespacesIDsPerPod } // The value is already validated to be <= MaxUint32, // so we can safely drop the upper bits. @@ -165,14 +165,14 @@ func (kl *Kubelet) getPodDir(podUID types.UID) string { // which subpath volumes are created for the specified pod. This directory may not // exist if the pod does not exist or subpaths are not specified. func (kl *Kubelet) getPodVolumeSubpathsDir(podUID types.UID) string { - return filepath.Join(kl.getPodDir(podUID), config.DefaultKubeletVolumeSubpathsDirName) + return filepath.Join(kl.getPodDir(podUID), kubeletconfig.DefaultKubeletVolumeSubpathsDirName) } // getPodVolumesDir returns the full path to the per-pod data directory under // which volumes are created for the specified pod. This directory may not // exist if the pod does not exist. func (kl *Kubelet) getPodVolumesDir(podUID types.UID) string { - return filepath.Join(kl.getPodDir(podUID), config.DefaultKubeletVolumesDirName) + return filepath.Join(kl.getPodDir(podUID), kubeletconfig.DefaultKubeletVolumesDirName) } // getPodVolumeDir returns the full path to the directory which represents the @@ -186,7 +186,7 @@ func (kl *Kubelet) getPodVolumeDir(podUID types.UID, pluginName string, volumeNa // which volumes are created for the specified pod. This directory may not // exist if the pod does not exist. func (kl *Kubelet) getPodVolumeDevicesDir(podUID types.UID) string { - return filepath.Join(kl.getPodDir(podUID), config.DefaultKubeletVolumeDevicesDirName) + return filepath.Join(kl.getPodDir(podUID), kubeletconfig.DefaultKubeletVolumeDevicesDirName) } // getPodVolumeDeviceDir returns the full path to the directory which represents the @@ -199,7 +199,7 @@ func (kl *Kubelet) getPodVolumeDeviceDir(podUID types.UID, pluginName string) st // which plugins may store data for the specified pod. This directory may not // exist if the pod does not exist. func (kl *Kubelet) getPodPluginsDir(podUID types.UID) string { - return filepath.Join(kl.getPodDir(podUID), config.DefaultKubeletPluginsDirName) + return filepath.Join(kl.getPodDir(podUID), kubeletconfig.DefaultKubeletPluginsDirName) } // getPodPluginDir returns a data directory name for a given plugin name for a @@ -213,12 +213,12 @@ func (kl *Kubelet) getPodPluginDir(podUID types.UID, pluginName string) string { // which container data is held for the specified pod. This directory may not // exist if the pod or container does not exist. func (kl *Kubelet) getPodContainerDir(podUID types.UID, ctrName string) string { - return filepath.Join(kl.getPodDir(podUID), config.DefaultKubeletContainersDirName, ctrName) + return filepath.Join(kl.getPodDir(podUID), kubeletconfig.DefaultKubeletContainersDirName, ctrName) } // getPodResourcesSocket returns the full path to the directory containing the pod resources socket func (kl *Kubelet) getPodResourcesDir() string { - return filepath.Join(kl.getRootDir(), config.DefaultKubeletPodResourcesDirName) + return filepath.Join(kl.getRootDir(), kubeletconfig.DefaultKubeletPodResourcesDirName) } // GetPods returns all pods bound to the kubelet and their spec, and the mirror diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 7746458001108..bd116665e255e 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -79,6 +79,7 @@ import ( containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/images" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/kuberuntime" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/logs" @@ -3209,7 +3210,7 @@ func TestNewMainKubeletStandAlone(t *testing.T) { DynamicPluginProber: prober, TLSOptions: tlsOptions, } - crOptions := &config.ContainerRuntimeOptions{} + crOptions := &kubeletconfig.ContainerRuntimeOptions{} testMainKubelet, err := NewMainKubelet( tCtx, diff --git a/pkg/kubelet/config/defaults.go b/pkg/kubelet/kubeletconfig/defaults.go similarity index 98% rename from pkg/kubelet/config/defaults.go rename to pkg/kubelet/kubeletconfig/defaults.go index b8788f9e431a9..7f4577ab15dba 100644 --- a/pkg/kubelet/config/defaults.go +++ b/pkg/kubelet/kubeletconfig/defaults.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package config +package kubeletconfig // Defines sane defaults for the kubelet config. const ( diff --git a/pkg/kubelet/config/flags.go b/pkg/kubelet/kubeletconfig/flags.go similarity index 99% rename from pkg/kubelet/config/flags.go rename to pkg/kubelet/kubeletconfig/flags.go index 27473ba7862ac..758dcb4c64dd6 100644 --- a/pkg/kubelet/config/flags.go +++ b/pkg/kubelet/kubeletconfig/flags.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package config +package kubeletconfig import ( "github.com/spf13/pflag" diff --git a/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go b/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go index d685a3de00439..7c7f92b570faf 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go +++ b/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go @@ -28,7 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/volumemanager/metrics" volumepkg "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" @@ -210,11 +210,11 @@ func getVolumesFromPodDir(logger klog.Logger, podDir string) ([]podVolume, error // Find filesystem volume information // ex. filesystem volume: /pods/{podUid}/volumes/{escapeQualifiedPluginName}/{volumeName} volumesDirs := map[v1.PersistentVolumeMode]string{ - v1.PersistentVolumeFilesystem: filepath.Join(podDir, config.DefaultKubeletVolumesDirName), + v1.PersistentVolumeFilesystem: filepath.Join(podDir, kubeletconfig.DefaultKubeletVolumesDirName), } // Find block volume information // ex. block volume: /pods/{podUid}/volumeDevices/{escapeQualifiedPluginName}/{volumeName} - volumesDirs[v1.PersistentVolumeBlock] = filepath.Join(podDir, config.DefaultKubeletVolumeDevicesDirName) + volumesDirs[v1.PersistentVolumeBlock] = filepath.Join(podDir, kubeletconfig.DefaultKubeletVolumeDevicesDirName) for volumeMode, volumesDir := range volumesDirs { var volumesDirInfo []fs.DirEntry diff --git a/pkg/volume/hostpath/host_path.go b/pkg/volume/hostpath/host_path.go index bdc3a3e623bfd..b167c932a185d 100644 --- a/pkg/volume/hostpath/host_path.go +++ b/pkg/volume/hostpath/host_path.go @@ -29,7 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/hostutil" @@ -326,7 +326,7 @@ func (r *hostPathProvisioner) Provision(selectedNode *v1.Node, allowedTopologies return nil, err } if selinux.GetEnabled() { - err := selinux.SetFileLabel(pv.Spec.HostPath.Path, config.KubeletContainersSharedSELinuxLabel) + err := selinux.SetFileLabel(pv.Spec.HostPath.Path, kubeletconfig.KubeletContainersSharedSELinuxLabel) if err != nil { return nil, fmt.Errorf("failed to set selinux label for %q: %v", pv.Spec.HostPath.Path, err) } diff --git a/pkg/volume/iscsi/iscsi_util.go b/pkg/volume/iscsi/iscsi_util.go index b51127aa92f96..c876164feda06 100644 --- a/pkg/volume/iscsi/iscsi_util.go +++ b/pkg/volume/iscsi/iscsi_util.go @@ -34,7 +34,7 @@ import ( utilexec "k8s.io/utils/exec" v1 "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util/types" @@ -939,7 +939,7 @@ func getVolCount(dir, portal, iqn string) (int, error) { // portal + iqn, e.g., 127.0.0.1:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-2 var counter int for _, c := range contents { - if !c.IsDir() || c.Name() == config.DefaultKubeletVolumeDevicesDirName { + if !c.IsDir() || c.Name() == kubeletconfig.DefaultKubeletVolumeDevicesDirName { continue } diff --git a/pkg/volume/iscsi/iscsi_util_test.go b/pkg/volume/iscsi/iscsi_util_test.go index 7ab361a41795d..4d3906b509faf 100644 --- a/pkg/volume/iscsi/iscsi_util_test.go +++ b/pkg/volume/iscsi/iscsi_util_test.go @@ -28,7 +28,7 @@ import ( testingexec "k8s.io/utils/exec/testing" - "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/volume" volumetest "k8s.io/kubernetes/pkg/volume/testing" ) @@ -414,7 +414,7 @@ func TestGetVolCount(t *testing.T) { }, { name: "volumeDevices (block) volume", - baseDir: filepath.Join(baseDir, config.DefaultKubeletVolumeDevicesDirName), + baseDir: filepath.Join(baseDir, kubeletconfig.DefaultKubeletVolumeDevicesDirName), portal: "192.168.0.2:3260", iqn: "iqn.2003-01.io.k8s:e2e.volume-1-lun-4", count: 1, @@ -451,8 +451,8 @@ func createFakePluginDirs() (string, error) { "iface-127.0.0.1:3260:pv1/127.0.0.1:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-3", "iface-127.0.0.1:3260:pv2/127.0.0.1:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-2", "iface-127.0.0.1:3260:pv2/192.168.0.1:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-1", - filepath.Join(config.DefaultKubeletVolumeDevicesDirName, "iface-127.0.0.1:3260/192.168.0.2:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-4"), - filepath.Join(config.DefaultKubeletVolumeDevicesDirName, "iface-127.0.0.1:3260/192.168.0.3:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-5"), + filepath.Join(kubeletconfig.DefaultKubeletVolumeDevicesDirName, "iface-127.0.0.1:3260/192.168.0.2:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-4"), + filepath.Join(kubeletconfig.DefaultKubeletVolumeDevicesDirName, "iface-127.0.0.1:3260/192.168.0.3:3260-iqn.2003-01.io.k8s:e2e.volume-1-lun-5"), } for _, d := range subdirs { From bd900111a8eb9ca4302c95c24d2a45c7311f2f7b Mon Sep 17 00:00:00 2001 From: Tim Allclair Date: Wed, 31 Jan 2024 16:21:18 -0800 Subject: [PATCH 2/2] Move ContainerRuntimeOptions flags to cmd/kubelet/app/options --- cmd/kubelet/app/options/options.go | 14 +++++++++++++- .../kubeletconfig/{flags.go => types.go} | 17 ----------------- 2 files changed, 13 insertions(+), 18 deletions(-) rename pkg/kubelet/kubeletconfig/{flags.go => types.go} (58%) diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 6d446e1babad2..8bc9f5becc421 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -273,7 +273,7 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { mainfs.AddFlagSet(fs) }() - f.ContainerRuntimeOptions.AddFlags(fs) + addContainerRuntimeFlags(fs, &f.ContainerRuntimeOptions) f.addOSFlags(fs) fs.StringVar(&f.KubeletConfigFile, "config", f.KubeletConfigFile, "The Kubelet will load its initial configuration from this file. The path may be absolute or relative; relative paths start at the Kubelet's current working directory. Omit this flag to use the built-in default configuration values. Command-line flags override configuration from this file.") @@ -317,6 +317,18 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) { fs.MarkDeprecated("experimental-allocatable-ignore-eviction", "will be removed in 1.25 or later.") } +// addContainerRuntimeFlags adds flags to the container runtime, according to ContainerRuntimeOptions. +func addContainerRuntimeFlags(fs *pflag.FlagSet, o *kubeletconfig.ContainerRuntimeOptions) { + // General settings. + fs.StringVar(&o.RuntimeCgroups, "runtime-cgroups", o.RuntimeCgroups, "Optional absolute name of cgroups to create and run the runtime in.") + _ = fs.String("pod-infra-container-image", "", "Specified image will not be pruned by the image garbage collector. CRI implementations have their own configuration to set this image.") + _ = fs.MarkDeprecated("pod-infra-container-image", "will be removed in 1.35. Image garbage collector will get sandbox image information from CRI.") + + // Image credential provider settings. + fs.StringVar(&o.ImageCredentialProviderConfigPath, "image-credential-provider-config", o.ImageCredentialProviderConfigPath, "Path to a credential provider plugin config file (JSON/YAML/YML) or a directory of such files (merged in lexicographical order; non-recursive search).") + fs.StringVar(&o.ImageCredentialProviderBinDir, "image-credential-provider-bin-dir", o.ImageCredentialProviderBinDir, "The path to the directory where credential provider plugin binaries are located.") +} + // AddKubeletConfigFlags adds flags for a specific kubeletconfig.KubeletConfiguration to the specified FlagSet func AddKubeletConfigFlags(mainfs *pflag.FlagSet, c *kubeletconfigapi.KubeletConfiguration) { fs := pflag.NewFlagSet("", pflag.ExitOnError) diff --git a/pkg/kubelet/kubeletconfig/flags.go b/pkg/kubelet/kubeletconfig/types.go similarity index 58% rename from pkg/kubelet/kubeletconfig/flags.go rename to pkg/kubelet/kubeletconfig/types.go index 758dcb4c64dd6..70b3e6054bc8f 100644 --- a/pkg/kubelet/kubeletconfig/flags.go +++ b/pkg/kubelet/kubeletconfig/types.go @@ -16,10 +16,6 @@ limitations under the License. package kubeletconfig -import ( - "github.com/spf13/pflag" -) - // ContainerRuntimeOptions defines options for the container runtime. type ContainerRuntimeOptions struct { // General Options. @@ -41,16 +37,3 @@ type ContainerRuntimeOptions struct { // +optional ImageCredentialProviderBinDir string } - -// AddFlags adds flags to the container runtime, according to ContainerRuntimeOptions. -func (s *ContainerRuntimeOptions) AddFlags(fs *pflag.FlagSet) { - var tmp string - // General settings. - fs.StringVar(&s.RuntimeCgroups, "runtime-cgroups", s.RuntimeCgroups, "Optional absolute name of cgroups to create and run the runtime in.") - fs.StringVar(&tmp, "pod-infra-container-image", "", "Specified image will not be pruned by the image garbage collector. CRI implementations have their own configuration to set this image.") - _ = fs.MarkDeprecated("pod-infra-container-image", "will be removed in 1.35. Image garbage collector will get sandbox image information from CRI.") - - // Image credential provider settings. - fs.StringVar(&s.ImageCredentialProviderConfigPath, "image-credential-provider-config", s.ImageCredentialProviderConfigPath, "Path to a credential provider plugin config file (JSON/YAML/YML) or a directory of such files (merged in lexicographical order; non-recursive search).") - fs.StringVar(&s.ImageCredentialProviderBinDir, "image-credential-provider-bin-dir", s.ImageCredentialProviderBinDir, "The path to the directory where credential provider plugin binaries are located.") -}