remove vmsizelist call in azure disk

add one comment

add comments

use a new way to generate vm size list
This commit is contained in:
andyzhangx 2019-05-13 08:39:36 +00:00
parent 3bc595e37c
commit b962361536
4 changed files with 274 additions and 43 deletions

View File

@ -16,6 +16,7 @@ go_library(
"azure_common_windows.go", "azure_common_windows.go",
"azure_dd.go", "azure_dd.go",
"azure_dd_block.go", "azure_dd_block.go",
"azure_dd_max_disk_count.go",
"azure_mounter.go", "azure_mounter.go",
"azure_provision.go", "azure_provision.go",
], ],
@ -76,7 +77,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/client-go/util/testing: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/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", "//vendor/github.com/stretchr/testify/assert:go_default_library",
], ],
) )

View File

@ -20,7 +20,6 @@ import (
"context" "context"
"fmt" "fmt"
"strings" "strings"
"time"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-03-01/compute" "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" "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.ExpandableVolumePlugin = &azureDataDiskPlugin{}
var _ volume.DeviceMountableVolumePlugin = &azureDataDiskPlugin{} var _ volume.DeviceMountableVolumePlugin = &azureDataDiskPlugin{}
// store vm size list in current region
var vmSizeList *[]compute.VirtualMachineSize
const ( const (
azureDataDiskPluginName = "kubernetes.io/azure-disk" azureDataDiskPluginName = "kubernetes.io/azure-disk"
defaultAzureVolumeLimit = 16 defaultAzureVolumeLimit = 16
@ -164,40 +160,22 @@ func (plugin *azureDataDiskPlugin) GetVolumeLimits() (map[string]int64, error) {
return volumeLimits, nil 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{ volumeLimits = map[string]int64{
util.AzureVolumeLimitKey: getMaxDataDiskCount(instanceType, vmSizeList), util.AzureVolumeLimitKey: getMaxDataDiskCount(instanceType),
} }
return volumeLimits, nil return volumeLimits, nil
} }
func getMaxDataDiskCount(instanceType string, sizeList *[]compute.VirtualMachineSize) int64 { func getMaxDataDiskCount(instanceType string) int64 {
if sizeList == nil { vmsize := strings.ToUpper(instanceType)
return defaultAzureVolumeLimit 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) klog.V(12).Infof("not found a matching size in getMaxDataDiskCount, VM Size: %s, use default volume limit: %d", vmsize, defaultAzureVolumeLimit)
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)
}
}
return 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" "os"
"testing" "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" "github.com/stretchr/testify/assert"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
@ -61,33 +59,24 @@ func TestCanSupport(t *testing.T) {
func TestGetMaxDataDiskCount(t *testing.T) { func TestGetMaxDataDiskCount(t *testing.T) {
tests := []struct { tests := []struct {
instanceType string instanceType string
sizeList *[]compute.VirtualMachineSize
expectResult int64 expectResult int64
}{ }{
{ {
instanceType: "standard_d2_v2", 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, expectResult: 8,
}, },
{ {
instanceType: "NOT_EXISTING", instanceType: "NOT_EXISTING",
sizeList: &[]compute.VirtualMachineSize{
{Name: to.StringPtr("Standard_D2_V2"), MaxDataDiskCount: to.Int32Ptr(8)},
},
expectResult: defaultAzureVolumeLimit, expectResult: defaultAzureVolumeLimit,
}, },
{ {
instanceType: "", instanceType: "",
sizeList: &[]compute.VirtualMachineSize{},
expectResult: defaultAzureVolumeLimit, expectResult: defaultAzureVolumeLimit,
}, },
} }
for _, test := range tests { for _, test := range tests {
result := getMaxDataDiskCount(test.instanceType, test.sizeList) result := getMaxDataDiskCount(test.instanceType)
assert.Equal(t, test.expectResult, result) assert.Equal(t, test.expectResult, result)
} }
} }