Skip to content

Commit f06a380

Browse files
authored
Merge pull request kubernetes#86266 from zqingqing1/cache-ttl-configurable
Make cloud provider caching TTL configurable
2 parents 9b840a7 + 287e329 commit f06a380

File tree

4 files changed

+124
-38
lines changed

4 files changed

+124
-38
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/azure.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,22 @@ type Config struct {
174174
// LoadBalancerResourceGroup determines the specific resource group of the load balancer user want to use, working
175175
// with LoadBalancerName
176176
LoadBalancerResourceGroup string `json:"loadBalancerResourceGroup,omitempty" yaml:"loadBalancerResourceGroup,omitempty"`
177+
178+
// AvailabilitySetNodesCacheTTLInSeconds sets the Cache TTL for availabilitySetNodesCache
179+
// if not set, will use default value
180+
AvailabilitySetNodesCacheTTLInSeconds int `json:"availabilitySetNodesCacheTTLInSeconds,omitempty" yaml:"availabilitySetNodesCacheTTLInSeconds,omitempty"`
181+
// VmssCacheTTLInSeconds sets the cache TTL for VMSS
182+
VmssCacheTTLInSeconds int `json:"vmssCacheTTLInSeconds,omitempty" yaml:"vmssCacheTTLInSeconds,omitempty"`
183+
// VmssVirtualMachinesCacheTTLInSeconds sets the cache TTL for vmssVirtualMachines
184+
VmssVirtualMachinesCacheTTLInSeconds int `json:"vmssVirtualMachinesCacheTTLInSeconds,omitempty" yaml:"vmssVirtualMachinesCacheTTLInSeconds,omitempty"`
185+
// VmCacheTTLInSeconds sets the cache TTL for vm
186+
VMCacheTTLInSeconds int `json:"vmCacheTTLInSeconds,omitempty" yaml:"vmCacheTTLInSeconds,omitempty"`
187+
// LoadBalancerCacheTTLInSeconds sets the cache TTL for load balancer
188+
LoadBalancerCacheTTLInSeconds int `json:"loadBalancerCacheTTLInSeconds,omitempty" yaml:"loadBalancerCacheTTLInSeconds,omitempty"`
189+
// NsgCacheTTLInSeconds sets the cache TTL for network security group
190+
NsgCacheTTLInSeconds int `json:"nsgCacheTTLInSeconds,omitempty" yaml:"nsgCacheTTLInSeconds,omitempty"`
191+
// RouteTableCacheTTLInSeconds sets the cache TTL for route table
192+
RouteTableCacheTTLInSeconds int `json:"routeTableCacheTTLInSeconds,omitempty" yaml:"routeTableCacheTTLInSeconds,omitempty"`
177193
}
178194

179195
var _ cloudprovider.Interface = (*Cloud)(nil)

staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go

Lines changed: 73 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ func TestParseConfig(t *testing.T) {
5959
"CloudProviderRateLimitBucketWrite": 1,
6060
"cloudProviderRateLimitQPS": 1,
6161
"CloudProviderRateLimitQPSWrite": 1,
62+
"availabilitySetNodesCacheTTLInSeconds": 100,
63+
"vmssCacheTTLInSeconds": 100,
64+
"vmssVirtualMachinesCacheTTLInSeconds": 100,
65+
"vmCacheTTLInSeconds": 100,
66+
"loadBalancerCacheTTLInSeconds": 100,
67+
"nsgCacheTTLInSeconds": 100,
68+
"routeTableCacheTTLInSeconds": 100,
6269
"location": "location",
6370
"maximumLoadBalancerRuleCount": 1,
6471
"primaryAvailabilitySetName": "primaryAvailabilitySetName",
@@ -87,29 +94,36 @@ func TestParseConfig(t *testing.T) {
8794
TenantID: "tenantId",
8895
UseManagedIdentityExtension: true,
8996
},
90-
CloudProviderBackoff: true,
91-
CloudProviderBackoffDuration: 1,
92-
CloudProviderBackoffExponent: 1,
93-
CloudProviderBackoffJitter: 1,
94-
CloudProviderBackoffRetries: 1,
95-
CloudProviderRateLimit: true,
96-
CloudProviderRateLimitBucket: 1,
97-
CloudProviderRateLimitBucketWrite: 1,
98-
CloudProviderRateLimitQPS: 1,
99-
CloudProviderRateLimitQPSWrite: 1,
100-
Location: "location",
101-
MaximumLoadBalancerRuleCount: 1,
102-
PrimaryAvailabilitySetName: "primaryAvailabilitySetName",
103-
PrimaryScaleSetName: "primaryScaleSetName",
104-
ResourceGroup: "resourcegroup",
105-
RouteTableName: "routeTableName",
106-
RouteTableResourceGroup: "routeTableResourceGroup",
107-
SecurityGroupName: "securityGroupName",
108-
SubnetName: "subnetName",
109-
UseInstanceMetadata: true,
110-
VMType: "standard",
111-
VnetName: "vnetName",
112-
VnetResourceGroup: "vnetResourceGroup",
97+
CloudProviderBackoff: true,
98+
CloudProviderBackoffDuration: 1,
99+
CloudProviderBackoffExponent: 1,
100+
CloudProviderBackoffJitter: 1,
101+
CloudProviderBackoffRetries: 1,
102+
CloudProviderRateLimit: true,
103+
CloudProviderRateLimitBucket: 1,
104+
CloudProviderRateLimitBucketWrite: 1,
105+
CloudProviderRateLimitQPS: 1,
106+
CloudProviderRateLimitQPSWrite: 1,
107+
AvailabilitySetNodesCacheTTLInSeconds: 100,
108+
VmssCacheTTLInSeconds: 100,
109+
VmssVirtualMachinesCacheTTLInSeconds: 100,
110+
VMCacheTTLInSeconds: 100,
111+
LoadBalancerCacheTTLInSeconds: 100,
112+
NsgCacheTTLInSeconds: 100,
113+
RouteTableCacheTTLInSeconds: 100,
114+
Location: "location",
115+
MaximumLoadBalancerRuleCount: 1,
116+
PrimaryAvailabilitySetName: "primaryAvailabilitySetName",
117+
PrimaryScaleSetName: "primaryScaleSetName",
118+
ResourceGroup: "resourcegroup",
119+
RouteTableName: "routeTableName",
120+
RouteTableResourceGroup: "routeTableResourceGroup",
121+
SecurityGroupName: "securityGroupName",
122+
SubnetName: "subnetName",
123+
UseInstanceMetadata: true,
124+
VMType: "standard",
125+
VnetName: "vnetName",
126+
VnetResourceGroup: "vnetResourceGroup",
113127
}
114128

115129
buffer := bytes.NewBufferString(azureConfig)
@@ -1572,7 +1586,14 @@ func TestNewCloudFromJSON(t *testing.T) {
15721586
"cloudProviderBackoff": true,
15731587
"cloudProviderRatelimit": true,
15741588
"cloudProviderRateLimitQPS": 0.5,
1575-
"cloudProviderRateLimitBucket": 5
1589+
"cloudProviderRateLimitBucket": 5,
1590+
"availabilitySetNodesCacheTTLInSeconds": 100,
1591+
"vmssCacheTTLInSeconds": 100,
1592+
"vmssVirtualMachinesCacheTTLInSeconds": 100,
1593+
"vmCacheTTLInSeconds": 100,
1594+
"loadBalancerCacheTTLInSeconds": 100,
1595+
"nsgCacheTTLInSeconds": 100,
1596+
"routeTableCacheTTLInSeconds": 100,
15761597
}`
15771598
validateConfig(t, config)
15781599
}
@@ -1622,6 +1643,13 @@ cloudProviderBackoffJitter: 1.0
16221643
cloudProviderRatelimit: true
16231644
cloudProviderRateLimitQPS: 0.5
16241645
cloudProviderRateLimitBucket: 5
1646+
availabilitySetNodesCacheTTLInSeconds: 100
1647+
vmssCacheTTLInSeconds: 100
1648+
vmssVirtualMachinesCacheTTLInSeconds: 100
1649+
vmCacheTTLInSeconds: 100
1650+
loadBalancerCacheTTLInSeconds: 100
1651+
nsgCacheTTLInSeconds: 100
1652+
routeTableCacheTTLInSeconds: 100
16251653
`
16261654
validateConfig(t, config)
16271655
}
@@ -1695,6 +1723,27 @@ func validateConfig(t *testing.T, config string) {
16951723
if azureCloud.CloudProviderRateLimitBucket != 5 {
16961724
t.Errorf("got incorrect value for CloudProviderRateLimitBucket")
16971725
}
1726+
if azureCloud.AvailabilitySetNodesCacheTTLInSeconds != 100 {
1727+
t.Errorf("got incorrect value for availabilitySetNodesCacheTTLInSeconds")
1728+
}
1729+
if azureCloud.VmssCacheTTLInSeconds != 100 {
1730+
t.Errorf("got incorrect value for vmssCacheTTLInSeconds")
1731+
}
1732+
if azureCloud.VmssVirtualMachinesCacheTTLInSeconds != 100 {
1733+
t.Errorf("got incorrect value for vmssVirtualMachinesCacheTTLInSeconds")
1734+
}
1735+
if azureCloud.VMCacheTTLInSeconds != 100 {
1736+
t.Errorf("got incorrect value for vmCacheTTLInSeconds")
1737+
}
1738+
if azureCloud.LoadBalancerCacheTTLInSeconds != 100 {
1739+
t.Errorf("got incorrect value for loadBalancerCacheTTLInSeconds")
1740+
}
1741+
if azureCloud.NsgCacheTTLInSeconds != 100 {
1742+
t.Errorf("got incorrect value for nsgCacheTTLInSeconds")
1743+
}
1744+
if azureCloud.RouteTableCacheTTLInSeconds != 100 {
1745+
t.Errorf("got incorrect value for routeTableCacheTTLInSeconds")
1746+
}
16981747
}
16991748

