-
Notifications
You must be signed in to change notification settings - Fork 39.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Node get taint 'node.alpha.kubernetes.io/notReady' when node become 'Unknown' form 'notReady'' #43444
Comments
@derekwaynecarr @aveshagarwal help check thanks |
looking into this. |
@kubernetes/sig-scheduling-bugs |
I am able to reproduce this. |
I am seeing different behavior with kubectl describe and kubectl get:
So kubectl describe shows unkown whereas kubectl get shows NotReady. |
@aveshagarwal There also are two other issue need confirm with you if it's by design or not.
Thanks |
@mdshuai first one is by design to avoid mass eviction when all nodes are not ready/unknown. 2nd I am not sure will have to look into that though it seems node controller is honoring user intent so looks good. Also in my understanding, the original issue here should not affect the end result in a cluster regarding eviction as there is no difference w.r.t action taken irrespective of notready or unreachable taint. |
@gmarek I am noticing that when a node goes from NotReady to Unreachable even though node status is unknown I dont see the flow reaching here: |
@aveshagarwal thanks confirm |
@mdshuai how many node cluster are you testing on? |
@aveshagarwal Three |
@mdshuai I think i know what is the issue working on a fix. |
The feature is alpha, but what is reported here is indeed a bug for the feature. |
No, it's not. It's the desired behavior, as we decided at some point that we want to have only one: 'notReady' or 'unreachable' taint on the Node. Current implementation just keeps the first added taint. @davidopp @timothysc @kubernetes/sig-scheduling-misc |
Oh, I thought we decided that the taint would always match the node condition. So there would only be one taint at a time, but the taint would always reflect whatever the node condition says. That would be more intuitive. How hard would it be to change the behavior to do that? |
Easy, but not 1.6 level easy. |
I'll explain the logic here.. When we first observe a condition other than 'Ready' we add a node to the queue. Node can spend in queue some time, so we check the condition at the time when Taint is applied, so it's consistent at that time. Indeed if the condition is changed after that we won't reflect that. If we want to change this logic we'd need to decide on how we want to do it - do we want this change to be rate limited together with other taint additions (i.e. reuse the same queue as everything else), or do we want it to modify the taint instantly? I think that the latter makes more sense, so the proper fix would check the current taint in https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/node/nodecontroller.go#L686 (and corresponding part for unresponsive part), and if it's different try to update the taint directly. This has the advantage of not accounting as additional "eviction" for the purpose of monitoring. The proper fix for the former, would be to just 'remove' the key from the queue if the different taint is present in the same line as above. |
Automatic merge from submit-queue (batch tested with PRs 42961, 44042) Allow swapping NotReady and Unschedulable Taints Fix #43444 cc @kubernetes/sig-scheduling-pr-reviews @davidopp @aveshagarwal @mdshuai For cherrypick @ethernetdan
…-of-#44042-upstream-release-1.6 Automatic merge from submit-queue Automated cherry pick of kubernetes#44042 Cherry pick of kubernetes#44042 on release-1.6. kubernetes#44042: Allow swapping NotReady and Unschedulable Taints ```release-note Fix [transition between NotReady and Unreachable taints](kubernetes#43444). ```
Is this a BUG REPORT or FEATURE REQUEST? (choose one):
Bug
Kubernetes version (use
kubectl version
):v1.7.0-alpha.0.1397+e3f6f14bf0d1af-dirty
What happened:
On node stop docker, then node ready conditions will become notready; then stop kubelet on node, node ready conditions will become 'Unknown', But node only have a taint 'node.alpha.kubernetes.io/notReady'
What you expected to happen:
Node should both taint 'node.alpha.kubernetes.io/notReady:NoExecute' & 'node.alpha.kubernetes.io/unreachable:NoExecute'
How to reproduce it (as minimally and precisely as possible):
node detail: http://pastebin.test.redhat.com/466570
Anything else we need to know:
If node ready conditions change from 'Ready' to 'Unknown', node have correct taint 'node.alpha.kubernetes.io/unreachable:NoExecute'
The text was updated successfully, but these errors were encountered: