github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/clusters/kubernetes/downscale.go (about) 1 package kubernetes 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/caos/orbos/mntr" 8 "github.com/caos/orbos/pkg/kubernetes" 9 v1 "k8s.io/api/core/v1" 10 macherrs "k8s.io/apimachinery/pkg/api/errors" 11 ) 12 13 func scaleDown(pools []*initializedPool, k8sClient *kubernetes.Client, uninitializeMachine uninitializeMachineFunc, monitor mntr.Monitor, pdf func(mntr.Monitor) error) error { 14 15 for _, pool := range pools { 16 for _, machine := range pool.downscaling { 17 id := machine.infra.ID() 18 var existingK8sNode *v1.Node 19 if k8sClient != nil { 20 foundK8sNode, err := k8sClient.GetNode(id) 21 if macherrs.IsNotFound(err) { 22 err = nil 23 } else { 24 existingK8sNode = foundK8sNode 25 } 26 if err != nil { 27 return fmt.Errorf("getting node %s from kube api failed: %w", id, err) 28 } 29 } 30 31 if existingK8sNode != nil { 32 if err := k8sClient.Drain(machine.currentMachine, existingK8sNode, kubernetes.Deleting, true); err != nil { 33 return err 34 } 35 } 36 37 monitor.Info("Resetting kubeadm") 38 if _, resetErr := machine.infra.Execute(nil, "sudo kubeadm reset --force"); resetErr != nil { 39 if !strings.Contains(resetErr.Error(), "command not found") { 40 return resetErr 41 } 42 } 43 44 remove, err := machine.infra.Destroy() 45 if err != nil { 46 return err 47 } 48 49 if !machine.currentMachine.GetUpdating() { 50 machine.currentMachine.SetUpdating(true) 51 monitor.WithField("node", machine.infra.ID()).Changed("Node is ready to be deleted") 52 } 53 54 uninitializeMachine(id) 55 if req, _, unreq := machine.infra.ReplacementRequired(); req { 56 unreq() 57 pdf(monitor.WithFields(map[string]interface{}{ 58 "reason": "unrequire machine replacement", 59 "replaced": id, 60 })) 61 } 62 if err := remove(); err != nil { 63 return err 64 } 65 monitor.WithFields(map[string]interface{}{ 66 "machine": id, 67 "tier": machine.pool.tier, 68 }).Changed("Machine removed") 69 } 70 } 71 72 return nil 73 }