17001749
func getCloudFromConfig(t *testing.T, config string) *Cloud {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_cache.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ var (
3838
vmssVirtualMachinesKey = "k8svmssVirtualMachinesKey"
3939
availabilitySetNodesKey = "k8sAvailabilitySetNodesKey"
4040

41-
availabilitySetNodesCacheTTL = 15 * time.Minute
42-
vmssTTL = 10 * time.Minute
43-
vmssVirtualMachinesTTL = 10 * time.Minute
41+
availabilitySetNodesCacheTTLDefaultInSeconds = 900
42+
vmssCacheTTLDefaultInSeconds = 600
43+
vmssVirtualMachinesCacheTTLDefaultInSeconds = 600
4444
)
4545

4646
type vmssVirtualMachinesEntry struct {
@@ -87,7 +87,10 @@ func (ss *scaleSet) newVMSSCache() (*timedCache, error) {
8787
return localCache, nil
8888
}
8989

90-
return newTimedcache(vmssTTL, getter)
90+
if ss.Config.VmssCacheTTLInSeconds == 0 {
91+
ss.Config.VmssCacheTTLInSeconds = vmssCacheTTLDefaultInSeconds
92+
}
93+
return newTimedcache(time.Duration(ss.Config.VmssCacheTTLInSeconds)*time.Second, getter)
9194
}
9295

9396
func extractVmssVMName(name string) (string, string, error) {
@@ -147,7 +150,10 @@ func (ss *scaleSet) newVMSSVirtualMachinesCache() (*timedCache, error) {
147150
return localCache, nil
148151
}
149152

150-
return newTimedcache(vmssVirtualMachinesTTL, getter)
153+
if ss.Config.VmssVirtualMachinesCacheTTLInSeconds == 0 {
154+
ss.Config.VmssVirtualMachinesCacheTTLInSeconds = vmssVirtualMachinesCacheTTLDefaultInSeconds
155+
}
156+
return newTimedcache(time.Duration(ss.Config.VmssVirtualMachinesCacheTTLInSeconds)*time.Second, getter)
151157
}
152158

153159
func (ss *scaleSet) deleteCacheForNode(nodeName string) error {
@@ -186,7 +192,10 @@ func (ss *scaleSet) newAvailabilitySetNodesCache() (*timedCache, error) {
186192
return localCache, nil
187193
}
188194

189-
return newTimedcache(availabilitySetNodesCacheTTL, getter)
195+
if ss.Config.AvailabilitySetNodesCacheTTLInSeconds == 0 {
196+
ss.Config.AvailabilitySetNodesCacheTTLInSeconds = availabilitySetNodesCacheTTLDefaultInSeconds
197+
}
198+
return newTimedcache(time.Duration(ss.Config.AvailabilitySetNodesCacheTTLInSeconds)*time.Second, getter)
190199
}
191200

192201
func (ss *scaleSet) isNodeManagedByAvailabilitySet(nodeName string, crt cacheReadType) (bool, error) {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_wrap.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ import (
3535
)
3636

3737
var (
38-
vmCacheTTL = time.Minute
39-
lbCacheTTL = 2 * time.Minute
40-
nsgCacheTTL = 2 * time.Minute
41-
rtCacheTTL = 2 * time.Minute
38+
vmCacheTTLDefaultInSeconds = 60
39+
loadBalancerCacheTTLDefaultInSeconds = 120
40+
nsgCacheTTLDefaultInSeconds = 120
41+
routeTableCacheTTLDefaultInSeconds = 120
4242

4343
azureNodeProviderIDRE = regexp.MustCompile(`^azure:///subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/(?:.*)`)
4444
azureResourceGroupNameRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/(?:.*)`)
@@ -228,7 +228,10 @@ func (az *Cloud) newVMCache() (*timedCache, error) {
228228
return &vm, nil
229229
}
230230

231-
return newTimedcache(vmCacheTTL, getter)
231+
if az.VMCacheTTLInSeconds == 0 {
232+
az.VMCacheTTLInSeconds = vmCacheTTLDefaultInSeconds
233+
}
234+
return newTimedcache(time.Duration(az.VMCacheTTLInSeconds)*time.Second, getter)
232235
}
233236

234237
func (az *Cloud) newLBCache() (*timedCache, error) {
@@ -250,7 +253,10 @@ func (az *Cloud) newLBCache() (*timedCache, error) {
250253
return &lb, nil
251254
}
252255

253-
return newTimedcache(lbCacheTTL, getter)
256+
if az.LoadBalancerCacheTTLInSeconds == 0 {
257+
az.LoadBalancerCacheTTLInSeconds = loadBalancerCacheTTLDefaultInSeconds
258+
}
259+
return newTimedcache(time.Duration(az.LoadBalancerCacheTTLInSeconds)*time.Second, getter)
254260
}
255261

256262
func (az *Cloud) newNSGCache() (*timedCache, error) {
@@ -271,7 +277,10 @@ func (az *Cloud) newNSGCache() (*timedCache, error) {
271277
return &nsg, nil
272278
}
273279

274-
return newTimedcache(nsgCacheTTL, getter)
280+
if az.NsgCacheTTLInSeconds == 0 {
281+
az.NsgCacheTTLInSeconds = nsgCacheTTLDefaultInSeconds
282+
}
283+
return newTimedcache(time.Duration(az.NsgCacheTTLInSeconds)*time.Second, getter)
275284
}
276285

277286
func (az *Cloud) newRouteTableCache() (*timedCache, error) {
@@ -292,7 +301,10 @@ func (az *Cloud) newRouteTableCache() (*timedCache, error) {
292301
return &rt, nil
293302
}
294303

295-
return newTimedcache(rtCacheTTL, getter)
304+
if az.RouteTableCacheTTLInSeconds == 0 {
305+
az.RouteTableCacheTTLInSeconds = routeTableCacheTTLDefaultInSeconds
306+
}
307+
return newTimedcache(time.Duration(az.RouteTableCacheTTLInSeconds)*time.Second, getter)
296308
}
297309

298310
func (az *Cloud) useStandardLoadBalancer() bool {

0 commit comments

Comments
 (0)