mirror of
https://github.com/labring/sealos.git
synced 2026-10-29 17:25:58 +08:00
feature(main): fix delete add node and skip error (#1027)
* feature(main): fix delete add node and skip error
This commit is contained in:
@@ -55,9 +55,14 @@ build-arm64:
|
||||
CGO_ENABLED=${CGO_ENABLED} GOOS=${OS} GOARCH=arm64 go build -o $(shell pwd)/bin/${OS}_arm64/sealos -tags "containers_image_openpgp" cmd/sealos/main.go
|
||||
CGO_ENABLED=0 GOOS=${OS} GOARCH=arm64 go build -o $(shell pwd)/bin/${OS}_arm64/seactl -tags "containers_image_openpgp" cmd/sealctl/main.go
|
||||
|
||||
import:
|
||||
goimports -l -w cmd
|
||||
goimports -l -w pkg
|
||||
|
||||
GORELEASER_BIN = $(shell pwd)/bin/goreleaser
|
||||
install-goreleaser: ## check license if not exist install go-lint tools
|
||||
#goimports -l -w cmd
|
||||
#goimports -l -w pkg
|
||||
$(call go-get-tool,$(GORELEASER_BIN),github.com/goreleaser/goreleaser@v1.6.3)
|
||||
|
||||
build-pack: SHELL:=/bin/bash
|
||||
|
||||
@@ -85,8 +85,8 @@ func (c *Applier) reconcileCluster() error {
|
||||
if err := c.installApp(c.RunNewImages); err != nil {
|
||||
return err
|
||||
}
|
||||
mj, md := iputils.GetDiffHosts(c.ClusterCurrent.GetMasterIPList(), c.ClusterDesired.GetMasterIPList())
|
||||
nj, nd := iputils.GetDiffHosts(c.ClusterCurrent.GetNodeIPList(), c.ClusterDesired.GetNodeIPList())
|
||||
mj, md := iputils.GetDiffHosts(c.ClusterCurrent.GetMasterIPAndPortList(), c.ClusterDesired.GetMasterIPAndPortList())
|
||||
nj, nd := iputils.GetDiffHosts(c.ClusterCurrent.GetNodeIPAndPortList(), c.ClusterDesired.GetNodeIPAndPortList())
|
||||
//if len(mj) == 0 && len(md) == 0 && len(nj) == 0 && len(nd) == 0 {
|
||||
// return c.upgrade()
|
||||
//}
|
||||
@@ -128,8 +128,8 @@ func (c *Applier) installApp(images []string) error {
|
||||
|
||||
func (c *Applier) scaleCluster(mj, md, nj, nd []string) error {
|
||||
logger.Info("start to scale this cluster")
|
||||
logger.Debug("current cluster: master %s, worker %s", c.ClusterCurrent.GetMasterIPList(), c.ClusterCurrent.GetNodeIPList())
|
||||
logger.Debug("desired cluster: master %s, worker %s", c.ClusterDesired.GetMasterIPList(), c.ClusterDesired.GetNodeIPList())
|
||||
logger.Debug("current cluster: master %s, worker %s", c.ClusterCurrent.GetMasterIPAndPortList(), c.ClusterCurrent.GetNodeIPAndPortList())
|
||||
logger.Debug("desired cluster: master %s, worker %s", c.ClusterDesired.GetMasterIPAndPortList(), c.ClusterDesired.GetNodeIPAndPortList())
|
||||
if len(mj) == 0 && len(md) == 0 && len(nj) == 0 && len(nd) == 0 {
|
||||
logger.Info("succeeded in scaling this cluster: no change nodes")
|
||||
return nil
|
||||
|
||||
@@ -19,6 +19,8 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
|
||||
"github.com/labring/sealos/pkg/utils/logger"
|
||||
|
||||
"github.com/labring/sealos/pkg/apply/applydrivers"
|
||||
@@ -165,6 +167,20 @@ func deleteNodes(cluster *v2.Cluster, scaleArgs *RunArgs) error {
|
||||
}
|
||||
|
||||
defaultPort := strconv.Itoa(int(cluster.Spec.SSH.Port))
|
||||
|
||||
hostsSet := sets.NewString()
|
||||
|
||||
for _, node := range cluster.Spec.Hosts {
|
||||
hostsSet.Insert(node.IPS...)
|
||||
}
|
||||
|
||||
for _, node := range strings.Split(scaleArgs.Nodes, ",") {
|
||||
targetIP, targetPort := iputils.GetHostIPAndPortOrDefault(node, defaultPort)
|
||||
if !hostsSet.Has(fmt.Sprintf("%s:%s", targetIP, targetPort)) {
|
||||
return fmt.Errorf("parameter error: to delete IP %s must in cluster IP list", targetIP)
|
||||
}
|
||||
}
|
||||
|
||||
if scaleArgs.Masters != "" && IsIPList(scaleArgs.Masters) {
|
||||
for i := range cluster.Spec.Hosts {
|
||||
if strings2.InList(v2.MASTER, cluster.Spec.Hosts[i].Roles) {
|
||||
|
||||
+16
-9
@@ -23,9 +23,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
RemoveKubeConfig = "rm -rf .kube"
|
||||
RemoteCleanMasterOrNode = `if which kubeadm;then kubeadm reset -f %s;fi && \
|
||||
modprobe -r ipip && lsmod && \
|
||||
removeKubeConfig = "rm -rf .kube"
|
||||
remoteCleanMasterOrNode = `if which kubeadm;then kubeadm reset -f %s;fi && \
|
||||
rm -rf /etc/kubernetes/ && \
|
||||
rm -rf /etc/cni && rm -rf /opt/cni && \
|
||||
rm -rf %s
|
||||
@@ -69,21 +68,29 @@ func (k *KubeadmRuntime) resetMasters(nodes []string) {
|
||||
|
||||
func (k *KubeadmRuntime) resetNode(node string) error {
|
||||
logger.Info("start to reset node: %s", node)
|
||||
if err := k.sshCmdAsync(node, fmt.Sprintf(RemoteCleanMasterOrNode, vlogToStr(k.vlog), k.getEtcdDataDir()),
|
||||
RemoveKubeConfig, DeleteImageShimCMD(k.getContentData().RootFSPath())); err != nil {
|
||||
return fmt.Errorf("exec node clean in sealos failed %v", err)
|
||||
resetCmd := fmt.Sprintf(remoteCleanMasterOrNode, vlogToStr(k.vlog), k.getEtcdDataDir())
|
||||
deleteShimCmd := DeleteImageShimCMD(k.getContentData().RootFSPath())
|
||||
if err := k.sshCmdAsync(node, resetCmd); err != nil {
|
||||
logger.Error("failed to clean node, exec command %s failed, %v", resetCmd, err)
|
||||
}
|
||||
if err := k.sshCmdAsync(node, removeKubeConfig); err != nil {
|
||||
logger.Error("failed to clean node, exec command %s failed, %v", removeKubeConfig, err)
|
||||
}
|
||||
|
||||
if err := k.sshCmdAsync(node, deleteShimCmd); err != nil {
|
||||
logger.Error("failed to clean node, exec command %s failed, %v", deleteShimCmd, err)
|
||||
}
|
||||
err := k.execClean(node)
|
||||
if err != nil {
|
||||
return fmt.Errorf("exec clean.sh failed %v", err)
|
||||
logger.Error("exec clean.sh failed %v", err)
|
||||
}
|
||||
err = k.execHostsDelete(node, k.getRegistry().Domain)
|
||||
if err != nil {
|
||||
return fmt.Errorf("delete registry hosts failed %v", err)
|
||||
logger.Error("delete registry hosts failed %v", err)
|
||||
}
|
||||
err = k.execHostsDelete(node, k.getAPIServerDomain())
|
||||
if err != nil {
|
||||
return fmt.Errorf("delete apiserver hosts failed %v", err)
|
||||
logger.Error("delete apiserver hosts failed %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -20,6 +20,8 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/labring/sealos/pkg/utils/iputils"
|
||||
|
||||
"github.com/labring/sealos/pkg/client-go/kubernetes"
|
||||
"github.com/labring/sealos/pkg/utils/contants"
|
||||
"github.com/labring/sealos/pkg/utils/logger"
|
||||
@@ -101,6 +103,7 @@ func (k *KubeadmRuntime) sendFileToHosts(Hosts []string, src, dst string) error
|
||||
}
|
||||
|
||||
func (k *KubeadmRuntime) deleteKubeNode(ip string) error {
|
||||
ip = iputils.GetHostIP(ip)
|
||||
logger.Info("start to remove node from k8s %s", ip)
|
||||
cli, err := kubernetes.NewKubernetesClient(k.getContentData().AdminFile(), k.getMaster0IPAPIServer())
|
||||
if err != nil {
|
||||
@@ -115,7 +118,7 @@ func (k *KubeadmRuntime) deleteKubeNode(ip string) error {
|
||||
for _, n := range nodeList.Items {
|
||||
for _, addr := range n.Status.Addresses {
|
||||
if addr.Type == v12.NodeInternalIP && addr.Address == ip {
|
||||
nodeType = &n
|
||||
nodeType = n.DeepCopy()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,10 +39,25 @@ func GetDiffHosts(hostsOld, hostsNew []string) (add, sub []string) {
|
||||
// s2 = {a1, a2, a4, a5}
|
||||
// s1.Difference(s2) = {a3}
|
||||
// s2.Difference(s1) = {a4, a5}
|
||||
oldSet := sets.NewString(hostsOld...)
|
||||
newSet := sets.NewString(hostsNew...)
|
||||
add = newSet.Difference(oldSet).List()
|
||||
sub = oldSet.Difference(newSet).List()
|
||||
oldSet := sets.NewString(GetHostIPs(hostsOld)...)
|
||||
newSet := sets.NewString(GetHostIPs(hostsNew)...)
|
||||
addIPs := newSet.Difference(oldSet).List()
|
||||
subIPs := oldSet.Difference(newSet).List()
|
||||
|
||||
for _, ip := range hostsNew {
|
||||
for _, aIP := range addIPs {
|
||||
if aIP == GetHostIP(ip) {
|
||||
add = append(add, ip)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, ip := range hostsOld {
|
||||
for _, aIP := range subIPs {
|
||||
if aIP == GetHostIP(ip) {
|
||||
sub = append(sub, ip)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user