From efb7ae6ebc1759733ab938bcd2046a0093a24f7d Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Thu, 19 Apr 2018 16:53:52 +0800 Subject: [PATCH] Add support of zero nodes in vmss --- pkg/cloudprovider/providers/azure/azure_vmss.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/azure/azure_vmss.go b/pkg/cloudprovider/providers/azure/azure_vmss.go index be4fa23fc00..65fcfd2fe88 100644 --- a/pkg/cloudprovider/providers/azure/azure_vmss.go +++ b/pkg/cloudprovider/providers/azure/azure_vmss.go @@ -437,7 +437,7 @@ func (ss *scaleSet) GetPrimaryInterface(nodeName, vmSetName string) (network.Int // Check scale set name. // Backends of Standard load balancer could belong to multiple VMSS, so we don't check vmSet for it. - if vmSetName != "" && !strings.EqualFold(ssName, vmSetName) && !ss.useStandardLoadBalancer() { + if !strings.EqualFold(ssName, vmSetName) && !ss.useStandardLoadBalancer() { return network.Interface{}, errNotInVMSet } @@ -553,6 +553,11 @@ func (ss *scaleSet) getNodesScaleSets(nodes []*v1.Node) (map[string]sets.String, standardNodes := []*v1.Node{} for _, curNode := range nodes { + if ss.useStandardLoadBalancer() && ss.excludeMasterNodesFromStandardLB() && isMasterNode(curNode) { + glog.V(4).Infof("Excluding master node %q from load balancer backendpool", curNode.Name) + continue + } + curScaleSetName, err := extractScaleSetNameByProviderID(curNode.Spec.ProviderID) if err != nil { glog.V(4).Infof("Node %q is not belonging to any scale sets, assuming it is belong to availability sets", curNode.Name) @@ -697,7 +702,9 @@ func (ss *scaleSet) EnsureHostsInPool(serviceName string, nodes []*v1.Node, back if instanceIDs.Len() == 0 { // This may happen when scaling a vmss capacity to 0. - return fmt.Errorf("no nodes running are belonging to vmss %q", ssName) + glog.V(3).Infof("scale set %q has 0 nodes, adding it to load balancer anyway", ssName) + // InstanceIDs is required to update vmss, use * instead here since there are no nodes actually. + instanceIDs.Insert("*") } err := ss.ensureHostsInVMSetPool(serviceName, backendPoolID, ssName, instanceIDs.List(), isInternal)