mirror of
https://github.com/labring/sealos.git
synced 2026-10-24 23:23:35 +08:00
feature(main): reset cluster not delete nodes (#3991)
* feature(main): reset cluster not delete nodes Signed-off-by: cuisongliu <cuisongliu@qq.com> * feature(main): reset cluster not delete nodes Signed-off-by: cuisongliu <cuisongliu@qq.com> (cherry picked from commit 6fc0bea73f5b2c0f3c3e39de5cd926c6738249ee) --------- Signed-off-by: cuisongliu <cuisongliu@qq.com>
This commit is contained in:
@@ -94,13 +94,13 @@ func (k *K3s) ScaleUp(masters []string, nodes []string) error {
|
||||
func (k *K3s) ScaleDown(masters []string, nodes []string) error {
|
||||
if len(masters) != 0 {
|
||||
logger.Info("master %s will be deleted", masters)
|
||||
if err := k.resetNodes(masters); err != nil {
|
||||
if err := k.removeNodes(masters); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if len(nodes) != 0 {
|
||||
logger.Info("worker %s will be deleted", nodes)
|
||||
return k.resetNodes(nodes)
|
||||
return k.removeNodes(nodes)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -30,6 +30,17 @@ import (
|
||||
)
|
||||
|
||||
func (k *K3s) resetNodes(nodes []string) error {
|
||||
eg, _ := errgroup.WithContext(context.Background())
|
||||
for i := range nodes {
|
||||
node := nodes[i]
|
||||
eg.Go(func() error {
|
||||
return k.resetNode(node)
|
||||
})
|
||||
}
|
||||
return eg.Wait()
|
||||
}
|
||||
|
||||
func (k *K3s) removeNodes(nodes []string) error {
|
||||
eg, _ := errgroup.WithContext(context.Background())
|
||||
for i := range nodes {
|
||||
node := nodes[i]
|
||||
@@ -50,7 +61,7 @@ func (k *K3s) resetNode(host string) error {
|
||||
if removeKubeConfigErr != nil {
|
||||
logger.Error("failed to clean node, exec command %s failed, %v", removeKubeConfig, removeKubeConfigErr)
|
||||
}
|
||||
if slices.Contains(k.cluster.GetNodeIPList(), host) {
|
||||
if slices.Contains(k.cluster.GetNodeIPAndPortList(), host) {
|
||||
vipAndPort := fmt.Sprintf("%s:%d", k.cluster.GetVIP(), k.config.APIServerPort)
|
||||
ipvsclearErr := k.remoteUtil.IPVSClean(host, vipAndPort)
|
||||
if ipvsclearErr != nil {
|
||||
@@ -63,7 +74,10 @@ func (k *K3s) resetNode(host string) error {
|
||||
// TODO: remove from API
|
||||
func (k *K3s) deleteNode(node string) error {
|
||||
//remove master
|
||||
masterIPs := strings.RemoveFromSlice(k.cluster.GetMasterIPList(), node)
|
||||
masterIPs := k.cluster.GetMasterIPList()
|
||||
if slices.Contains(k.cluster.GetMasterIPAndPortList(), node) {
|
||||
masterIPs = strings.RemoveFromSlice(k.cluster.GetMasterIPList(), node)
|
||||
}
|
||||
if len(masterIPs) > 0 {
|
||||
// TODO: do we need draining first?
|
||||
if err := k.removeNode(node); err != nil {
|
||||
|
||||
@@ -81,7 +81,7 @@ func (k *KubeadmRuntime) resetNode(node string, cleanHook func()) error {
|
||||
if removeKubeConfigErr != nil {
|
||||
logger.Error("failed to clean node, exec command %s failed, %v", removeKubeConfig, removeKubeConfigErr)
|
||||
}
|
||||
if slices.Contains(k.cluster.GetNodeIPList(), node) {
|
||||
if slices.Contains(k.cluster.GetNodeIPAndPortList(), node) {
|
||||
ipvscleanErr := k.execIPVSClean(node)
|
||||
if ipvscleanErr != nil {
|
||||
logger.Error("failed to clean node route and ipvs failed, %v", ipvscleanErr)
|
||||
|
||||
Reference in New Issue
Block a user