From 792195eaa5327860d65c3bc314ce09931086768d Mon Sep 17 00:00:00 2001 From: Ashley Date: Wed, 13 Jun 2018 15:37:20 -0400 Subject: [PATCH 1/2] Fix kubeadm taints to not override existing node taints --- .../app/phases/markmaster/markmaster.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/phases/markmaster/markmaster.go b/cmd/kubeadm/app/phases/markmaster/markmaster.go index c9d36989fec..1119708403f 100644 --- a/cmd/kubeadm/app/phases/markmaster/markmaster.go +++ b/cmd/kubeadm/app/phases/markmaster/markmaster.go @@ -43,8 +43,24 @@ func MarkMaster(client clientset.Interface, masterName string, taints []v1.Taint }) } +func taintExists(taint v1.Taint, taints []v1.Taint) bool { + for _, t := range taints { + if t == taint { + return true + } + } + + return false +} + func markMasterNode(n *v1.Node, taints []v1.Taint) { n.ObjectMeta.Labels[constants.LabelNodeRoleMaster] = "" - // TODO: Append taints, don't override? + + for _, nt := range n.Spec.Taints { + if !taintExists(nt, taints) { + taints = append(taints, nt) + } + } + n.Spec.Taints = taints } From 35615881e30dc34dac2a645e5a409fcc506699c4 Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 14 Jun 2018 10:57:34 -0400 Subject: [PATCH 2/2] Update tests to reflect that kubeadm taints should not override node taints --- .../app/phases/markmaster/markmaster_test.go | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/cmd/kubeadm/app/phases/markmaster/markmaster_test.go b/cmd/kubeadm/app/phases/markmaster/markmaster_test.go index 48b421cdbf7..c8f937abd56 100644 --- a/cmd/kubeadm/app/phases/markmaster/markmaster_test.go +++ b/cmd/kubeadm/app/phases/markmaster/markmaster_test.go @@ -82,11 +82,28 @@ func TestMarkMaster(t *testing.T) { "{}", }, { - "nothing missing but taint unwanted", + "has taint and no new taints wanted", kubeadmconstants.LabelNodeRoleMaster, - []v1.Taint{kubeadmconstants.MasterTaint}, + []v1.Taint{ + { + Key: "node.cloudprovider.kubernetes.io/uninitialized", + Effect: v1.TaintEffectNoSchedule, + }, + }, nil, - "{\"spec\":{\"taints\":null}}", + "{}", + }, + { + "has taint and should merge with wanted taint", + kubeadmconstants.LabelNodeRoleMaster, + []v1.Taint{ + { + Key: "node.cloudprovider.kubernetes.io/uninitialized", + Effect: v1.TaintEffectNoSchedule, + }, + }, + []v1.Taint{kubeadmconstants.MasterTaint}, + "{\"spec\":{\"taints\":[{\"effect\":\"NoSchedule\",\"key\":\"node-role.kubernetes.io/master\"},{\"effect\":\"NoSchedule\",\"key\":\"node.cloudprovider.kubernetes.io/uninitialized\"}]}}", }, }