m/n/k8s: fix start after unclean shutdown

Both the kvmdevice as well as the CSI runnables listen on Unix sockets.
These are normally removed on close (this is actually the default for
sockets opened wiht ListenUnix, thus drop setting this), but when an
unclean shutdown occurs they persist. Since one cannot listen on an
already-existing socket, opportunistically remove them before listening.

Change-Id: I11d986a2816fde3d7ffef0817ae3bbf39bba4faf
Reviewed-on: https://review.monogon.dev/c/monogon/+/1867
Tested-by: Jenkins CI
Reviewed-by: Leopold Schabel <leo@monogon.tech>
diff --git a/metropolis/node/kubernetes/csi.go b/metropolis/node/kubernetes/csi.go
index 4893254..d180b86 100644
--- a/metropolis/node/kubernetes/csi.go
+++ b/metropolis/node/kubernetes/csi.go
@@ -56,11 +56,13 @@
 func (s *csiPluginServer) Run(ctx context.Context) error {
 	s.logger = supervisor.Logger(ctx)
 
+	// Try to remove socket if an unclean shutdown happened.
+	os.Remove(s.KubeletDirectory.Plugins.VFS.FullPath())
+
 	pluginListener, err := net.ListenUnix("unix", &net.UnixAddr{Name: s.KubeletDirectory.Plugins.VFS.FullPath(), Net: "unix"})
 	if err != nil {
 		return fmt.Errorf("failed to listen on CSI socket: %w", err)
 	}
-	pluginListener.SetUnlinkOnClose(true)
 
 	pluginServer := grpc.NewServer()
 	csi.RegisterIdentityServer(pluginServer, s)
@@ -71,11 +73,13 @@
 		return err
 	}
 
+	// Try to remove socket if an unclean shutdown happened
+	os.Remove(s.KubeletDirectory.PluginsRegistry.VFSReg.FullPath())
+
 	registrationListener, err := net.ListenUnix("unix", &net.UnixAddr{Name: s.KubeletDirectory.PluginsRegistry.VFSReg.FullPath(), Net: "unix"})
 	if err != nil {
 		return fmt.Errorf("failed to listen on CSI registration socket: %w", err)
 	}
-	registrationListener.SetUnlinkOnClose(true)
 
 	registrationServer := grpc.NewServer()
 	pluginregistration.RegisterRegistrationServer(registrationServer, s)
diff --git a/metropolis/node/kubernetes/plugins/kvmdevice/kvmdevice.go b/metropolis/node/kubernetes/plugins/kvmdevice/kvmdevice.go
index c9a6a79..a6d4657 100644
--- a/metropolis/node/kubernetes/plugins/kvmdevice/kvmdevice.go
+++ b/metropolis/node/kubernetes/plugins/kvmdevice/kvmdevice.go
@@ -162,11 +162,13 @@
 		return fmt.Errorf("failed to create KVM device node: %v", err)
 	}
 
+	// Try to remove socket if an unclean shutdown happened
+	os.Remove(k.KubeletDirectory.Plugins.KVM.FullPath())
+
 	pluginListener, err := net.ListenUnix("unix", &net.UnixAddr{Name: k.KubeletDirectory.Plugins.KVM.FullPath(), Net: "unix"})
 	if err != nil {
 		return fmt.Errorf("failed to listen on device plugin socket: %w", err)
 	}
-	pluginListener.SetUnlinkOnClose(true)
 
 	pluginServer := grpc.NewServer()
 	deviceplugin.RegisterDevicePluginServer(pluginServer, k)
@@ -174,11 +176,13 @@
 		return err
 	}
 
+	// Try to remove socket if an unclean shutdown happened
+	os.Remove(k.KubeletDirectory.PluginsRegistry.KVMReg.FullPath())
+
 	registrationListener, err := net.ListenUnix("unix", &net.UnixAddr{Name: k.KubeletDirectory.PluginsRegistry.KVMReg.FullPath(), Net: "unix"})
 	if err != nil {
 		return fmt.Errorf("failed to listen on registration socket: %w", err)
 	}
-	registrationListener.SetUnlinkOnClose(true)
 
 	registrationServer := grpc.NewServer()
 	pluginregistration.RegisterRegistrationServer(registrationServer, k)