Merge pull request #70494 from RenaudWasTaken/pluginwatcher

Ignore non socket files in the kubelet plugin watcher
This commit is contained in:
k8s-ci-robot 2018-11-16 22:46:42 -08:00 committed by GitHub
commit e3420cc46f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 33 additions and 13 deletions

View File

@ -21,6 +21,7 @@ const (
DefaultKubeletVolumesDirName = "volumes" DefaultKubeletVolumesDirName = "volumes"
DefaultKubeletVolumeDevicesDirName = "volumeDevices" DefaultKubeletVolumeDevicesDirName = "volumeDevices"
DefaultKubeletPluginsDirName = "plugins" DefaultKubeletPluginsDirName = "plugins"
DefaultKubeletPluginsRegistrationDirName = "plugins_registry"
DefaultKubeletContainersDirName = "containers" DefaultKubeletContainersDirName = "containers"
DefaultKubeletPluginContainersDirName = "plugin-containers" DefaultKubeletPluginContainersDirName = "plugin-containers"
DefaultKubeletPodResourcesDirName = "pod-resources" DefaultKubeletPodResourcesDirName = "pod-resources"

View File

@ -789,7 +789,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
return nil, err return nil, err
} }
if klet.enablePluginsWatcher { if klet.enablePluginsWatcher {
klet.pluginWatcher = pluginwatcher.NewWatcher(klet.getPluginsDir()) klet.pluginWatcher = pluginwatcher.NewWatcher(klet.getPluginsRegistrationDir())
} }
// If the experimentalMounterPathFlag is set, we do not want to // If the experimentalMounterPathFlag is set, we do not want to
@ -1260,6 +1260,9 @@ func (kl *Kubelet) setupDataDirs() error {
if err := os.MkdirAll(kl.getPluginsDir(), 0750); err != nil { if err := os.MkdirAll(kl.getPluginsDir(), 0750); err != nil {
return fmt.Errorf("error creating plugins directory: %v", err) return fmt.Errorf("error creating plugins directory: %v", err)
} }
if err := os.MkdirAll(kl.getPluginsRegistrationDir(), 0750); err != nil {
return fmt.Errorf("error creating plugins registry directory: %v", err)
}
if err := os.MkdirAll(kl.getPodResourcesDir(), 0750); err != nil { if err := os.MkdirAll(kl.getPodResourcesDir(), 0750); err != nil {
return fmt.Errorf("error creating podresources directory: %v", err) return fmt.Errorf("error creating podresources directory: %v", err)
} }

View File

@ -57,6 +57,14 @@ func (kl *Kubelet) getPluginsDir() string {
return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsDirName) return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsDirName)
} }
// getPluginsRegistrationDir returns the full path to the directory under which
// plugins socket should be placed to be registered.
// More information is available about plugin registration in the pluginwatcher
// module
func (kl *Kubelet) getPluginsRegistrationDir() string {
return filepath.Join(kl.getRootDir(), config.DefaultKubeletPluginsRegistrationDirName)
}
// getPluginDir returns a data directory name for a given plugin name. // getPluginDir returns a data directory name for a given plugin name.
// Plugins can use these directories to store data that they need to persist. // Plugins can use these directories to store data that they need to persist.
// For per-pod plugin data, see getPodPluginDir. // For per-pod plugin data, see getPodPluginDir.

View File

@ -211,6 +211,8 @@ func (w *Watcher) traversePluginDir(dir string) error {
} }
// Handle filesystem notify event. // Handle filesystem notify event.
// Files names:
// - MUST NOT start with a '.'
func (w *Watcher) handleCreateEvent(event fsnotify.Event) error { func (w *Watcher) handleCreateEvent(event fsnotify.Event) error {
klog.V(6).Infof("Handling create event: %v", event) klog.V(6).Infof("Handling create event: %v", event)
@ -220,11 +222,16 @@ func (w *Watcher) handleCreateEvent(event fsnotify.Event) error {
} }
if strings.HasPrefix(fi.Name(), ".") { if strings.HasPrefix(fi.Name(), ".") {
klog.Errorf("Ignoring file: %s", fi.Name()) klog.V(5).Infof("Ignoring file (starts with '.'): %s", fi.Name())
return nil return nil
} }
if !fi.IsDir() { if !fi.IsDir() {
if fi.Mode()&os.ModeSocket == 0 {
klog.V(5).Infof("Ignoring non socket file %s", fi.Name())
return nil
}
return w.handlePluginRegistration(event.Name) return w.handlePluginRegistration(event.Name)
} }
@ -290,7 +297,8 @@ func (w *Watcher) handleDeleteEvent(event fsnotify.Event) error {
plugin, ok := w.getPlugin(event.Name) plugin, ok := w.getPlugin(event.Name)
if !ok { if !ok {
return fmt.Errorf("could not find plugin for deleted file %s", event.Name) klog.V(5).Infof("could not find plugin for deleted file %s", event.Name)
return nil
} }
// You should not get a Deregister call while registering a plugin // You should not get a Deregister call while registering a plugin

View File

@ -60,7 +60,7 @@ spec:
volumes: volumes:
- name: registration-dir - name: registration-dir
hostPath: hostPath:
path: /var/lib/kubelet/plugins/ path: /var/lib/kubelet/plugins_registry/
type: Directory type: Directory
- name: kubelet-dir - name: kubelet-dir
hostPath: hostPath:

View File

@ -65,6 +65,6 @@ spec:
type: DirectoryOrCreate type: DirectoryOrCreate
name: mountpoint-dir name: mountpoint-dir
- hostPath: - hostPath:
path: /var/lib/kubelet/plugins path: /var/lib/kubelet/plugins_registry
type: Directory type: Directory
name: registration-dir name: registration-dir

View File

@ -53,7 +53,7 @@ var _ = framework.KubeDescribe("Device Plugin [Feature:DevicePlugin][NodeFeature
var _ = framework.KubeDescribe("Device Plugin [Feature:DevicePluginProbe][NodeFeature:DevicePluginProbe][Serial]", func() { var _ = framework.KubeDescribe("Device Plugin [Feature:DevicePluginProbe][NodeFeature:DevicePluginProbe][Serial]", func() {
f := framework.NewDefaultFramework("device-plugin-errors") f := framework.NewDefaultFramework("device-plugin-errors")
testDevicePlugin(f, true, "/var/lib/kubelet/plugins/") testDevicePlugin(f, true, "/var/lib/kubelet/plugins_registry")
}) })
func testDevicePlugin(f *framework.Framework, enablePluginWatcher bool, pluginSockDir string) { func testDevicePlugin(f *framework.Framework, enablePluginWatcher bool, pluginSockDir string) {