AppManager: Uninstall k3s from the last server without draining it

Change-Id: If824b95875ce9e4114a1c5d9b354b1935e566b52
diff --git a/core/installer/cluster/kube.go b/core/installer/cluster/kube.go
index 11fe746..3391e3e 100644
--- a/core/installer/cluster/kube.go
+++ b/core/installer/cluster/kube.go
@@ -172,36 +172,38 @@
 func (m *KubeManager) RemoveServer(name string) error {
 	m.l.Lock()
 	defer m.l.Unlock()
-	client, err := kube.NewKubeClient(kube.KubeConfigOpts{
-		KubeConfig: m.kubeCfg,
-	})
-	if err != nil {
-		return err
-	}
-	helper := &drain.Helper{
-		Ctx:                 context.Background(),
-		Client:              client,
-		Force:               true,
-		GracePeriodSeconds:  -1,
-		IgnoreAllDaemonSets: true,
-		Out:                 os.Stdout,
-		ErrOut:              os.Stdout,
-		// We want to proceed even when pods are using emptyDir volumes
-		DeleteEmptyDirData: true,
-		Timeout:            10 * time.Minute,
-	}
-	node, err := client.CoreV1().Nodes().Get(context.Background(), name, metav1.GetOptions{})
-	if err != nil {
-		return err
-	}
-	if err := drain.RunCordonOrUncordon(helper, node, true); err != nil {
-		return err
-	}
-	if err := drain.RunNodeDrain(helper, name); err != nil {
-		return err
-	}
-	if err := client.CoreV1().Nodes().Delete(context.Background(), name, metav1.DeleteOptions{}); err != nil {
-		return err
+	if len(m.controllers)+len(m.workers) > 1 {
+		client, err := kube.NewKubeClient(kube.KubeConfigOpts{
+			KubeConfig: m.kubeCfg,
+		})
+		if err != nil {
+			return err
+		}
+		helper := &drain.Helper{
+			Ctx:                 context.Background(),
+			Client:              client,
+			Force:               true,
+			GracePeriodSeconds:  -1,
+			IgnoreAllDaemonSets: true,
+			Out:                 os.Stdout,
+			ErrOut:              os.Stdout,
+			// We want to proceed even when pods are using emptyDir volumes
+			DeleteEmptyDirData: true,
+			Timeout:            10 * time.Minute,
+		}
+		node, err := client.CoreV1().Nodes().Get(context.Background(), name, metav1.GetOptions{})
+		if err != nil {
+			return err
+		}
+		if err := drain.RunCordonOrUncordon(helper, node, true); err != nil {
+			return err
+		}
+		if err := drain.RunNodeDrain(helper, name); err != nil {
+			return err
+		}
+		if err := client.CoreV1().Nodes().Delete(context.Background(), name, metav1.DeleteOptions{}); err != nil {
+			return err
+		}
 	}
 	for i, s := range m.controllers {
 		if s.Name == name {