-
Notifications
You must be signed in to change notification settings - Fork 303
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
Added NoSchedule effect to GetNodeConditionPredicate #792
Conversation
Welcome @vinicyusmacedo! |
Hi @vinicyusmacedo. Thanks for your PR. I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
/ok-to-test |
@@ -319,6 +319,13 @@ func GetNodeConditionPredicate() listers.NodeConditionPredicate { | |||
return false | |||
} | |||
|
|||
// Get all nodes that have a taint with NoSchedule effect | |||
for _, taint := range node.Spec.Taints { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel like it should not be this generic. It should be limited to the autoscaler's ToBeDeletedByClusterAutoscaler
taint.
Otherwise, if all nodes mark by no schedule by accident, it would disrupt all existing LB traffic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds better, I'll change it.
pkg/utils/utils.go
Outdated
@@ -319,6 +319,13 @@ func GetNodeConditionPredicate() listers.NodeConditionPredicate { | |||
return false | |||
} | |||
|
|||
// Get all nodes that have a taint with NoSchedule effect | |||
for _, taint := range node.Spec.Taints { | |||
if taint.Key == "ToBeDeletedByClusterAutoscaler" { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am wondering if there is a repo holding this well known taints?
If it can be easily referenced in this repo, then probably reference it directly.
If not, probably worthy putting it into a const variable and add comments and links to its definition.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@freehan it is exported on the autoscaler, I can try to use it. The only problem I might have is with vendoring.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@freehan It was kind of hard to vendor it (there's one dependency which go couldn't find) so I kept it as a const.
/ok-to-test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just one nit. Otherwise LGTM
@@ -67,6 +67,8 @@ const ( | |||
// This label is feature-gated in kubernetes/kubernetes but we do not have feature gates | |||
// This will need to be updated after the end of the alpha | |||
LabelNodeRoleExcludeBalancer = "alpha.service-controller.kubernetes.io/exclude-balancer" | |||
// ToBeDeletedTaint is the taint that the autoscaler adds when a node is scheduled to be deleted | |||
ToBeDeletedTaint = "ToBeDeletedByClusterAutoscaler" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there any public documentation regarding this taint?
If not, probably still need to add a link to the autoscaler repo.
https://github.com/kubernetes/autoscaler/blob/cluster-autoscaler-0.5.2/cluster-autoscaler/utils/deletetaint/delete.go#L33
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@freehan I didn't find any docs on it :/
I'll try to vendor it and its dependencies.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If there is tons of dependencies, just add the link in the comment then. No need for the hustle.
Sorry for nit picking. Would you mind squash the commits? I will lgtm it afterwards. Thanks!! |
@freehan not a problem. There ya go! |
/lgtm Thanks! |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: freehan, vinicyusmacedo The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
This PR fixes #595.
It searches for a taint with effect NoSchedule on GetNodeConditionPredicate. This way, the Load Balancer Sync can filter out nodes with taints such as ToBeDeletedByClusterAutoscaler.
Notice that, on Kubernetes Autoscaler, the node is only tainted, it doesn't look like the
node.Spec.Unschedulable
is set anywhere.