From 36ee154243669ae78e7894bf3633282a8a924dca Mon Sep 17 00:00:00 2001 From: Shiv Nagarajan Date: Wed, 16 Jan 2019 21:20:57 -0500 Subject: [PATCH] remove deprecated taints from 1.9 --- .../node_lifecycle_controller.go | 49 ------ .../node_lifecycle_controller_test.go | 165 ------------------ pkg/scheduler/api/well_known_labels.go | 8 - .../admission_test.go | 132 -------------- 4 files changed, 354 deletions(-) diff --git a/pkg/controller/nodelifecycle/node_lifecycle_controller.go b/pkg/controller/nodelifecycle/node_lifecycle_controller.go index 598b37c1cb..9657fed24d 100644 --- a/pkg/controller/nodelifecycle/node_lifecycle_controller.go +++ b/pkg/controller/nodelifecycle/node_lifecycle_controller.go @@ -370,17 +370,6 @@ func NewNodeLifecycleController( }) } - // NOTE(resouer): nodeInformer to substitute deprecated taint key (notReady -> not-ready). - // Remove this logic when we don't need this backwards compatibility - nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: nodeutil.CreateAddNodeHandler(func(node *v1.Node) error { - return nc.doFixDeprecatedTaintKeyPass(node) - }), - UpdateFunc: nodeutil.CreateUpdateNodeHandler(func(_, newNode *v1.Node) error { - return nc.doFixDeprecatedTaintKeyPass(newNode) - }), - }) - nc.leaseLister = leaseInformer.Lister() if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) { nc.leaseInformerSynced = leaseInformer.Informer().HasSynced @@ -448,44 +437,6 @@ func (nc *Controller) Run(stopCh <-chan struct{}) { <-stopCh } -// doFixDeprecatedTaintKeyPass checks and replaces deprecated taint key with proper key name if needed. -func (nc *Controller) doFixDeprecatedTaintKeyPass(node *v1.Node) error { - taintsToAdd := []*v1.Taint{} - taintsToDel := []*v1.Taint{} - - for _, taint := range node.Spec.Taints { - if taint.Key == schedulerapi.DeprecatedTaintNodeNotReady { - tDel := taint - taintsToDel = append(taintsToDel, &tDel) - - tAdd := taint - tAdd.Key = schedulerapi.TaintNodeNotReady - taintsToAdd = append(taintsToAdd, &tAdd) - } - - if taint.Key == schedulerapi.DeprecatedTaintNodeUnreachable { - tDel := taint - taintsToDel = append(taintsToDel, &tDel) - - tAdd := taint - tAdd.Key = schedulerapi.TaintNodeUnreachable - taintsToAdd = append(taintsToAdd, &tAdd) - } - } - - if len(taintsToAdd) == 0 && len(taintsToDel) == 0 { - return nil - } - - klog.Warningf("Detected deprecated taint keys: %v on node: %v, will substitute them with %v", - taintsToDel, node.GetName(), taintsToAdd) - - if !nodeutil.SwapNodeControllerTaint(nc.kubeClient, taintsToAdd, taintsToDel, node) { - return fmt.Errorf("failed to swap taints of node %+v", node) - } - return nil -} - func (nc *Controller) doNoScheduleTaintingPassWorker() { for { obj, shutdown := nc.nodeUpdateQueue.Get() diff --git a/pkg/controller/nodelifecycle/node_lifecycle_controller_test.go b/pkg/controller/nodelifecycle/node_lifecycle_controller_test.go index 268f1c62e1..8158699119 100644 --- a/pkg/controller/nodelifecycle/node_lifecycle_controller_test.go +++ b/pkg/controller/nodelifecycle/node_lifecycle_controller_test.go @@ -2911,168 +2911,3 @@ func TestNodeEventGeneration(t *testing.T) { } } } - -// TestFixDeprecatedTaintKey verifies we have backwards compatibility after upgraded alpha taint key to GA taint key. -// TODO(resouer): this is introduced in 1.9 and should be removed in the future. -func TestFixDeprecatedTaintKey(t *testing.T) { - fakeNow := metav1.Date(2017, 1, 1, 12, 0, 0, 0, time.UTC) - evictionTimeout := 10 * time.Minute - - fakeNodeHandler := &testutil.FakeNodeHandler{ - Existing: []*v1.Node{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "node0", - CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), - Labels: map[string]string{ - kubeletapis.LabelZoneRegion: "region1", - kubeletapis.LabelZoneFailureDomain: "zone1", - }, - }, - }, - }, - Clientset: fake.NewSimpleClientset(&v1.PodList{Items: []v1.Pod{*testutil.NewPod("pod0", "node0")}}), - } - - nodeController, _ := newNodeLifecycleControllerFromClient( - fakeNodeHandler, - evictionTimeout, - testRateLimiterQPS, - testRateLimiterQPS, - testLargeClusterThreshold, - testUnhealthyThreshold, - testNodeMonitorGracePeriod, - testNodeStartupGracePeriod, - testNodeMonitorPeriod, - true) - nodeController.now = func() metav1.Time { return fakeNow } - nodeController.recorder = testutil.NewFakeRecorder() - - deprecatedNotReadyTaint := &v1.Taint{ - Key: schedulerapi.DeprecatedTaintNodeNotReady, - Effect: v1.TaintEffectNoExecute, - } - - nodeNotReadyTaint := &v1.Taint{ - Key: schedulerapi.TaintNodeNotReady, - Effect: v1.TaintEffectNoExecute, - } - - deprecatedUnreachableTaint := &v1.Taint{ - Key: schedulerapi.DeprecatedTaintNodeUnreachable, - Effect: v1.TaintEffectNoExecute, - } - - nodeUnreachableTaint := &v1.Taint{ - Key: schedulerapi.TaintNodeUnreachable, - Effect: v1.TaintEffectNoExecute, - } - - tests := []struct { - Name string - Node *v1.Node - ExpectedTaints []*v1.Taint - }{ - { - Name: "Node with deprecated not-ready taint key", - Node: &v1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node0", - CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), - Labels: map[string]string{ - kubeletapis.LabelZoneRegion: "region1", - kubeletapis.LabelZoneFailureDomain: "zone1", - }, - }, - Spec: v1.NodeSpec{ - Taints: []v1.Taint{ - *deprecatedNotReadyTaint, - }, - }, - }, - ExpectedTaints: []*v1.Taint{nodeNotReadyTaint}, - }, - { - Name: "Node with deprecated unreachable taint key", - Node: &v1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node0", - CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), - Labels: map[string]string{ - kubeletapis.LabelZoneRegion: "region1", - kubeletapis.LabelZoneFailureDomain: "zone1", - }, - }, - Spec: v1.NodeSpec{ - Taints: []v1.Taint{ - *deprecatedUnreachableTaint, - }, - }, - }, - ExpectedTaints: []*v1.Taint{nodeUnreachableTaint}, - }, - { - Name: "Node with not-ready taint key", - Node: &v1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node0", - CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), - Labels: map[string]string{ - kubeletapis.LabelZoneRegion: "region1", - kubeletapis.LabelZoneFailureDomain: "zone1", - }, - }, - Spec: v1.NodeSpec{ - Taints: []v1.Taint{ - *nodeNotReadyTaint, - }, - }, - }, - ExpectedTaints: []*v1.Taint{nodeNotReadyTaint}, - }, - { - Name: "Node with unreachable taint key", - Node: &v1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node0", - CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), - Labels: map[string]string{ - kubeletapis.LabelZoneRegion: "region1", - kubeletapis.LabelZoneFailureDomain: "zone1", - }, - }, - Spec: v1.NodeSpec{ - Taints: []v1.Taint{ - *nodeUnreachableTaint, - }, - }, - }, - ExpectedTaints: []*v1.Taint{nodeUnreachableTaint}, - }, - } - - for _, test := range tests { - fakeNodeHandler.Update(test.Node) - if err := nodeController.syncNodeStore(fakeNodeHandler); err != nil { - t.Errorf("unexpected error: %v", err) - } - nodeController.doFixDeprecatedTaintKeyPass(test.Node) - if err := nodeController.syncNodeStore(fakeNodeHandler); err != nil { - t.Errorf("unexpected error: %v", err) - } - node, err := nodeController.nodeLister.Get(test.Node.GetName()) - if err != nil { - t.Errorf("Can't get current node...") - return - } - if len(node.Spec.Taints) != len(test.ExpectedTaints) { - t.Errorf("%s: Unexpected number of taints: expected %d, got %d", - test.Name, len(test.ExpectedTaints), len(node.Spec.Taints)) - } - for _, taint := range test.ExpectedTaints { - if !taintutils.TaintExists(node.Spec.Taints, taint) { - t.Errorf("%s: Can't find taint %v in %v", test.Name, taint, node.Spec.Taints) - } - } - } -} diff --git a/pkg/scheduler/api/well_known_labels.go b/pkg/scheduler/api/well_known_labels.go index 7c1d707830..e79722e1d8 100644 --- a/pkg/scheduler/api/well_known_labels.go +++ b/pkg/scheduler/api/well_known_labels.go @@ -26,20 +26,12 @@ const ( // and removed when node becomes ready. TaintNodeNotReady = "node.kubernetes.io/not-ready" - // DeprecatedTaintNodeNotReady is the deprecated version of TaintNodeNotReady. - // It is deprecated since 1.9 - DeprecatedTaintNodeNotReady = "node.alpha.kubernetes.io/notReady" - // TaintNodeUnreachable will be added when node becomes unreachable // (corresponding to NodeReady status ConditionUnknown) // and feature-gate for TaintBasedEvictions flag is enabled, // and removed when node becomes reachable (NodeReady status ConditionTrue). TaintNodeUnreachable = "node.kubernetes.io/unreachable" - // DeprecatedTaintNodeUnreachable is the deprecated version of TaintNodeUnreachable. - // It is deprecated since 1.9 - DeprecatedTaintNodeUnreachable = "node.alpha.kubernetes.io/unreachable" - // TaintNodeUnschedulable will be added when node becomes unschedulable // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node becomes scheduable. diff --git a/plugin/pkg/admission/defaulttolerationseconds/admission_test.go b/plugin/pkg/admission/defaulttolerationseconds/admission_test.go index bea871e20c..c6f9a00d38 100644 --- a/plugin/pkg/admission/defaulttolerationseconds/admission_test.go +++ b/plugin/pkg/admission/defaulttolerationseconds/admission_test.go @@ -63,138 +63,6 @@ func TestForgivenessAdmission(t *testing.T) { }, }, }, - { - description: "pod has alpha tolerations, expect add tolerations for `not-ready:NoExecute` and `unreachable:NoExecute`" + - ", the alpha tolerations will not be touched", - requestedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.DeprecatedTaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - expectedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.DeprecatedTaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - }, - { - description: "pod has alpha not-ready toleration, expect add tolerations for `not-ready:NoExecute` and `unreachable:NoExecute`" + - ", the alpha tolerations will not be touched", - requestedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - expectedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - }, - { - description: "pod has alpha unreachable toleration, expect add tolerations for `not-ready:NoExecute` and `unreachable:NoExecute`" + - ", the alpha tolerations will not be touched", - requestedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - expectedPod: api.Pod{ - Spec: api.PodSpec{ - Tolerations: []api.Toleration{ - { - Key: schedulerapi.DeprecatedTaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeNotReady, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - { - Key: schedulerapi.TaintNodeUnreachable, - Operator: api.TolerationOpExists, - Effect: api.TaintEffectNoExecute, - TolerationSeconds: &defaultTolerationSeconds, - }, - }, - }, - }, - }, { description: "pod has tolerations, but none is for taint `not-ready:NoExecute` or `unreachable:NoExecute`, expect add tolerations for `not-ready:NoExecute` and `unreachable:NoExecute`", requestedPod: api.Pod{