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 {