mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	simplify DaemonReaper by using NodeSelector
This commit is contained in:
		@@ -97,7 +97,7 @@ The DaemonSet supports standard API features:
 | 
				
			|||||||
    - get (e.g. kubectl get daemonsets)
 | 
					    - get (e.g. kubectl get daemonsets)
 | 
				
			||||||
    - describe
 | 
					    - describe
 | 
				
			||||||
  - Modifiers
 | 
					  - Modifiers
 | 
				
			||||||
    - delete (if --cascade=true, then first the client turns down all the pods controlled by the DaemonSet (by setting the nodeName to a non-existant name); then it deletes the DaemonSet; then it deletes the pods)
 | 
					    - delete (if --cascade=true, then first the client turns down all the pods controlled by the DaemonSet (by setting the nodeSelector to a uuid pair that is unlikely to be set on any node); then it deletes the DaemonSet; then it deletes the pods)
 | 
				
			||||||
    - label
 | 
					    - label
 | 
				
			||||||
	- annotate
 | 
						- annotate
 | 
				
			||||||
    - update operations like patch and replace (only allowed to selector and to nodeSelector and nodeName of pod template)
 | 
					    - update operations like patch and replace (only allowed to selector and to nodeSelector and nodeName of pod template)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,12 +21,11 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fuzz "github.com/google/gofuzz"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
						"k8s.io/kubernetes/pkg/api/meta"
 | 
				
			||||||
	client "k8s.io/kubernetes/pkg/client/unversioned"
 | 
						client "k8s.io/kubernetes/pkg/client/unversioned"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/fields"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/labels"
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/util"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/wait"
 | 
						"k8s.io/kubernetes/pkg/util/wait"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -188,27 +187,13 @@ func (reaper *DaemonSetReaper) Stop(namespace, name string, timeout time.Duratio
 | 
				
			|||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Update the daemon set to select for a non-existent NodeName.
 | 
						// We set the nodeSelector to a random label. This label is nearly guaranteed
 | 
				
			||||||
	// The daemon set controller will then kill all the daemon pods corresponding to daemon set.
 | 
						// to not be set on any node so the DameonSetController will start deleting
 | 
				
			||||||
	nodes, err := reaper.Nodes().List(labels.Everything(), fields.Everything())
 | 
						// daemon pods. Once it's done deleting the daemon pods, it's safe to delete
 | 
				
			||||||
	if err != nil {
 | 
						// the DaemonSet.
 | 
				
			||||||
		return "", err
 | 
						ds.Spec.Template.Spec.NodeSelector = map[string]string{
 | 
				
			||||||
 | 
							string(util.NewUUID()): string(util.NewUUID()),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var fuzzer = fuzz.New()
 | 
					 | 
				
			||||||
	var nameExists bool
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var nodeName string
 | 
					 | 
				
			||||||
	fuzzer.Fuzz(&nodeName)
 | 
					 | 
				
			||||||
	nameExists = false
 | 
					 | 
				
			||||||
	for _, node := range nodes.Items {
 | 
					 | 
				
			||||||
		nameExists = nameExists || node.Name == nodeName
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if nameExists {
 | 
					 | 
				
			||||||
		// Probability of reaching here is extremely low, most likely indicates a programming bug/library error.
 | 
					 | 
				
			||||||
		return "", fmt.Errorf("Name collision generating an unused node name. Please retry this operation.")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ds.Spec.Template.Spec.NodeName = nodeName
 | 
					 | 
				
			||||||
	// force update to avoid version conflict
 | 
						// force update to avoid version conflict
 | 
				
			||||||
	ds.ResourceVersion = ""
 | 
						ds.ResourceVersion = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user