Merge pull request #77851 from andyzhangx/azuredisk-max-count

remove vmsizelist call in azure disk GetVolumeLimits
k3s-v1.15.3
Kubernetes Prow Robot 2019-05-23 03:28:26 -07:00 committed by GitHub
commit b533613233
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 274 additions and 43 deletions

View File

@ -16,6 +16,7 @@ go_library(
"azure_common_windows.go",
"azure_dd.go",
"azure_dd_block.go",
"azure_dd_max_disk_count.go",
"azure_mounter.go",
"azure_provision.go",
],
@ -76,7 +77,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-03-01/compute:go_default_library",
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
],
)

View File

@ -20,7 +20,6 @@ import (
"context"
"fmt"
"strings"
"time"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-03-01/compute"
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
@ -87,9 +86,6 @@ var _ volume.VolumePluginWithAttachLimits = &azureDataDiskPlugin{}
var _ volume.ExpandableVolumePlugin = &azureDataDiskPlugin{}
var _ volume.DeviceMountableVolumePlugin = &azureDataDiskPlugin{}
// store vm size list in current region
var vmSizeList *[]compute.VirtualMachineSize
const (
azureDataDiskPluginName = "kubernetes.io/azure-disk"
defaultAzureVolumeLimit = 16
@ -164,40 +160,22 @@ func (plugin *azureDataDiskPlugin) GetVolumeLimits() (map[string]int64, error) {
return volumeLimits, nil
}
if vmSizeList == nil {
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
result, err := az.VirtualMachineSizesClient.List(ctx, az.Location)
if err != nil || result.Value == nil {
klog.Errorf("failed to list vm sizes in GetVolumeLimits, plugin.host: %s, location: %s", plugin.host.GetHostName(), az.Location)
return volumeLimits, nil
}
vmSizeList = result.Value
}
volumeLimits = map[string]int64{
util.AzureVolumeLimitKey: getMaxDataDiskCount(instanceType, vmSizeList),
util.AzureVolumeLimitKey: getMaxDataDiskCount(instanceType),
}
return volumeLimits, nil
}
func getMaxDataDiskCount(instanceType string, sizeList *[]compute.VirtualMachineSize) int64 {
if sizeList == nil {
return defaultAzureVolumeLimit
func getMaxDataDiskCount(instanceType string) int64 {
vmsize := strings.ToUpper(instanceType)
maxDataDiskCount, exists := maxDataDiskCountMap[vmsize]
if exists {
klog.V(12).Infof("got a matching size in getMaxDataDiskCount, VM Size: %s, MaxDataDiskCount: %d", vmsize, maxDataDiskCount)
return maxDataDiskCount
}
vmsize := strings.ToUpper(instanceType)
for _, size := range *sizeList {
if size.Name == nil || size.MaxDataDiskCount == nil {
klog.Errorf("failed to get vm size in getMaxDataDiskCount")
continue
}
if strings.ToUpper(*size.Name) == vmsize {
klog.V(12).Infof("got a matching size in getMaxDataDiskCount, Name: %s, MaxDataDiskCount: %d", *size.Name, *size.MaxDataDiskCount)
return int64(*size.MaxDataDiskCount)
}
}
klog.V(12).Infof("not found a matching size in getMaxDataDiskCount, VM Size: %s, use default volume limit: %d", vmsize, defaultAzureVolumeLimit)
return defaultAzureVolumeLimit
}

View File

@ -0,0 +1,264 @@
/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package azure_dd
// about how to get all VM size list,
// refer to https://github.com/kubernetes/kubernetes/issues/77461#issuecomment-492488756
var maxDataDiskCountMap = map[string]int64{
"BASIC_A0": 1,
"BASIC_A1": 2,
"BASIC_A2": 4,
"BASIC_A3": 8,
"BASIC_A4": 16,
"STANDARD_A0": 1,
"STANDARD_A10": 32,
"STANDARD_A11": 64,
"STANDARD_A1": 2,
"STANDARD_A1_V2": 2,
"STANDARD_A2": 4,
"STANDARD_A2M_V2": 4,
"STANDARD_A2_V2": 4,
"STANDARD_A3": 8,
"STANDARD_A4": 16,
"STANDARD_A4M_V2": 8,
"STANDARD_A4_V2": 8,
"STANDARD_A5": 4,
"STANDARD_A6": 8,
"STANDARD_A7": 16,
"STANDARD_A8": 32,
"STANDARD_A8M_V2": 16,
"STANDARD_A8_V2": 16,
"STANDARD_A9": 64,
"STANDARD_B1LS": 2,
"STANDARD_B1MS": 2,
"STANDARD_B1S": 2,
"STANDARD_B2MS": 4,
"STANDARD_B2S": 4,
"STANDARD_B4MS": 8,
"STANDARD_B8MS": 16,
"STANDARD_D11": 8,
"STANDARD_D11_V2": 8,
"STANDARD_D11_V2_PROMO": 8,
"STANDARD_D12": 16,
"STANDARD_D12_V2": 16,
"STANDARD_D12_V2_PROMO": 16,
"STANDARD_D13": 32,
"STANDARD_D13_V2": 32,
"STANDARD_D13_V2_PROMO": 32,
"STANDARD_D1": 4,
"STANDARD_D14": 64,
"STANDARD_D14_V2": 64,
"STANDARD_D14_V2_PROMO": 64,
"STANDARD_D15_V2": 64,
"STANDARD_D16S_V3": 32,
"STANDARD_D16_V3": 32,
"STANDARD_D1_V2": 4,
"STANDARD_D2": 8,
"STANDARD_D2S_V3": 4,
"STANDARD_D2_V2": 8,
"STANDARD_D2_V2_PROMO": 8,
"STANDARD_D2_V3": 4,
"STANDARD_D3": 16,
"STANDARD_D32S_V3": 32,
"STANDARD_D32_V3": 32,
"STANDARD_D3_V2": 16,
"STANDARD_D3_V2_PROMO": 16,
"STANDARD_D4": 32,
"STANDARD_D4S_V3": 8,
"STANDARD_D4_V2": 32,
"STANDARD_D4_V2_PROMO": 32,
"STANDARD_D4_V3": 8,
"STANDARD_D5_V2": 64,
"STANDARD_D5_V2_PROMO": 64,
"STANDARD_D64S_V3": 32,
"STANDARD_D64_V3": 32,
"STANDARD_D8S_V3": 16,
"STANDARD_D8_V3": 16,
"STANDARD_DC2S": 2,
"STANDARD_DC4S": 4,
"STANDARD_DS11-1_V2": 8,
"STANDARD_DS11": 8,
"STANDARD_DS11_V2": 8,
"STANDARD_DS11_V2_PROMO": 8,
"STANDARD_DS12": 16,
"STANDARD_DS12-1_V2": 16,
"STANDARD_DS12-2_V2": 16,
"STANDARD_DS12_V2": 16,
"STANDARD_DS12_V2_PROMO": 16,
"STANDARD_DS13-2_V2": 32,
"STANDARD_DS13": 32,
"STANDARD_DS13-4_V2": 32,
"STANDARD_DS13_V2": 32,
"STANDARD_DS13_V2_PROMO": 32,
"STANDARD_DS1": 4,
"STANDARD_DS14-4_V2": 64,
"STANDARD_DS14": 64,
"STANDARD_DS14-8_V2": 64,
"STANDARD_DS14_V2": 64,
"STANDARD_DS14_V2_PROMO": 64,
"STANDARD_DS15_V2": 64,
"STANDARD_DS1_V2": 4,
"STANDARD_DS2": 8,
"STANDARD_DS2_V2": 8,
"STANDARD_DS2_V2_PROMO": 8,
"STANDARD_DS3": 16,
"STANDARD_DS3_V2": 16,
"STANDARD_DS3_V2_PROMO": 16,
"STANDARD_DS4": 32,
"STANDARD_DS4_V2": 32,
"STANDARD_DS4_V2_PROMO": 32,
"STANDARD_DS5_V2": 64,
"STANDARD_DS5_V2_PROMO": 64,
"STANDARD_E16-4S_V3": 32,
"STANDARD_E16-8S_V3": 32,
"STANDARD_E16S_V3": 32,
"STANDARD_E16_V3": 32,
"STANDARD_E20S_V3": 32,
"STANDARD_E20_V3": 32,
"STANDARD_E2S_V3": 4,
"STANDARD_E2_V3": 4,
"STANDARD_E32-16S_V3": 32,
"STANDARD_E32-8S_V3": 32,
"STANDARD_E32S_V3": 32,
"STANDARD_E32_V3": 32,
"STANDARD_E4-2S_V3": 8,
"STANDARD_E4S_V3": 8,
"STANDARD_E4_V3": 8,
"STANDARD_E64-16S_V3": 32,
"STANDARD_E64-32S_V3": 32,
"STANDARD_E64IS_V3": 32,
"STANDARD_E64I_V3": 32,
"STANDARD_E64S_V3": 32,
"STANDARD_E64_V3": 32,
"STANDARD_E8-2S_V3": 16,
"STANDARD_E8-4S_V3": 16,
"STANDARD_E8S_V3": 16,
"STANDARD_E8_V3": 16,
"STANDARD_F1": 4,
"STANDARD_F16": 64,
"STANDARD_F16S": 64,
"STANDARD_F16S_V2": 32,
"STANDARD_F1S": 4,
"STANDARD_F2": 8,
"STANDARD_F2S": 8,
"STANDARD_F2S_V2": 4,
"STANDARD_F32S_V2": 32,
"STANDARD_F4": 16,
"STANDARD_F4S": 16,
"STANDARD_F4S_V2": 8,
"STANDARD_F64S_V2": 32,
"STANDARD_F72S_V2": 32,
"STANDARD_F8": 32,
"STANDARD_F8S": 32,
"STANDARD_F8S_V2": 16,
"STANDARD_G1": 8,
"STANDARD_G2": 16,
"STANDARD_G3": 32,
"STANDARD_G4": 64,
"STANDARD_G5": 64,
"STANDARD_GS1": 8,
"STANDARD_GS2": 16,
"STANDARD_GS3": 32,
"STANDARD_GS4-4": 64,
"STANDARD_GS4": 64,
"STANDARD_GS4-8": 64,
"STANDARD_GS5-16": 64,
"STANDARD_GS5": 64,
"STANDARD_GS5-8": 64,
"STANDARD_H16": 64,
"STANDARD_H16M": 64,
"STANDARD_H16M_PROMO": 64,
"STANDARD_H16MR": 64,
"STANDARD_H16MR_PROMO": 64,
"STANDARD_H16_PROMO": 64,
"STANDARD_H16R": 64,
"STANDARD_H16R_PROMO": 64,
"STANDARD_H8": 32,
"STANDARD_H8M": 32,
"STANDARD_H8M_PROMO": 32,
"STANDARD_H8_PROMO": 32,
"STANDARD_HB60RS": 4,
"STANDARD_HC44RS": 4,
"STANDARD_L16S": 64,
"STANDARD_L16S_V2": 32,
"STANDARD_L32S": 64,
"STANDARD_L32S_V2": 32,
"STANDARD_L4S": 16,
"STANDARD_L64S_V2": 32,
"STANDARD_L80S_V2": 32,
"STANDARD_L8S": 32,
"STANDARD_L8S_V2": 16,
"STANDARD_M128-32MS": 64,
"STANDARD_M128": 64,
"STANDARD_M128-64MS": 64,
"STANDARD_M128M": 64,
"STANDARD_M128MS": 64,
"STANDARD_M128S": 64,
"STANDARD_M16-4MS": 16,
"STANDARD_M16-8MS": 16,
"STANDARD_M16MS": 16,
"STANDARD_M208MS_V2": 64,
"STANDARD_M208S_V2": 64,
"STANDARD_M32-16MS": 32,
"STANDARD_M32-8MS": 32,
"STANDARD_M32LS": 32,
"STANDARD_M32MS": 32,
"STANDARD_M32TS": 32,
"STANDARD_M64-16MS": 64,
"STANDARD_M64-32MS": 64,
"STANDARD_M64": 64,
"STANDARD_M64LS": 64,
"STANDARD_M64M": 64,
"STANDARD_M64MS": 64,
"STANDARD_M64S": 64,
"STANDARD_M8-2MS": 8,
"STANDARD_M8-4MS": 8,
"STANDARD_M8MS": 8,
"STANDARD_NC12": 48,
"STANDARD_NC12_PROMO": 48,
"STANDARD_NC12S_V2": 24,
"STANDARD_NC12S_V3": 24,
"STANDARD_NC24": 64,
"STANDARD_NC24_PROMO": 64,
"STANDARD_NC24R": 64,
"STANDARD_NC24R_PROMO": 64,
"STANDARD_NC24RS_V2": 32,
"STANDARD_NC24RS_V3": 32,
"STANDARD_NC24S_V2": 32,
"STANDARD_NC24S_V3": 32,
"STANDARD_NC6": 24,
"STANDARD_NC6_PROMO": 24,
"STANDARD_NC6S_V2": 12,
"STANDARD_NC6S_V3": 12,
"STANDARD_ND12S": 24,
"STANDARD_ND24RS": 32,
"STANDARD_ND24S": 32,
"STANDARD_ND6S": 12,
"STANDARD_NV12": 48,
"STANDARD_NV12_PROMO": 48,
"STANDARD_NV12S_V2": 24,
"STANDARD_NV12S_V3": 12,
"STANDARD_NV24": 64,
"STANDARD_NV24_PROMO": 64,
"STANDARD_NV24S_V2": 32,
"STANDARD_NV24S_V3": 24,
"STANDARD_NV48S_V3": 32,
"STANDARD_NV6": 24,
"STANDARD_NV6_PROMO": 24,
"STANDARD_NV6S_V2": 12,
"STANDARD_PB6S": 12,
}

View File

@ -20,8 +20,6 @@ import (
"os"
"testing"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-03-01/compute"
"github.com/Azure/go-autorest/autorest/to"
"github.com/stretchr/testify/assert"
"k8s.io/api/core/v1"
@ -61,33 +59,24 @@ func TestCanSupport(t *testing.T) {
func TestGetMaxDataDiskCount(t *testing.T) {
tests := []struct {
instanceType string
sizeList *[]compute.VirtualMachineSize
expectResult int64
}{
{
instanceType: "standard_d2_v2",
sizeList: &[]compute.VirtualMachineSize{
{Name: to.StringPtr("Standard_D2_V2"), MaxDataDiskCount: to.Int32Ptr(8)},
{Name: to.StringPtr("Standard_D3_V2"), MaxDataDiskCount: to.Int32Ptr(16)},
},
expectResult: 8,
},
{
instanceType: "NOT_EXISTING",
sizeList: &[]compute.VirtualMachineSize{
{Name: to.StringPtr("Standard_D2_V2"), MaxDataDiskCount: to.Int32Ptr(8)},
},
expectResult: defaultAzureVolumeLimit,
},
{
instanceType: "",
sizeList: &[]compute.VirtualMachineSize{},
expectResult: defaultAzureVolumeLimit,
},
}
for _, test := range tests {
result := getMaxDataDiskCount(test.instanceType, test.sizeList)
result := getMaxDataDiskCount(test.instanceType)
assert.Equal(t, test.expectResult, result)
}
}