Service load balancers should include unschedulable nodes

In 16443 a set of changes were made to enable service load balancers
for Kube 1.1 and GCP to exclude unschedulable nodes from load balancer
pools. However, Unschedulable has nothing to do with whether nodes
should host service load balancer pods - the act of preventing new
pods from landing on a node has no impact on existing workloads.

In general nodes are not special, and a user who wants to exclude
otherwise healthy nodes can use the beta service load balancer
label to exclude the node from the LB pool.

This commit removes the check for unschedulable nodes from the
LB pool.
This commit is contained in:
Clayton Coleman 2020-05-06 18:22:17 -04:00
parent 06e3aeccc4
commit 1f010cc42b
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
2 changed files with 5 additions and 6 deletions

View File

@ -635,12 +635,6 @@ func nodeSlicesEqualForLB(x, y []*v1.Node) bool {
func (s *Controller) getNodeConditionPredicate() NodeConditionPredicate {
return func(node *v1.Node) bool {
// We add the master to the node list, but its unschedulable. So we use this to filter
// the master.
if node.Spec.Unschedulable {
return false
}
if s.legacyNodeRoleFeatureEnabled {
// As of 1.6, we will taint the master, but not necessarily mark it unschedulable.
// Recognize nodes labeled as master, and filter them also, as we were doing previously.

View File

@ -1379,6 +1379,11 @@ func Test_getNodeConditionPredicate(t *testing.T) {
input *v1.Node
want bool
}{
{want: false, input: &v1.Node{}},
{want: true, input: &v1.Node{Status: v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionTrue}}}}},
{want: false, input: &v1.Node{Status: v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionFalse}}}}},
{want: true, input: &v1.Node{Spec: v1.NodeSpec{Unschedulable: true}, Status: v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionTrue}}}}},
{want: true, input: &v1.Node{Status: validNodeStatus, ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{}}}},
{want: true, input: &v1.Node{Status: validNodeStatus, ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{labelNodeRoleMaster: ""}}}},
{want: true, input: &v1.Node{Status: validNodeStatus, ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{labelNodeRoleExcludeBalancer: ""}}}},