github.com/sealerio/sealer@v0.11.1-0.20240507115618-f4f89c5853ae/pkg/runtime/k0s/delete_masters.go (about) 1 // Copyright © 2022 Alibaba Group Holding Ltd. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package k0s 16 17 import ( 18 "context" 19 "fmt" 20 "net" 21 22 "github.com/sirupsen/logrus" 23 "golang.org/x/sync/errgroup" 24 ) 25 26 func (k *Runtime) deleteMasters(mastersToDelete, remainMasters []net.IP) error { 27 var remainMaster0 *net.IP 28 if len(remainMasters) > 0 { 29 remainMaster0 = &remainMasters[0] 30 logrus.Infof("Master changed, remain master0 is: %s", remainMaster0) 31 } 32 33 eg, _ := errgroup.WithContext(context.Background()) 34 for _, m := range mastersToDelete { 35 master := m 36 eg.Go(func() error { 37 logrus.Infof("Start to delete master %s", master) 38 if err := k.deleteMaster(master); err != nil { 39 return fmt.Errorf("failed to delete master %s: %v", master, err) 40 } 41 logrus.Infof("Succeeded in deleting master %s", master) 42 return nil 43 }) 44 } 45 return eg.Wait() 46 } 47 48 func (k *Runtime) deleteMaster(master net.IP) error { 49 /** To delete a node from k0s cluster, following these steps. 50 STEP1: stop k0s service 51 STEP2: reset the node with install configuration 52 STEP3: remove k0s cluster config generate by k0s under /etc/k0s 53 STEP4: remove private registry config in /etc/host 54 STEP5: remove bin file such as: kubectl, and remove .kube directory 55 STEP6: remove k0s bin file 56 STEP7: no need to delete node though k8s client, cause k0s don't show master node in k8s cluster 57 */ 58 remoteCleanCmd := []string{"k0s stop", 59 "k0s reset", 60 "rm -rf /etc/k0s/", 61 "rm -rf /usr/bin/kube* && rm -rf ~/.kube/", 62 "rm -rf /usr/bin/k0s"} 63 if err := k.infra.CmdAsync(master, nil, remoteCleanCmd...); err != nil { 64 return err 65 } 66 return nil 67 }