Merge pull request https://github.com/kubernetes/contrib/pull/1049 from mwielgus/skip-kubernetes-system

Cluster-autoscaler: do not delete nodes with kube-system, not-mirrored, not-daemon set pods
This commit is contained in:
Marcin Wielgus 2016-05-24 15:37:59 +02:00
commit 795696ff45
2 changed files with 8 additions and 3 deletions

View File

@ -51,7 +51,7 @@ candidateloop:
if fastCheck {
if nodeInfo, found := nodeNameToNodeInfo[node.Name]; found {
podsToRemove, err = FastGetPodsToMove(nodeInfo, false, kube_api.Codecs.UniversalDecoder())
podsToRemove, err = FastGetPodsToMove(nodeInfo, false, true, kube_api.Codecs.UniversalDecoder())
}
} else {
drainResult, _, _, err := cmd.GetPodsForDeletionOnNodeDrain(client, node.Name,

View File

@ -31,7 +31,8 @@ import (
// Based on kubectl drain code. It makes an assumption that RC, DS, Jobs and RS were deleted
// along with their pods (no abandoned pods with dangling created-by annotation). Usefull for fast
// checks.
func FastGetPodsToMove(nodeInfo *schedulercache.NodeInfo, force bool, decoder runtime.Decoder) ([]*api.Pod, error) {
func FastGetPodsToMove(nodeInfo *schedulercache.NodeInfo, force bool,
failOnKubeSystemAddons bool, decoder runtime.Decoder) ([]*api.Pod, error) {
pods := make([]*api.Pod, 0)
unreplicatedPodNames := []string{}
for _, pod := range nodeInfo.Pods() {
@ -47,7 +48,7 @@ func FastGetPodsToMove(nodeInfo *schedulercache.NodeInfo, force bool, decoder ru
if found {
var sr api.SerializedReference
if err := runtime.DecodeInto(decoder, []byte(creatorRef), &sr); err != nil {
return pods, err
return []*api.Pod{}, err
}
if sr.Reference.Kind == "ReplicationController" {
replicated = true
@ -60,6 +61,10 @@ func FastGetPodsToMove(nodeInfo *schedulercache.NodeInfo, force bool, decoder ru
}
}
if !daemonsetPod && pod.Namespace == "kube-system" && failOnKubeSystemAddons {
return []*api.Pod{}, fmt.Errorf("non-deamons set, non-mirrored, kube-system pod present: %s", pod.Name)
}
switch {
case daemonsetPod:
break