Merge pull request #57644 from feiskyer/vmss-master

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

 Reduce VirtualMachineScaleSetsClient#List calls for Azure cloud provider

**What this PR does / why we need it**:

For master nodes not managed by VMSS, current cloud provider would updateCaches each time when finding master nodes info. This could result in call limits of `VirtualMachineScaleSetsClient#List`. 

This PR adds a caches to those nodes which reduces the cache updating significantly.

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Continue of #43287.

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
pull/6/head
Kubernetes Submit Queue 2017-12-27 19:06:06 -08:00 committed by GitHub
commit 746464bc16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 5 deletions

View File

@ -132,7 +132,7 @@ type Config struct {
MaximumLoadBalancerRuleCount int `json:"maximumLoadBalancerRuleCount"`
}
// VirtualMachinesClient defines needed functions for azure network.VirtualMachinesClient
// VirtualMachinesClient defines needed functions for azure compute.VirtualMachinesClient
type VirtualMachinesClient interface {
CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error)
Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error)

View File

@ -76,15 +76,17 @@ type scaleSet struct {
cacheMutex sync.Mutex
// A local cache of scale sets. The key is scale set name and the value is a
// list of virtual machines belonging to the scale set.
cache map[string][]scaleSetVMInfo
cache map[string][]scaleSetVMInfo
availabilitySetNodesCache sets.String
}
// newScaleSet creates a new scaleSet.
func newScaleSet(az *Cloud) VMSet {
ss := &scaleSet{
Cloud: az,
availabilitySet: newAvailabilitySet(az),
cache: make(map[string][]scaleSetVMInfo),
Cloud: az,
availabilitySet: newAvailabilitySet(az),
availabilitySetNodesCache: sets.NewString(),
cache: make(map[string][]scaleSetVMInfo),
}
go wait.Until(func() {
@ -179,6 +181,11 @@ func (ss *scaleSet) getCachedVirtualMachine(nodeName string) (scaleSetVMInfo, er
return vm, nil
}
// Known node not managed by scale sets.
if ss.availabilitySetNodesCache.Has(nodeName) {
return scaleSetVMInfo{}, cloudprovider.InstanceNotFound
}
// Update cache and try again.
if err = ss.updateCache(); err != nil {
return scaleSetVMInfo{}, err
@ -188,6 +195,8 @@ func (ss *scaleSet) getCachedVirtualMachine(nodeName string) (scaleSetVMInfo, er
return vm, nil
}
// Node still not found, assuming it is not managed by scale sets.
ss.availabilitySetNodesCache.Insert(nodeName)
return scaleSetVMInfo{}, cloudprovider.InstanceNotFound
}