diff --git a/test/e2e_node/services/kubelet.go b/test/e2e_node/services/kubelet.go index 073b395413a..9e321aba470 100644 --- a/test/e2e_node/services/kubelet.go +++ b/test/e2e_node/services/kubelet.go @@ -198,6 +198,7 @@ func (e *E2EServices) startKubelet(featureGates map[string]bool) (*server, error var killCommand, restartCommand *exec.Cmd var isSystemd bool + var unitName string // Apply default kubelet flags. cmdArgs := []string{} if systemdRun, err := exec.LookPath("systemd-run"); err == nil { @@ -226,7 +227,7 @@ func (e *E2EServices) startKubelet(featureGates map[string]bool) (*server, error cwd, _ := os.Getwd() // Use the timestamp from the current directory to name the systemd unit. unitTimestamp := remote.GetTimestampFromWorkspaceDir(cwd) - unitName := fmt.Sprintf("kubelet-%s.service", unitTimestamp) + unitName = fmt.Sprintf("kubelet-%s.service", unitTimestamp) cmdArgs = append(cmdArgs, systemdRun, "-p", "Delegate=true", @@ -299,7 +300,8 @@ func (e *E2EServices) startKubelet(featureGates map[string]bool) (*server, error []string{kubeletHealthCheckURL}, "kubelet.log", e.monitorParent, - restartOnExit) + restartOnExit, + unitName) return server, server.start() } diff --git a/test/e2e_node/services/server.go b/test/e2e_node/services/server.go index eb7be9aa254..8a79d5a1ffb 100644 --- a/test/e2e_node/services/server.go +++ b/test/e2e_node/services/server.go @@ -64,11 +64,13 @@ type server struct { stopRestartingCh chan<- bool // Read from this to confirm that the restart loop has stopped. ackStopRestartingCh <-chan bool + // The systemd unit name for the service if it exists. If server is not managed by systemd, field is empty. + systemdUnitName string } // newServer returns a new server with the given name, commands, health check // URLs, etc. -func newServer(name string, start, kill, restart *exec.Cmd, urls []string, outputFileName string, monitorParent, restartOnExit bool) *server { +func newServer(name string, start, kill, restart *exec.Cmd, urls []string, outputFileName string, monitorParent, restartOnExit bool, systemdUnitName string) *server { return &server{ name: name, startCommand: start, @@ -78,6 +80,7 @@ func newServer(name string, start, kill, restart *exec.Cmd, urls []string, outpu outFilename: outputFileName, monitorParent: monitorParent, restartOnExit: restartOnExit, + systemdUnitName: systemdUnitName, } } @@ -313,3 +316,14 @@ func (s *server) kill() error { return fmt.Errorf("unable to stop %q", name) } + +func (s *server) stopUnit() error { + klog.Infof("Stopping systemd unit for server %q with unit name: %q", s.name, s.systemdUnitName) + if s.systemdUnitName != "" { + err := exec.Command("sudo", "systemctl", "stop", s.systemdUnitName).Run() + if err != nil { + return fmt.Errorf("Failed to stop systemd unit name: %q: %v", s.systemdUnitName, err) + } + } + return nil +} diff --git a/test/e2e_node/services/services.go b/test/e2e_node/services/services.go index f2a111137d7..c4aad367721 100644 --- a/test/e2e_node/services/services.go +++ b/test/e2e_node/services/services.go @@ -95,7 +95,11 @@ func (e *E2EServices) Stop() { } if e.kubelet != nil { if err := e.kubelet.kill(); err != nil { - klog.Errorf("Failed to stop kubelet: %v", err) + klog.Errorf("Failed to kill kubelet: %v", err) + } + // Stop the kubelet systemd unit which will delete the kubelet transient unit. + if err := e.kubelet.stopUnit(); err != nil { + klog.Errorf("Failed to stop kubelet systemd unit: %v", err) } } for _, d := range e.rmDirs { @@ -134,7 +138,7 @@ func (e *E2EServices) startInternalServices() (*server, error) { []string{"--run-services-mode", fmt.Sprintf("--bearer-token=%s", framework.TestContext.BearerToken)}, os.Args[1:]..., )...) - server := newServer("services", startCmd, nil, nil, getServicesHealthCheckURLs(), servicesLogFile, e.monitorParent, false) + server := newServer("services", startCmd, nil, nil, getServicesHealthCheckURLs(), servicesLogFile, e.monitorParent, false, "") return server, server.start() }