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:
cuisongliu
2023-09-29 22:44:32 +08:00
committed by GitHub
parent 708baf1bbe
commit a33fc0dec2
3 changed files with 19 additions and 5 deletions
+2 -2
View File
@@ -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
}
+16 -2
View File
@@ -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 {
+1 -1
View File
@@ -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)