Skip to content

Commit 94af045

Browse files
committed
kubeadm: don't re-add an etcd member if it already exists for "join"
If an etcd member with the same address already exists, don't re-add it. Instead, use the existing member list for creating the "initial cluster" that is written for this etcd server instance static Pod.
1 parent 35fc65d commit 94af045

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

cmd/kubeadm/app/phases/etcd/local.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,36 @@ func CreateStackedEtcdStaticPodManifestFile(client clientset.Interface, manifest
149149
return err
150150
}
151151

152-
// notifies the other members of the etcd cluster about the joining member
153152
etcdPeerAddress := etcdutil.GetPeerURL(endpoint)
154153

155-
klog.V(1).Infof("Adding etcd member: %s", etcdPeerAddress)
156-
initialCluster, err := etcdClient.AddMember(nodeName, etcdPeerAddress)
154+
klog.V(1).Infoln("[etcd] Getting the list of existing members")
155+
initialCluster, err := etcdClient.ListMembers()
157156
if err != nil {
158157
return err
159158
}
160-
fmt.Println("[etcd] Announced new etcd member joining to the existing etcd cluster")
161-
klog.V(1).Infof("Updated etcd member list: %v", initialCluster)
159+
160+
// only add the new member if it doesn't already exists
161+
var exists bool
162+
klog.V(1).Infof("[etcd] Checking if the etcd member already exists: %s", etcdPeerAddress)
163+
for _, member := range initialCluster {
164+
if member.PeerURL == etcdPeerAddress {
165+
exists = true
166+
break
167+
}
168+
}
169+
170+
if exists {
171+
klog.V(1).Infof("[etcd] Etcd member already exists: %s", endpoint)
172+
} else {
173+
klog.V(1).Infof("[etcd] Adding etcd member: %s", etcdPeerAddress)
174+
initialCluster, err = etcdClient.AddMember(nodeName, etcdPeerAddress)
175+
if err != nil {
176+
return err
177+
}
178+
179+
fmt.Println("[etcd] Announced new etcd member joining to the existing etcd cluster")
180+
klog.V(1).Infof("Updated etcd member list: %v", initialCluster)
181+
}
162182

163183
fmt.Printf("[etcd] Creating static Pod manifest for %q\n", kubeadmconstants.Etcd)
164184

0 commit comments

Comments
 (0)