Skip to content

Commit

Permalink
Reclaim IPs when node name is re-used
Browse files Browse the repository at this point in the history
If we can see that a different peer was previously running with the
same node name, mark it for reclaim.
  • Loading branch information
bboreham committed Sep 6, 2018
1 parent dd5994c commit b15002e
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions prog/kube-utils/main.go
Expand Up @@ -96,7 +96,7 @@ func checkIamInPeerList(cml *configMapAnnotations, c *kubernetes.Clientset, peer

// For each of those peers that is no longer listed as a node by
// Kubernetes, remove it from Weave IPAM
func reclaimRemovedPeers(weave *weaveapi.Client, cml *configMapAnnotations, nodes []nodeInfo, myPeerName string) error {
func reclaimRemovedPeers(weave *weaveapi.Client, cml *configMapAnnotations, nodes []nodeInfo, myPeerName, myNodeName string) error {
for loopsWhenNothingChanged := 0; loopsWhenNothingChanged < 3; loopsWhenNothingChanged++ {
if err := cml.Init(); err != nil {
return err
Expand All @@ -110,9 +110,19 @@ func reclaimRemovedPeers(weave *weaveapi.Client, cml *configMapAnnotations, node
for _, peer := range storedPeerList.Peers {
peerMap[peer.NodeName] = peer
}
// 1a. Check if the list held a peer with my NodeName but different PeerName
var deleteOldMe *peerInfo
if oldMe, found := peerMap[myNodeName]; found && oldMe.PeerName != myPeerName {
common.Log.Infof("[kube-peers] old peer found with node name %s and peer name %s", oldMe.NodeName, oldMe.PeerName)
deleteOldMe = &oldMe
}
// Now delete the entries in the map that are current nodes
for _, node := range nodes {
delete(peerMap, node.name)
}
if deleteOldMe != nil {
peerMap[deleteOldMe.NodeName] = *deleteOldMe
}
common.Log.Debugln("[kube-peers] Nodes that have disappeared:", peerMap)
if len(peerMap) == 0 {
break
Expand Down Expand Up @@ -239,7 +249,7 @@ func main() {
common.Log.Infoln("[kube-peers] Added myself to peer list", list)

weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), common.Log)
err = reclaimRemovedPeers(weave, cml, peers, peerName)
err = reclaimRemovedPeers(weave, cml, peers, peerName, nodeName)
if err != nil {
common.Log.Fatalf("[kube-peers] Error while reclaiming space: %v", err)
}
Expand Down

0 comments on commit b15002e

Please sign in to comment.