From 785a3200d7efe33bc9e1c691128f5b31f21f38d8 Mon Sep 17 00:00:00 2001 From: xiongww Date: Fri, 14 Jul 2023 15:15:40 +0800 Subject: [PATCH] filter etcd node for delete node, because not have to deal with etcd cluster del node so far --- cmd/kk/pkg/kubernetes/tasks.go | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/cmd/kk/pkg/kubernetes/tasks.go b/cmd/kk/pkg/kubernetes/tasks.go index dc18db6d..f5f03044 100644 --- a/cmd/kk/pkg/kubernetes/tasks.go +++ b/cmd/kk/pkg/kubernetes/tasks.go @@ -448,6 +448,18 @@ type FilterFirstMaster struct { common.KubeAction } +func filterString(filter string, nodes []string) []string { + j := 0 + for _, v := range nodes { + if v != filter { + nodes[j] = v + j++ + } + } + resArr := nodes[:j] + return resArr +} + func (f *FilterFirstMaster) Execute(runtime connector.Runtime) error { firstMaster := runtime.GetHostsByRole(common.Master)[0].GetName() //kubectl get node @@ -465,19 +477,17 @@ func (f *FilterFirstMaster) Execute(runtime connector.Runtime) error { nodes = strings.Split(res, "\r\n") } //nodes filter first master - j := 0 - for _, v := range nodes { - if v != firstMaster { - nodes[j] = v - j++ - } + resArr := filterString(firstMaster, nodes) + //nodes filter etcd nodes + for i := 0; i < len(runtime.GetHostsByRole(common.ETCD)); i++ { + etcdName := runtime.GetHostsByRole(common.ETCD)[i].GetName() + resArr = filterString(etcdName, resArr) } - resArr := nodes[:j] workerName := make(map[string]struct{}) for j := 0; j < len(runtime.GetHostsByRole(common.Worker)); j++ { workerName[runtime.GetHostsByRole(common.Worker)[j].GetName()] = struct{}{} } - //make sure node is not the first master node name + //make sure node is not the first master and etcd node name var node string for i := 0; i < len(resArr); i++ { if _, ok := workerName[resArr[i]]; ok && resArr[i] == f.KubeConf.Arg.NodeName { @@ -490,7 +500,7 @@ func (f *FilterFirstMaster) Execute(runtime connector.Runtime) error { return errors.New("" + "1. check the node name in the config-sample.yaml\n" + "2. check the node name in the Kubernetes cluster\n" + - "3. check the node name is the first master node name\n") + "3. check the node name is the first master and etcd node name\n") } f.PipelineCache.Set("dstNode", node)